Język CFC należy do grupy języków graficznych. Realizacja programu w języku CFC opiera się na „przepływie sygnału” analogicznie do „przepływu sygnału” pomiędzy elementami systemu przetwarzania sygnału. „Przepływ sygnału” następuje z wyjścia funkcji lub bloku funkcyjnego do przyłączonego wejścia następnej funkcji lub bloku funkcyjnego.
W obwodzie mogą występować sprzężenia zwrotne gdy wyjście funkcji lub bloku funkcyjnego jest wprowadzane na wejście funkcji lub bloku funkcyjnego poprzedzającego je w obwodzie. Wyróżniamy dwa rodzaje pętli :pętle jawną i pętle ukrytą.
Rys. 15. Realizacja pętli jawnej w języku CFC
Rys. 16. Realizacja pętli ukrytej w języku CFC
Kolejność wykonywania skoku może być zmieniona w przypadku użycia elementów sterujących wykonywaniem programu. Przykład użycia takiego elementu zmieszczony jest poniżej.
Rys. 17. Przykład użycia instrukcji skoku do etykiety w języku CFC .
Wyjścia bloków funkcyjnych nie powinny być łączone razem , w szczególności w realizacji sumy logicznej OR.
W języku CFC w łatwy sposób można zaimplementować regulator PID. Regulator jest blokiem typowo matematycznym, więc nie uwzględnia ograniczeń związanych ze współpracą z modułami zewnętrznymi sterownika WAGO. Poniżej przedstawiona jest aplikacja zawierająca sterownik PID wraz blokami umożliwiającymi współprace z modułami analogowymi .
Blok deklaracji zmiennych
PROGRAM PLC_PRG
VAR
Tz:REAL:=80; (*Wartosc zadana*)
ziarno_A_C:REAL:=0.0003; (* Ziarno przetwornika A/C*)
ziarno_C_A:REAL:=0.0024; (*Ziarno przetwornika C/A*)
Kp:REAL:=0.6; (*Wspolczynnik wzmocnienia regulatora PID*)
TR:WORD:=15000; (*Czas wyprzedzania regulatora PID [ms]*)
TD:WORD:=3000; (*Czas zdwajania regulatora PID [ms]*)
RES:BOOL:=FALSE; ( *Zerowanie regulatora PID*)
Output AT %QW0:WORD; (*Deklaracja wyjscia modulu analogowego*)
Input AT %IW1:WORD; (*Deklaracja wejscia modulu analogowego*)
PID: PID ; (*Deklaracia funkcji regulatora PID*)
cmp: cmp; (*Deklaracja bloku funkcyjnego CMP (porownania)*)
END_VAR
Blok programu
Blok funkcyjny CMP został zrealizowany w języku ST . Poniżej zamieszczony jest jego kod:
Blok deklaracji zmiennych
FUNCTION_BLOCK cmp
VAR_INPUT
y:REAL; (*Deklaracja wejścia*)
END_VAR
VAR_OUTPUT
y1:REAL; (*Deklaracja wyjścia*)
END_VAR
VAR
END_VAR
Blok programu
IF(y>200) THEN
y1:=200;
ELSIF (y<-100) THEN
y1:=-100;
ELSE
y1:=y;
END_IF
y1:=(y1+100)/60;
Powyższy program umożliwia konwersję z zakresu wielkości wyjściowej regulatora do wartości obsługiwanych przez przetwornik wyjściowy C/A.
Język listy instrukcji IL składa się z sekwencji, z których każda powinna zaczynać się od nowej linii . Instrukcja powinna zawierać nazwę operatora z ewentualnymi modyfikatorami oraz operand (jeden lub więcej, oddzielone przecinkami w zależności od wymagań operatora). Operatorami nogą być stałe lub zmienne opisane zgodnie z IEE 61131-3.
Instrukcja może być poprzedzona przez etykietę zakończoną dwukropkiem, natomiast ewentualny komentarz powinien być ostatnim elementem linii. Między instrukcjami można wstawiać puste linie. Lista standardowych operandów i dozwolonych modyfikatorów przedstawiona jest w poniższej tabeli:
Operator | Modyfikator | Operand | Opis |
LD | N | * | Wynik bieżący przyjmuje wartość operandu (load) |
ST | N | * | Przesłanie wyniku bieżącego do operandu (store) |
S | BOOL | Operator przyjmuje wartość „1” | |
R | BOOL | Operator przyjmuje wartość „0” | |
AND | N | BOOL | Iloczyn logiczny (AND) |
& | N | BOOL | Iloczyn logiczny (AND) |
OR | N | BOOL | Suma logiczna (OR) |
XOR | N | BOOL | Logiczna suma modulo 2 (eXclusive OR) |
ADD | * | Dodawanie (ADDition) | |
SUB | * | Odejmowanie (SUBtraction) | |
MUL | * | Mnożenie (MULtiplication) | |
DIV | * | Dzielenie (DIVision) | |
GT | * | Porównanie >(Greather Than) | |
GE | * | Porównanie >=(Greather Equal) | |
EQ | * | Porównanie =(EQual) | |
NE | * | Porównanie <>(Not Equal) | |
LE | * | Porównanie <=(Less Equal) | |
LT | * | Porównanie <(Less Than) | |
JMP | C,N | LABEL | Skok do etykiety (JuMP) |
CAL | C,N | NAME | Wywołanie (CALL) bloku funkcyjnego o nazwie NAME |
RET | C,N | Powrót (RETurn) z wywołanej funkcji lub bloku funkcyjnego |
Tabela 15. Lista standardowych operandów i dozwolonych modyfikatorów
O ile nie określono tego inaczej, to poszczególne operatory działają w ten sposób, że wartość wyrażenia jest obliczana jako wynik działania operatora na wartość bieżącą wyrażenia z uwzględnieniem wartości operandu. Modyfikator N oznacza negację operandu. Modyfikator C oznacza, że instrukcja powinna być wykonana tylko wtedy, gdy wartość bieżąca wyniku jest logiczną „1” (lub „0”, gdy użyto także modyfikatora N). Operatory porównania należy traktować jako rezultat logiczny porównania wyniku bieżącego (z lewej strony operatora) z operandem (z prawej strony operatora).
Znak „*” w kolumnie operandu oznacza, że operatory te powinny oddziaływać albo na dane określonego typu, a wynik powinien być tego samego rodzaju co operand.
Operatory S i R są wykonywane tylko w przypadku, gdy wynik bieżący jest logiczną „1”.
Wywołanie funkcji odbywa się przez umieszczenie jej nazwy w polu operatora. Wynik bieżący jest jednocześnie pierwszym argumentem funkcji, natomiast jeśli wymagane jest więcej operandów, to umieszcza się je w polu operandu. Wartość zwracana przez funkcję po pomyślnym wykonaniu instrukcji RET lub po osiągnięciu fizycznego końca staje się wartością bieżącą. Bloki funkcyjne mogą być wywoływane warunkowo lub bezwarunkowo za pomocą operatora CALL. Wywołanie takie może przyjąć jedną z trzech form: z listą wejść, z przesyłaniem wejść za pomocą operatorów LD i ST oraz z użyciem operatorów wejściowych. Poniżej przedstawiony jest przykład programu w języku IL z wykorzystaniem modyfikatorów:
LD TRUE (*Przypisanie do akumulatora logicznej wartości TRUE*)
ANDN BOOL1 (*Logiczne mnożenie wartości w *)
(*akumulatorze przez zmienną logiczną BOOL1 I negacja wyniku*)
JMPC Mark (*Jeśli wynik operacji jest TRUE, to skocz do etykiety „Mark”*)
LDN BOOL2 (*Przypisanie do akumulatora zanegowanej wartości zmiennej logicznej BOOL2 *)
ST ERG (*Zachowaj wartość BOOL2 w rejestrze ERG*)
Mark:
LD BOOL2 (*Przypisz do akumulatora wartość logiczną BOOL2 *)
Copyright © 2008-2010 EPrace oraz autorzy prac.