
УТС Грудяева / 9091_Боброва_лаб_7
.docxМИНОБРНАУКИ РОССИИ
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)
ОТЧЕТ
по лабораторной работе №7 по дисциплине «Проектирование распределенных систем управления»
Тема: «Вызов и использование программы преобразования аналогового сигнала. Проверка состояний»
Студентка гр. 9091 Боброва Н.Ю.
Преподаватель Грудяева Е.С.
Санкт-Петербург
2024
Цель работы
Ознакомление с принципами обработки аналоговых сигналов в контроллере.
Содержание работы
1. Использование области ввода и вывода, запись переменных и блоков в таблицу символов.
2. Создание блоков данных DB.
3. Программирование функционального блока FB для чтения аналоговой величины.
4. Программирование блока OB1 на языке SCL.
5. Загрузка аппаратной конфигурации в PLC. Подтверждение отсутствия ошибок на PLC и модуле расширения.
№ Варианта |
2 |
Добавление в таблицу символов блок данных и функциональный блок
Редактируем файл SCL
TYPE AI
STRUCT
// Type Description
input : WORD;// Код переменной
mxS : REAL; // Верхнее значение диапазона измерения датчика
mnS : REAL; // Нижнее значение диапазона измерения датчика
state : INT; // Состояние технологического параметра
val : REAL; // Значение технологического параметра
hh : BOOL; // Авария: сигнал выше верхней аварийной границы
h : BOOL; // Предупреждение: сигнал выше верхней рабочей границы
l : BOOL; // Предупреждение: сигнал ниже нижней рабочей границы
ll : BOOL; // Авария: сигнал ниже нижней аварийной границы
ovH : BOOL; // Авария: Переполнение или зашкал вверх
ovL : BOOL; // Авария: Переполнение или зашкал вниз
hhv : REAL;
hv : REAL; // Рабочие и аварийный границы значения технологического
lv : REAL;
llv : REAL; // параметра
END_STRUCT
END_TYPE
DATA_BLOCK DGI
STRUCT
N2_CRS : BOOL;
N3_ON : BOOL;
N3_CRS : BOOL;
N4_ON : BOOL;
N4_CRS : BOOL;
N1_AF : BOOL;
N2_AF : BOOL;
N3_AF : BOOL;
N3_F : BOOL;
MP1_ON : BOOL;
MP1_CRS : BOOL;
F3_ON : BOOL;
F4_ON : BOOL;
F3_F4_PR : BOOL;
F3_F4_CRS : BOOL;
ND2_CRS : BOOL;
END_STRUCT
BEGIN
END_DATA_BLOCK
DATA_BLOCK DGO
STRUCT
MP2_1_ST : BOOL;
MP2_2_ST : BOOL;
MP2_3_ST : BOOL;
KRL1_ST : BOOL;
KRL2_ST : BOOL;
KRL3_ST : BOOL;
N7_ST : BOOL;
N8_ST : BOOL;
N9_ST : BOOL;
N10_ST : BOOL;
Z4_1_OP : BOOL;
Z4_1_CL : BOOL;
Z4_2_OP : BOOL;
Z4_2_CL : BOOL;
Z4_3_OP : BOOL;
Z4_3_CL : BOOL;
END_STRUCT
BEGIN
END_DATA_BLOCK
DATA_BLOCK ANO
STRUCT
FC_N9 : INT;
FC_N10 : INT;
END_STRUCT
BEGIN
END_DATA_BLOCK
DATA_BLOCK ANI
STRUCT
L_in_BR : AI;
P_af_N7 : AI;
P_af_N8 : AI;
P_af_N9 : AI;
P_af_N10 : AI;
inputValue : WORD;
mxSValue : REAL;
mnSValue : REAL;
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
END_VAR
IF SYS.Read_perm THEN
DGI.N2_CRS := I_N2_CRS;
DGI.N3_ON := I_N3_ON;
DGI.N3_CRS := I_N3_CRS;
DGI.N4_ON := I_N4_ON;
DGI.N4_CRS := I_N4_CRS;
DGI.N1_AF := I_N1_AF;
DGI.N2_AF := I_N2_AF;
DGI.N3_AF:=I_N3_AF;
DGI.N3_F := I_N3_F;
DGI.MP1_ON := I_MP1_ON;
DGI.MP1_CRS := I_MP1_CRS;
DGI.F3_ON := I_F3_ON;
DGI.F4_ON := I_F4_ON;
DGI.F3_F4_PR := I_F3_F4_PR;
DGI.F3_F4_CRS := I_F3_F4_CRS;
DGI.ND2_CRS := I_ND2_CRS;
ELSE
DGI.N2_CRS:=0;
DGI.N3_ON:=0;
DGI.N3_CRS:=0;
DGI.N4_ON:=0;
DGI.N4_CRS:=0;
DGI.N1_AF:=0;
DGI.N2_AF:=0;
DGI.N3_AF:=0;
DGI.N3_F:=0;
DGI.MP1_ON:=0;
DGI.MP1_CRS:=0;
DGI.F3_ON:=0;
DGI.F4_ON:=0;
DGI.F3_F4_PR:=0;
DGI.F3_F4_CRS:=0;
DGI.ND2_CRS:=0;
I_N2_CRS:=0;
I_N3_ON:=0;
I_N3_CRS:=0;
I_N4_ON:=0;
I_N4_CRS:=0;
I_N1_AF:=0;
I_N2_AF:=0;
I_N3_AF:=0;
I_N3_F:=0;
I_MP1_ON:=0;
I_MP1_CRS:=0;
I_F3_ON:=0;
I_F4_ON:=0;
I_F3_F4_PR:=0;
I_F3_F4_CRS:=0;
I_ND2_CRS:=0;
END_IF;
END_FUNCTION
FUNCTION Write_out : VOID
VAR_TEMP
END_VAR
IF SYS.write_perm THEN
I_MP2_1_ST:=DGO.MP2_1_ST;
I_MP2_2_ST:=DGO.MP2_2_ST;
I_MP2_3_ST:=DGO.MP2_3_ST;
I_KRL1_ST:=DGO.KRL1_ST;
I_KRL2_ST:=DGO.KRL2_ST;
I_KRL3_ST:=DGO.KRL3_ST;
I_N7_ST:=DGO.N7_ST;
I_N8_ST:=DGO.N8_ST;
I_N9_ST:=DGO.N9_ST;
I_N10_ST:=DGO.N10_ST;
I_Z4_1_OP:=DGO.Z4_1_OP;
I_Z4_1_CL:=DGO.Z4_1_CL;
I_Z4_2_OP:=DGO.Z4_2_OP;
I_Z4_2_CL:=DGO.Z4_2_CL;
I_Z4_3_OP:=DGO.Z4_3_OP;
I_Z4_3_CL:=DGO.Z4_3_CL;
I_FC_N9:=ANO.FC_N9;
I_FC_N10:=ANO.FC_N10;
ELSE
I_MP2_1_ST:=0;
I_MP2_2_ST:=0;
I_MP2_3_ST:=0;
I_KRL1_ST:=0;
I_KRL2_ST:=0;
I_KRL3_ST:=0;
I_N7_ST:=0;
I_N8_ST:=0;
I_N9_ST:=0;
I_N10_ST:=0;
I_Z4_1_OP:=0;
I_Z4_1_CL:=0;
I_Z4_2_OP:=0;
I_Z4_2_CL:=0;
I_Z4_3_OP:=0;
I_Z4_3_CL:=0;
I_FC_N9:=0;
I_FC_N10:=0;
END_IF;
END_FUNCTION
FUNCTION_BLOCK ConvaAI
VAR_TEMP
// Temporary Variables
END_VAR
VAR_INPUT
I_L_in_BR : INT;
I_P_af_N7 : INT;
I_P_af_N8 : INT;
I_P_af_N9 : INT;
I_P_af_N10 : INT;
minSens, maxSens : REAL; // диапазона сигнала датчика
minEl, maxEl : REAL; // диапазона измерения
END_VAR
VAR_OUTPUT
valSens_L_in_BR : REAL;
valSens_P_af_N7 : REAL;
valSens_P_af_N8 : REAL;
valSens_P_af_N9 : REAL;
valSens_P_af_N10 : REAL;
valEL_L_in_BR : REAL;
valEL_P_af_N7 : REAL;
valEL_P_af_N8 : REAL;
valEL_P_af_N9 : REAL;
valEL_P_af_N10 : REAL;
END_VAR ;
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
// Statement
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
Запускаем симулятор, VAT-таблицу и таблицу DB30
По варианту лабораторной работы выберем значение для mxS = 35, а для mnS = -15. Тогда будем менять значения input, чтобы наблюдать за значением state.
Установим границы рабочей и аварийной зоны. Границы аварийной зоны будут обозначены в районе -14 и 34, а рабочей в пределах -13 и 33.
Для значения input = 35 мы получим температуру (val) -14,94 градусов Цельсия, что соответствует состоянию 6 – значение параметра вышло за пределы аварийной зоны
Для значения input = -35 мы получим состояние «зашкал вниз».
Подобрав значение input = 15000, мы получим температуру равную 12,12 градуса Цельсия (val). Это входит в границы рабочей зоны, а потому состояние соответствует значению 7 – нормальное значение.
Подобрав значение input = -15536, мы получим температуру равную -15 градуса Цельсия (val). Это состояние соответствует значению 4 – переполнение вниз.
Подобрав значение input = 700, мы получим температуру равную -13,43 градуса Цельсия (val). Это состояние соответствует значению 5 – Значение параметра вышло за пределы рабочей зоны.
Вывод
В данной работе был получен опыт настройки аналоговых сигналов, также продемонстрирована обработка аналоговых сигналов в контроллере.