www.eprace.edu.pl » scada » Rodzina języków programowania sterowników PLC » Język bloków funkcyjnych CFC

Język bloków funkcyjnych CFC

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 .

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 funkcyjny CMP został zrealizowany w języku ST . Poniżej zamieszczony jest jego kod:


FUNCTION_BLOCK cmp

VAR_INPUT

y:REAL; (*Deklaracja wejścia*)

END_VAR

VAR_OUTPUT

y1:REAL; (*Deklaracja wyjścia*)

END_VAR

VAR

END_VAR


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

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 *)



komentarze

Copyright © 2008-2010 EPrace oraz autorzy prac.