W poprzednim wpisie zostały omówione funkcje NORM_X oraz SCALE_X. Czas na przygotowanie uniwersalnej funkcji dla S7-1200 czyli połączenie wyżej wymienionych funkcji co finalnie da nam SCALE. Jest ona dostępna domyślnie dostępna w TIA Portal dla sterowników rodziny S7-300 oraz S7-1500.
Funkcja SCALE
Po dodaniu do projektu w TIA Portal dowolnego sterownika z rodziny S7-1500, wówczas funkcja znajduje się w zakładce Basic instruction -> Conversion operation -> Legacy. Po wywołaniu wygląda jak na poniższym rysunku
Omówmy krótka parametry jakie może przyjmować ta funkcja
- Wejściowe
IN – Wartość analogowa podawana z przetwornika odczyta bezpośrednio z modułu
HI_LIM – Górny zakres fizycznej wielkości mierzonej
LO_LIM – dolny zakres fizycznej wielkości mierzonej
BIPOLAR – Określa czy fizyczna wielkość mierzona przyjmuje tylko wartości dodatnie (wówczas do tego parametry przypisujemy logiczne 0) czy również ujemne (wówczas do tego parametry przypisujemy logiczne 1)
- Wyjściowe
RET_VAL – wartość liczbowa określająca kod błędu
OUT – Liczba typu Real, która już jest wyskalowana
Przygotowanie kodu
Wywołanie
Teraz samodzielnie napiszemy funkcję FC, która będzie realizowała służyła do skalowania wartości analogowej prosto z modułu na mierzoną wartość fizyczną. Poniżaj przedstawiam przygotowaną funkcję, która została wywołana w bloku OB1 sterownika SIMATIC S7-1200
Do projektu została dodana nowa funkcja FC o nazwie SCALE której nadano ręcznie numer 50000 (odległa wartość aby nie pokrywała się z numerami funkcje które możemy mieć już w projekcie). Dodatkowo utworzono nowy blok danych o nazwie db_Scale gdzie będą przechowywane wyniki zwracane przez funkcje SCALE.
Do parametru IN została przekazana wartość (nazwa tagu to ai_Channel0)pochodząca z pierwszego kanału przetwornika analogowego wbudowanego w sterownik S7-1200. Podobnie jak w poprzednim wpisie będziemy mierzyć wagę, która może być w granicach 0-500 kg. Z tego powodu do parametru BIPOLAR jest przekazywane logiczne 0.
Przez parametr RET_VAL jest zwracany kod błędu. W tym przypadku jest wartość zero, czyli nie ma błędu. Natomiast parametr OUT zwraca nam wagę mierzonego przedmiotu.
Testy zostały wykonane na symulatorze PLCSIM.
Kod
W pierwszej kolejności należy przygotować sekcję interfejsu czyli stworzyć parametry. Zostały one przedstawione poniżej
Należy dodać, że mamy dwie zmienne tymczasowe o nazwach:
t_MIN – służy do przechowywania minimalnej wartości zakresu pomiarowego przetwornika analogowo-cyfrowego
t_NormScale – zmienna służąca do przekazania wartości z funkcji NORM_X do funkcji SCALE_X
Utworzone też trzy stałe. Pierwsza i druga (CONST_MAX_ADC i CONST_MIN_ADC) określa graniczne wartości zakresu pomiarowego przetwornika analogowo-cyfrowego. Ostatnia stała czyli CONST_ERROR_ID0008 określa kod błędu który można odczytać w dokumentacji (gdy wartość na wejściu jest większa lub mniejsza niż graniczne zakresy pomiarowe przetwornika ADC). Kod błędu jest zwracany przez parametr z części Return (nazwa zawsze taka sama jak nazwa funkcji).
Na początku trzeba określić dolną granicę przetwornika. Zostało to zrealizowane w dwóch pierwszych networkach co widzimy poniżej
W zależności o stanu parametry BIPOLAR jest przypisywana odpowiednia wartość do zmiennej tymczasowej t_MIN.
Kolejny krok to skalowanie, czyli analogicznie jak w poprzednim wpisie.
Różnica jest w funkcji SCALE_X gdzie do parametrów MIN i MAX zostały przypisane parametry z sekcji interfejsu tworzonej przez nas funkcji SCALE.
Ostatnia czynność to obsługa błędów. Przedstawiają to poniższe networki
W networku 5 następuje sprawdzenie, czy wartość z przetwornika nie znajduje się poza zakresem przetwornika. Można to zrobić na porównaniach. Jednak prościej wykorzystać funkcje OUT_RANGE. Jeżeli taka sytuacja się powtórzy to wówczas do parametru wyjściowego SCALE jest przypisywana wartość kodu błędu oraz do parametru wyjściowego OUT jest przypisywana wartość 0.0.
W networku 6 funkcja IN_RANGE służy do sprawdzenie, czy z przetwornika znajduje się w zakresie przetwornika ADC. Jeżeli tak, to do do parametru wyjściowego SCALE jest przypisywana wartość 0.
Teraz można potestować sobie tą funkcję. Proszę sprawdzić parametr BIPOLAR.
Link do projektu: www.mistrzplc.pl/materialy/blog/01_ScaleAnalogValue.zip
Kurs wideo
Więcej na temat programowania PLC S7-1200 w języku LAD znajdziesz w kursie Chcę zostać programistą PLC: