Лекция: Теоретические основы программирования стенда 2

 

Программирование стенда 2 основано на литературе [1…6] и имеет в основе базовый язык релейно–контактных символов систем управления на основе контроллеров Микродат. Программно–логическая модель стенда 2 представлена на рис.2, стенд представляет собой имитатор управления температурой нагрева нагревателя и имеет следующий состав:

 

– на месте М00 установлен модуль связи ИРПС КМ5700, который через адаптер (RS232/RS485) связан c ПИД – регулятором температуры ТРМ –101КР, для регистрации с помощью термопары и передачи в контроллер температуры нагрева нагревателя (лампы накаливания). Модуль не маскируется.

– на месте М01установлен 16–ти разрядный модуль вывода–ввода дискретных каналов постоянного напряжения 24 В, в котором младшие 16 разрядов являются выводом постоянного тока 24 В (адреса 000.00 – 000.16), а старшие 16 разрядов являются вводом постоянного тока 24 В (адреса 100.00–100.16). Данный модуль имеет наименование КМ 5800 и маскируется на первом месте контроллера (с процессором КМ 5330) символом y/x , в среде САПР SAP 32 FK. Назначение выходов и входов модуля на месте М01 следующее:

var HL_ON 001.00 //ШИМ УПРАВЛЕНИЕ НАГРУЗКОЙ

var TRM_OFF 001.01 // РАЗРЕШЕНИЕ ШИМ УПРАВЛЕНИЯ

Модуль МО1 по каналам HL_ON и TRM_OFF связан с преобразователем мощности (DC/AC), который нагружен на нагревательный элемент (лампу HL1). Управление строиться на постоянной установке сигнала TRM_OFF и периодическом включении и отключении сигнала HL_ON, который включает и отключает нагрузку (лампу HL1) посредством преобразователя (DC/AC). Схема стенда 2 показана на рис.2. Базовая программа работы стенда 2 (название STEND2.fk) представлена ниже:

 

Алгоритм программы:

— в соответствии с протоколом связи с регулятором ТРМ101 в ячейке Т (037) формируется в десятых долях градуса температура лампы HL1, на основании замеров термопары ТП1 (50,0 градусов = 500), при задании в ячейке UST (040) уставки (50,0 градусов = 500) программа устанавливает в активное состояние команду TRM_OFF и управляет включением и отключением нагрузки (лампы HL1), посредством включения и отключения команды HL_ON, в зависимости от сравнения измеренной температуры Т(037) с заданной уставкой UST (040).

 

М00-ИРПС АДАПТЕР НА RS232/RS485 РЕГУЛЯТОР ТРМ

 
 

 


 

 

       
   

 

М01-Y/X ПРЕОБР. DC/AC ТП1

HL_ON

HL1

 
 

TRM_OFF

       
 
   
 

 


Рис. 2. Стенд 2 управления температурой нагревателя

 

//БАЗОВАЯ ПРОГРАММА СТЕНДА 2 (ФАЙЛ STEND2.fk)

#define maska 0 2 2

#define maska 1 0 0

#define maska 2 0 0

#define maska 3 0 0

#define Address 10033

#define Interrupt 0

#define Block 0

#define Scan 377

#define Period 0

var HL_ON 001.00

var TRM_OFF 001.01

//******************ПЕРЕМЕННЫЕ********************

var ZERO 020

var ZER_ 020.00

var BYTE 021

var BYTE_00 021.00

var CRC 022

var CRC_00 022.00

var MUS 023

var MUS_06 023.06

var MUS_07 023.07

var CH 025

var CH_16 025.16

var STATUS 026 // Копия регистра состояния

var RECEIVER 026.00 // Буфер приемника не пуст

var TRANSM 026.01 // Буфер передатчика не пуст

var TEST 026.02 // Самотестирование закончено

var NOTPARITI 026.05 // Ошибка контроля четности

var OVER 026.06 // Переполнение приемника

var ERRCODE 026.07 // Ошибка формата последовательного кода

var TIM_RECEIV 027 //

var TIK_RECEIV 027.16

var CH1 030

var SIZE 031

var CH2 032

var EXP 033

var MANT 034

var MANT1 035

var MANT2 036

var T 037

var UST 040

var TIM_CHIM 041

var TIK_CHIM 041.16

var DATA0 200 //

var DATA1 201 //

var DATA2 202 //

var DATA3 203 //

var DATA4 204 //

var DATA5 205 //

var DATA6 206 //

var DATA7 207 //

var DATA8 210 //

var DATA9 211 //

var DATA10 212 //

var DATA11 213 //

var DATA12 214 //

var DATA13 215 //

var DATA14 216 //

var DATA15 217 //

//******************КОНСТАНТЫ********************

// слово конфигурации порта: 9600,8,1,n

var CONFIG 300

const 1000000001001110b

// адрес узла в сети (8 бит): 0

var BYTE1 301

const 00h

// расширение адреса узла в сети (3 бит): 000b

// признак удаленного запроса (1 бит): 1b

// размер информационного поля данных (4 бит): 0000b

var BYTE2 302

const 00010010b

// старший байт идентификатора параметра (8 бит): 03h

var BYTE3 303

const 0B8h

// младший байт идентификатора параметра (8 бит): 8Ah

var BYTE4 304

const 0DFh

// константа = 1

var C1 305

const 1

// константа = 0Fh

var C0Fh 306

const 0Fh

// константа = 47h

var C47h 307

const 47h

// константа = 10

var C10 310

const 10d

// константа = 127

var C127 311

const 127d

// константа = 128

var C128 312

const 128d

[НСТ]00

[НБЛ]000

[СБС]ZERO

[СБС]001

[СБС]CH, [ПФФ]CH[УНС]20[ПРС]20[ПРС]CONFIG[ПРК]11d[ПРК]11d

[СБС]CH2

[ЧТР]000 [ЗПС]STATUS

TEST=[ОСТ]1, [ПБЛ]001

[НБЛ]001

// Конфигурируем модуль последовательного ввода/вывода

[ЧТС]CONFIG, [ЗПР]000

// Вычислим контрольную сумму посылки

[СБС]CRC

[ЧТС]BYTE1, [ВПП]000

[ЧТС]BYTE2, [ВПП]000

[ЧТС]BYTE3, [ВПП]000

[ЧТС]BYTE4, [ВПП]000

[ЧТС]ZERO, [ВПП]000

[ЧТС]ZERO, [ВПП]000

// Формируем посылку

[СБС]CH

[КБМ]23h, [ЗПС]MUS, [ВПП]003

[ЧТС]BYTE1, [ВПП]002

[ЧТС]BYTE2, [ВПП]002

[ЧТС]BYTE3, [ВПП]002

[ЧТС]BYTE4, [ВПП]002

[ЧТС]ZERO, [ВПП]002

[ЧТС]ZERO, [ВПП]002

[ЧБС]CRC, [ВПП]002

[ЧБМ]CRC, [ВПП]002

[КБМ]0Dh, [ЗПС]MUS, [ВПП]003

// Передаем сформированную посылку

[СБС]CH

[ПФМ]CH[ПРС]400[ПРС]0004[ПРК]18d[ПРК]18d

[СБС]CH, [СБС]TIM_RECEIV

[ПБЛ]002

[НБЛ]002

// Читаем регистр состояния модуля последовательного ввода/вывода

[ЧТР]000, [ЗПС]STATUS

// Если нет данных в течение 0.3 сек, перейти на блок обработки принятой посылки

[ТВД]TIM_RECEIV[ПРК]2

TIK_RECEIV = [ЧТС]CH,[ЗПС]SIZE

[СБС]CH,[ СБС]CH1, [ПБЛ]003

// Модуль не прошел тест

^TEST = [ПБЛ]002

// Если есть ошибки

NOTPARITI+OVER+ERRCODE = [ПБЛ]001

// Если буфер приема не пуст, вычитывать данные из буфера

RECEIVER = [ЧТР]004, [ЗПС]MUS, [СБС]TIM_RECEIV

[ЗСФ]CH[ПРС]500[ПРС]MUS[ПРК]100d

[НБЛ]003

[ЧСФ]CH[ПРС]500[ПРС]MUS[ПРК]30d

CH_16 = [ПБЛ]001

[РВН]MUS[ПРК]23h = [ПБЛ]003

[РВН]MUS[ПРК]0Dh = [ПБЛ]004

^ZER_= [ЧТС]MUS, [ВАС]C47h, [ЗПС]BYTE

[СЦС]BYTE, [СЦС]BYTE, [СЦС]BYTE, [СЦС]BYTE

[ЧСФ]CH[ПРС]500[ПРС]MUS[ПРК]30d

[ЧТС]MUS, [ВАС]C47h, [ПСС]BYTE, [ПСС]ZERO, [ЗПС]BYTE

[ЗСФ]CH1[ПРС]DATA0[ПРС]BYTE[ПРК]30d

// — - — - — - — - — - — - — - — - — - — - --

[НБЛ]004

[ЧТС]DATA4, [ЗПС]EXP, [СЦС]EXP.[R]EXP.10

DATA5.07 = [ ]EXP.00

^ZER_=[ЧТС]EXP, [ВАС]C127, [ЗПС]EXP

[ЧТС]DATA5, [ЗПС]MANT1, [R]MANT1.07

[ЧТС]DATA6, [ЗПС]MANT2

[СБС]MANT, [S]MANT.00

[ПБЛ]005

// — - — - — - — - — - — - — - — - — - — - — -

[НБЛ]005

[РВН]EXP[ПРК]0 = [ЧТС]MANT1, [УМН]C10[ПРС]MUS,

[ДЕЛ]C128[ПРС]MUS,

[ЗПС]MANT1, ЧТС]MANT, [УМН]C10[ПРС]MUS, [САС]MANT1, [ЗПС]T

[ПБЛ]001

^ZER_= [СЦС]MANT

MANT1.06= [ ]MANT.00

^ZER_= [СЦС]MANT1, [R]MANT1.07

MANT2.07 = [ ]MANT1.00

^ZER_= [СЦС]MANT2

[ЧТС]EXP, [ВАС]C1, [ЗПС]EXP

// Подпрограмма вычисления контрольной суммы приборов ОВЕН ТРМ138, ТРМ101, СИ8...

// Вызов: 1. Сброс CRC

// 2. записываем в аккумулятор очередной байт посылаемого кадра

// 3. вызываем подпрограмму

// 4. переход к п.2 пока не закончатся байты кадра

// 5. текущая контрольная сумма в слове CRC

// Вычисление производится следующим образом:

// 1. исключающее ИЛИ (Старший байт CRC и очередной байт посылки)

// 2. сдвиг CRC не циклический к старшим разрядам

// 3. если бит 7 = 1 полученного результата в п.1, то CRC = исключающее ИЛИ (CRC и 8F57h)

// 4. сдвиг текущего байта кадра не циклический к старшим разрядам

// 5. перейти к п.1 если количество сдвигов байта меньше 8, иначе завершить обработку текущего байта кадра.

[НПП]000

// Принимаем очередной байт

[ЗПС]BYTE

// Выполняем подсчет hash свертки

[ВПП]001, [ВПП]001, [ВПП]001, [ВПП]001, [ВПП]001, [ВПП]001, [ВПП]001,

[ВПП]001

[НПП]001

// получаем старший байт CRC, кладем в MUS

[ЧТС]CRC,[КБМ]0, [ЗПС]MUS, [ПББ]MUS

// MUS = исключающее ИЛИ (MUS и BYTE)

[ЧТС]MUS, [ПСС]BYTE, [ПСС]ZERO ,[ЗПС]MUS

// сдвиг CRC не циклический к старшим разрядам

[СЦС]CRC, [R]CRC_00

// если бит 7 = 1 CRCH, то CRC = исключающее ИЛИ (CRC и 8F57h)

MUS_07 = [КБС]8Fh, [КБМ]57h, [ПСС]CRC, [ПСС]ZERO, [ЗПС]CRC

// сдвиг текущего байта кадра не циклический к старшим разрядам

^ZER_= [СЦС]BYTE, [R]BYTE_00

// Подпрограмма формирования посылки из кадра для приборов ОВЕН ТРМ138, ТРМ101, СИ8...

[НПП]002

// Принимаем очередной байт

[ЗПС]BYTE

// Выделяем старшую тетраду и преобразовываем в ASCII

[ЗПС]MUS, [СЦМ]MUS, [СЦМ]MUS, [СЦМ]MUS, [СЦМ]MUS, [ЧТС]MUS,

[ПУС]C0Fh,

[САС]C47h, [ЗПС]MUS

// Записать байт посылки в файл

[ВПП]003

// Выделяем младшую тетраду и преобразовываем в ASCII

[ЧТС]BYTE, [ПУС]C0Fh, [САС]C47h, [ЗПС]MUS

// Записать байт посылки в файл

[ВПП]003

[НПП]003

// Запись байта посылки в файл

[ЗСФ]CH[ПРС]400[ПРС]MUS[ПРК]30d

// — - — - — - — - — - — - — - — - — - — - — -

[НСТ]01

[НБЛ]10

[S]TRM_OFF

[МНШ]T[ПРС]UST=[ ]HL_ON

[НОП]

[НОП]

[НОП]

[НОП]

[НОП]

[НОП]

[НОП]

[НОП]

[КОН]00

 

 

еще рефераты
Еще работы по информатике