Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

УТС Грудяева / код рсу

.txt
Скачиваний:
0
Добавлен:
07.08.2024
Размер:
9.66 Кб
Скачать
TYPE AI
STRUCT
input : WORD;
mxS : REAL;
mnS : REAL;

state : INT;
val : INT;
hh : BOOL;
h : BOOL;
l : BOOL;
ll : BOOL;
ovH : BOOL;
ovL : BOOL;

hhv : REAL;
hv : REAL;
iv : REAL;
iiv : REAL;
END_STRUCT
;
END_TYPE


DATA_BLOCK DGI
STRUCT
N8_ON : BOOL;
N8_F : BOOL;
N8_CRS : BOOL;
N7_ON : BOOL;
N7_F : BOOL;
N7_CRS : BOOL;
N6_F : BOOL;
END_STRUCT
BEGIN
END_DATA_BLOCK

DATA_BLOCK DGO
STRUCT
Z4_19_ON : BOOL;
Z4_19_OF : BOOL;
Z4_18_ON : BOOL;
Z4_18_OF : BOOL;
Z4_17_ON : BOOL;
Z4_17_OF : BOOL;
Z4_16_ON : BOOL;
Z4_16_OF : BOOL;
Z4_15_ON : BOOL;
Z4_15_OF : BOOL;
Z4_14_ON : BOOL;
Z4_14_OF : BOOL;
Z4_13_ON : BOOL;
Z4_13_OF : BOOL;
Z4_12_ON : BOOL;
Z4_12_OF : BOOL;
END_STRUCT
BEGIN
END_DATA_BLOCK


DATA_BLOCK ANI
STRUCT

T_line_0 : AI;
pH_line_2 : AI;
pH_line_0 : AI;
L_RHP : AI;
L_RCW : AI;

inputValue : WORD;
mxSValue : REAL;
mnSValue : REAL;
END_STRUCT
BEGIN
END_DATA_BLOCK

DATA_BLOCK ANO
STRUCT
FC_ND_4 : WORD;
FC_ND_3 : WORD;
END_STRUCT
BEGIN
END_DATA_BLOCK


FUNCTION_BLOCK AI_eval
TITLE = 'чтение аналог. сигналов периферии в DB'
VAR_INPUT
input : WORD;// Код переменной
mxS : REAL; // Верхнее значение диапазона измерения датчика
mnS : REAL; // Нижнее значение диапазона измерения датчика
END_VAR
VAR
sensorOut : REAL;
sens : REAL;
sens1 : REAL;
inCode : INT;
END_VAR
VAR_OUTPUT
state : INT; // Состояние технологического параметра
val : REAL; // Значение технологического параметра
hh : BOOL; // Авария: сигнал выше верхней аварийной границы
h : BOOL; // Предупреждение: сигнал выше верхней рабочей границы
l : BOOL; // Предупреждение: сигнал ниже нижней рабочей границы
ll : BOOL; // Авария: сигнал ниже нижней аварийной границы
ovH : BOOL; // Авария: Переполнение или зашкал вверх
ovL : BOOL; // Авария: Переполнение или зашкал вниз
END_VAR
VAR_IN_OUT
hhv : REAL; hv : REAL; // Рабочие и аварийный границы значения технологического
lv : REAL; llv : REAL; // параметра
END_VAR
CONST
brk := 0; // обрыв
ovsH := 1; //зашкал вверх
ovfL := 2; //зашкал вниз
ovfH := 3; // переполнение вверх
ovsL := 4; // переполнение вниз
wrn := 5; // значение параметра вышло за пределы рабочей зоны
alr := 6; // значение параметра вышло за пределы аварийной зоны
norm := 7; //нормальное значение
END_CONST
// корректировка введенных параметров
hhv := LIMIT (mn := mnS, in := hhv, mx := mxS);
hv := LIMIT (mn := mnS, in := hv, mx := mxS);
lv := LIMIT (mn := mnS, in := lv, mx := mxS);
llv := LIMIT (mn := mnS, in := llv, mx := mxS);
// Чтение входного кода
inCode := WORD_TO_INT(input); // Преобразование сигнала датчика
//Переходы состояний сигнала
IF (inCode >= 32767) OR (inCode <= -32768) THEN state:=Brk; // обрыв датчика
ELSIF (inCode < 32767)AND(inCode > 32511) THEN state:=ovsH; // перегрузка по току
ELSIF (inCode < -4684)AND(inCode > -32768) THEN state:=ovsL; // переполнение по току
ELSIF (inCode <= 32511)AND(inCode > 27648) THEN state:=ovfH;
ELSIF (inCode < 0 )AND(inCode >= -4864) THEN state:=ovfL;
ELSE //Норма
sensorOut := DINT_TO_REAL(INT_TO_DINT(inCode)) /
(INT_TO_DINT(27648)) * (20.0 - 4.0) + 4.0; // мА
// коэфф. датчика
sens1 := (mxS - mnS);// столько единиц измерения параметра в 1 мА
sens := sens1/(20.0 - 4.0);// столько единиц измерения параметра в 1 мА
// преобразуем выходное значение датчика в значение измеряемой величины
val := (sensorOut - 4) * sens + mnS;// сигнал в ед. изм.; градусы, паскали и т.д.
hh := (val >= hhv);
h := (val >=hv AND val <hhv);
l := (val <=lv AND val >llv);
ll := (val <= llv);
IF (hh OR ll) THEN state:=alr;
ELSIF (h OR l) THEN state:=wrn;
ELSE state:=norm;
END_IF;
END_IF;
ovH := (state=ovsH) OR (state=ovfH);
ovL := (state=ovsL) OR (state=ovfL);
END_FUNCTION_BLOCK

DATA_BLOCK Sys
STRUCT
Read_perm : BOOL;
Write_perm : BOOL;
END_STRUCT
BEGIN
END_DATA_BLOCK



FUNCTION Read_in : VOID

VAR_TEMP
// Temporary Variables

END_VAR
IF Sys.Read_perm THEN
DGI.N8_ON := I_N8_ON;
DGI.N8_F := I_N8_F;
DGI.N8_CRS := I_N8_CRS;
DGI.N7_ON := I_N7_ON;
DGI.N7_F := I_N7_F;
DGI.N7_CRS := I_N7_CRS;
DGI.N6_F := I_N6_F;

(* ANI.T_line_0 := I_T_line_0;
ANI.pH_line_2 := I_pH_line_2;
ANI.pH_line_0 := I_pH_line_0;
ANI.L_RHP := I_L_RHP;
ANI.L_RCW := I_L_RCW;*)

END_IF
;
END_FUNCTION


FUNCTION Write_Out : VOID

VAR_TEMP
// Temporary Variables

END_VAR
IF Sys.Write_perm THEN
I_Z4_19_ON := DGO.Z4_19_ON;
I_Z4_19_OF := DGO.Z4_19_OF;
I_Z4_18_ON := DGO.Z4_18_ON;
I_Z4_18_OF := DGO.Z4_18_OF;
I_Z4_17_ON := DGO.Z4_17_ON;
I_Z4_17_OF := DGO.Z4_17_OF;
I_Z4_16_ON := DGO.Z4_16_ON;
I_Z4_16_OF := DGO.Z4_16_OF;
I_Z4_15_ON := DGO.Z4_15_ON;
I_Z4_15_OF := DGO.Z4_15_OF;
I_Z4_14_ON := DGO.Z4_14_ON;
I_Z4_14_OF := DGO.Z4_14_OF;
I_Z4_13_ON := DGO.Z4_13_ON;
I_Z4_13_OF := DGO.Z4_13_OF;
I_Z4_12_ON := DGO.Z4_12_ON;
I_Z4_12_OF := DGO.Z4_12_OF;

I_FC_ND_4 := ANO.FC_ND_4;
I_FC_ND_3 := ANO.FC_ND_3;
ELSE
I_Z4_19_ON := 0;
I_Z4_19_OF := 0;
I_Z4_18_ON := 0;
I_Z4_18_OF := 0;
I_Z4_17_ON := 0;
I_Z4_17_OF := 0;
I_Z4_16_ON := 0;
I_Z4_16_OF := 0;
I_Z4_15_ON := 0;
I_Z4_15_OF := 0;
I_Z4_14_ON := 0;
I_Z4_14_OF := 0;
I_Z4_13_ON := 0;
I_Z4_13_OF := 0;
I_Z4_12_ON := 0;
I_Z4_12_OF := 0;

I_FC_ND_4 := 0;
I_FC_ND_3 := 0;

DGO.Z4_19_ON := 0;
DGO.Z4_19_OF := 0;
DGO.Z4_18_ON := 0;
DGO.Z4_18_OF := 0;
DGO.Z4_17_ON := 0;
DGO.Z4_17_OF := 0;
DGO.Z4_16_ON := 0;
DGO.Z4_16_OF := 0;
DGO.Z4_15_ON := 0;
DGO.Z4_15_OF := 0;
DGO.Z4_14_ON := 0;
DGO.Z4_14_OF := 0;
DGO.Z4_13_ON := 0;
DGO.Z4_13_OF := 0;
DGO.Z4_12_ON := 0;
DGO.Z4_12_OF := 0;

ANO.FC_ND_4 := 0;
ANO.FC_ND_3 := 0;

END_IF;
;
END_FUNCTION



FUNCTION_BLOCK ConvaAI

VAR_TEMP
// Temporary Variables
END_VAR
VAR_INPUT
I_T_line_0 : INT;
I_pH_line_2 : INT;
I_pH_line_0 : INT;
I_L_RHP : INT;
I_L_RCW : INT;

minSens, maxSens : REAL; // диапазона сигнала датчика
minEl, maxEl : REAL; // диапазона измерения
END_VAR
VAR_OUTPUT
valSens_T_line_0 : REAL;
valSens_pH_line_2 : REAL;
valSens_pH_line_0 : REAL;
valSens_L_RHP : REAL;
valSens_L_RCW : REAL;

valEL_T_line_0 : REAL;
valEL_pH_line_2 : REAL;
valEL_pH_line_0 : REAL;
valEL_L_RHP : REAL;
valEL_L_RCW : REAL;
END_VAR
(*T_line_0 := I_T_line_0;
pH_line_2 := I_pH_line_2;
pH_line_0 := I_pH_line_0;
L_RHP := I_L_RHP;
L_RCW := I_L_RCW;

valSens_T_line_0 := ((INT_TO_REAL(I_T_line_0)/27648)*(maxSens-minSens))+minSens;
valEL_T_line_0 := ((INT_TO_REAL(I_T_line_0)/27648)*(maxSens-minSens))+minEL;

valSens_pH_line_2 := ((INT_TO_REAL(I_pH_line_2)/27648)*(maxSens-minSens))+minSens;
valEL_pH_line_2 := ((INT_TO_REAL(I_pH_line_2)/27648)*(maxSens-minSens))+minEL;

valSens_pH_line_0 := ((INT_TO_REAL(I_pH_line_0)/27648)*(maxSens-minSens))+minSens;
valEL_pH_line_0 := ((INT_TO_REAL(I_pH_line_0)/27648)*(maxSens-minSens))+minEL;

valSens_L_RHP := ((INT_TO_REAL(I_L_RHP)/27648)*(maxSens-minSens))+minSens;
valEL_L_RHP := ((INT_TO_REAL(I_L_RHP)/27648)*(maxSens-minSens))+minEL;

valSens_L_RCW := ((INT_TO_REAL(I_L_RCW)/27648)*(maxSens-minSens))+minSens;
valEL_L_RCW := ((INT_TO_REAL(I_L_RCW)/27648)*(maxSens-minSens))+minEL;
*)
;
END_FUNCTION_BLOCK


FUNCTION_BLOCK Double_Call
VAR
evalute : AI_eval
;
END_VAR

evalute(input := ANI.inputValue
,mxS:= ANI.mxSValue
,mnS := ANI.mnSValue
);

END_FUNCTION_BLOCK



ORGANIZATION_BLOCK OB1

VAR_TEMP
// Reserved
info : ARRAY[0..19] OF BYTE;
// Temporary Variables

END_VAR

Read_in();
Write_Out();

Double_Call.Double_Call_DB();

(*
ConvaAI.ConvaAI_DB(minSens := 0.0
,maxSens := 100.0
,minEl := 0.0
,maxEl := 10
); *)

END_ORGANIZATION_BLOCK