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

УТС Грудяева / 9091_Боброва_лаб_7

.docx
Скачиваний:
0
Добавлен:
07.08.2024
Размер:
571.64 Кб
Скачать

МИНОБРНАУКИ РОССИИ

САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)

ОТЧЕТ

по лабораторной работе №7 по дисциплине «Проектирование распределенных систем управления»

Тема: «Вызов и использование программы преобразования аналогового сигнала. Проверка состояний»

Студентка гр. 9091 Боброва Н.Ю.

Преподаватель Грудяева Е.С.

Санкт-Петербург

2024

Цель работы

Ознакомление с принципами обработки аналоговых сигналов в контроллере.

Содержание работы

1. Использование области ввода и вывода, запись переменных и блоков в таблицу символов.

2. Создание блоков данных DB.

3. Программирование функционального блока FB для чтения аналоговой величины.

4. Программирование блока OB1 на языке SCL.

5. Загрузка аппаратной конфигурации в PLC. Подтверждение отсутствия ошибок на PLC и модуле расширения.

№ Варианта

2

  1. Добавление в таблицу символов блок данных и функциональный блок

  1. Редактируем файл 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

  1. Запускаем симулятор, 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 – Значение параметра вышло за пределы рабочей зоны.

Вывод

В данной работе был получен опыт настройки аналоговых сигналов, также продемонстрирована обработка аналоговых сигналов в контроллере.

Соседние файлы в папке УТС Грудяева