Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Реализация законов аналогового регулирования на контроллерах-МЭИ.doc
Скачиваний:
7
Добавлен:
01.07.2025
Размер:
7 Мб
Скачать
☆

Проверка на достоверность аналоговых сигналов

Реализация программы31 проверки на достоверность для одного входного

аналогового сигнала для контроллера ПЛК-154 на языке ST (рис. 78)

FUNCTION_BLOCK analog_defens

VAR_INPUT

x: REAL;

END_VAR

VAR_OUTPUT

x1: REAL; D: BOOL;

END_VAR

VAR

ZPM: Zapom; ZPM2: Zapom;

blinker2: BLINK; blinker1: BLINK;

RS_tr: RS;

ton1: TON;

ZPM_F: Zapom; ZPM3: Zapom;

OGS: ogran_skor;

OBR: BOOL; Vyb_PROV: BOOL; Dgen: BOOL; POR: BOOL;

END_VAR

Рис. 78. Программная реализация алгоритма проверки на достоверность

для одного аналогового канала

Функциональный блок запоминание

FUNCTION_BLOCK Zapom

VAR_INPUT

c: BOOL:=TRUE;

x: REAL;

END_VAR

VAR_OUTPUT

d1: BOOL;

y: REAL;

END_VAR

VAR

Rtr: R_TRIG;

tp_time:TP;

d: BOOL;

END_VAR

tp_time(IN:=c, PT:=T#0.3s);

d1:=tp_time.Q;

Rtr(CLK:=c);

d:=Rtr.Q;

IF d=TRUE THEN y:=x;

END_IF

Функциональный блок ограничение скорости

FUNCTION_BLOCK ogran_skor

VAR_INPUT

in: REAL; lim: REAL;

END_VAR

VAR_OUTPUT

Q: REAL;

prev: BOOL;

END_VAR

VAR

podkluchenie: R_TRIG;

C_pod: BOOL;

Qpred: REAL;

END_VAR

podkluchenie(CLK:=TRUE , Q=>C_pod );

IF C_pod=TRUE THEN Q:=in;

END_IF

Qpred:=Q;

IF ABS(in-Qpred)>lim THEN prev:=TRUE;

IF (in-Qpred)>0 THEN Q:=Qpred+lim*1;

ELSIF (in-Qpred)>0 THEN Q:=Qpred+lim*(-1);

ELSIF (in-Qpred)=0 THEN Q:=Qpred+lim*0;

END_IF; ELSE Q:=in; prev:=FALSE; END_IF

Приложение з Выбор исправного канала из двух

Программная реализация выбора исправного канала из двух (рис. 79)

FUNCTION_BLOCK Maj_2_2_CKC

VAR_INPUT

x1: REAL; x2: REAL;

Op1: BOOL; Op2: BOOL; uv_oper2: BOOL; uv_oper1: BOOL;

END_VAR

VAR_OUTPUT

y: REAL;

otkaz1: BOOL; otkaz2:BOOL; rashojdenie: BOOL;

END_VAR

VAR

ok1:BOOL; ok2:BOOL;

x1_def: analog_defens; x2_def: analog_defens;

ckc1: Skolz_SRednee; ckc2: Skolz_SRednee;

no2: Null_organ; no1: Null_organ; no3: Null_organ;

D1_1: BOOL; D2_2: BOOL;

rs1: RS; rs2: RS;

per: PER_3KAN;

ton1: TON; ton2: TON;

dd1: Digit_Defens; dd2: Digit_Defens;

vybran1_kanal: BOOL; vybran2_kanal: BOOL; podkl_2: BOOL; podkl_1: BOOL;

ojidanie: BOOL; All_ok: BOOL;

srednee1_2: REAL ;

blinker: BLINK;

zpm: Zapom;

END_VAR

Рис. 79. Программа выбора исправного канала из двух каналов

Функциональный блок ноль-орган

FUNCTION_BLOCK Null_organ

VAR_INPUT

x1: REAL; x2: REAL; x_vg: REAL; x_ng: REAL; delt_x: REAL;

END_VAR

VAR_OUTPUT

D1: BOOL; D2: BOOL; D: BOOL;

END_VAR

VAR

Z: REAL;

END_VAR

Z:=x1-x2;

IF Z<(x_vg-delt_x) THEN D1:=FALSE;

END_IF;

IF Z>=x_vg THEN D1:=TRUE;

END_IF;

IF x_vg>Z THEN

IF Z>=(x_vg-delt_x) THEN D1:=D1;

END_IF;

END_IF;

IF Z>(x_ng+delt_x) THEN D2:=FALSE;

END_IF;

IF Z<=x_ng THEN D2:=TRUE;

END_IF;

IF x_ng<Z THEN

IF Z<=(x_ng+delt_x) THEN D2:=D2;

END_IF;

END_IF;

D:=D1 OR D2

Функциональный блок расчета скользящего среднего

UNCTION_BLOCK Skolz_SRednee

VAR_INPUT

x: REAL; Csb: BOOL;

END_VAR

VAR_OUTPUT

Sred: REAL; Yzap: REAL;

END_VAR

VAR

i: INT;

J:ARRAY[0..9] OF REAL;

Co: BOOL;

blinker1:BLINK;

Cvkl:R_TRIG;

podkluchenie:R_TRIG;

Sta: BOOL;

Sum: REAL;

END_VAR

podkluchenie(CLK:=TRUE , Q=>Csb );

blinker1(ENABLE:=TRUE , TIMELOW:=T#0.4s , TIMEHIGH:=T#0.4s );

Sta:=blinker1.OUT;

Cvkl(CLK:=Sta );

Co:=Cvkl.Q;

IF Csb=TRUE THEN

FOR i:=0 TO 9 DO J[i]:=x;

END_FOR;

Sred:=x;

sum:=x*10;

END_IF;

IF Csb=FALSE THEN

IF Co=TRUE THEN

sum:=sum-j[9];

FOR i:=9 TO 1 BY -1 DO

J[i]:=J[i-1];

END_FOR;

J[0]:=x;

Sum:=Sum+J[0];

Sred:=sum/10;

END_IF;

END_IF;

Yzap:=J[9];