CoDeSyS 3.5. Опрос ТРМ 201 по сети RS-485 с использованием ПЛК
Рубрика: Примеры программ
Разработанная программа на языке ST позволяет опрашивать регистры Modbus по сети RS — 485. Чтение и запись двух параметров с прибора ТРМ201 компании ОВЕН.
Смысл в том, что мы создаем конфигурацию опроса через перечисленные библиотеки.
Сначала мы открываем COM-порт, проводим инициализацию. После того, как откроем порт, мы по очереди с помощью селектора CASE начинаем опрашивать каждый блок с соответствующими ему настройками и переменными.
В принципе можно опросить любое устройство по этому принципу. Здесь используется внутренний протокол ОВЕН.
Программная среда: CoDeSyS 3.5
Используемые библиотеки: SysLibCom, OwenNet, ComService
Инициализация переменных:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | PROGRAM PLC_PRG VAR get_fl_owen:OWEN_GET_REAL; (*Чтение параметра типа Real*) send_fl_owen:OWEN_SET_REAL; (*Запись параметра типа Real*) COM_SERVICE1: COM_SERVICE; (*открытие COM-порта*) cmpl: BOOL; (* признак завершения операции *) err: INT; (*номер ошибки*) port_opened: BYTE := 0; (*состояние порта*) Settings: COMSETTINGS; (* настройки последова-тельного порта *) com_num: PORTS:=0; (*0 — RS-485, 1 — RS-232*) TimeOut: TIME:=T#50ms; (*таймаут*) Enabl: BOOL:=TRUE; (*состояние работы блока*) wTime: WORD; (*значение времени для измери-теля*) master1: BYTE := 0; A: REAL; (*считанное значение из ТРМ201*) b: REAL:=30; END_VAR |
Исходный код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | (*Устанавливаем настройки COM-порта*) IF port_opened=0 THEN Settings.Port:=com_num; (*номер COM-порта*) Settings.dwBaudRate:=115200; (*скорость*) Settings.byParity:=0; Settings.dwTimeout:=0; Settings.byStopBits:=0; Settings.dwBufferSize:=0; Settings.dwScan:=0; END_IF (*Описание интерфейса библиотек ФБ для работы с протоколом ОВЕН 19*) COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=OPEN_TSK ); (*Если COM-порт открыт, то переходим к приему и передачи данных *) IF COM_SERVICE1.ready THEN port_opened:=2; END_IF IF port_opened=2 THEN (*Удачно проинициализировали*) CASE master1 OF (*чтение параметра типа Real из прибора ТРМ201 с адресом 8 из параметр с именем PV и индексом 0*) 0: get_fl_owen( Enable:=Enabl , (* разрешение работы блока *) Addr:=8 , (*адрес прибора*) AddrLen:=A8BIT , (*длина адреса*) Name:=’pv’ , (*имя параметра, значение которого считываем*) Index:=65535 , (*индекс параметра*) RealType:=FLOAT24 , (*тип параметра, значение которого считываем*) ComHandle:= Settings.Port, (*номер COM-порта*) TimeOut:=TimeOut , (*Таймаут T#50ms*) Complete=>cmpl , (* скопировать признак готовности результата *) Value=>a , (*считанное значение*) wTime=>wTime , (*значение времени для измерителя*) Error=> err ); (* скопировать регистр ошибок *) (*если установлен признак завершения операции, то *) IF cmpl THEN master1:=1;(*переходим к выполнению следующего блока*) END_IF 1:(*Запись параметра типа Real в прибор ТРМ201 с адресом 8 в параметр с именем SP и индексом 0*) send_fl_owen( Enable:=Enabl , (* разрешение работы блока *) Addr:= 8, (*адрес прибора*) AddrLen:=A8BIT, (*длина адреса*) Name:= ‘sp’, (*имя параметра, значение которого записываем в ТРМ201*) Index:= 0, (*индекс параметра*) Описание интерфейса библиотек ФБ для работы с протоколом ОВЕН 20 RealType:= FLOAT24, (*тип параметра, значение которого записываем*) Value:=b , (*параметр, значение значение которого записываем в TPM201*) ComHandle:=Settings.Port, (*номер COM-порта*) TimeOut:=TimeOut , (* время тайм-аута [мс] — макс. за-держка на обработку запроса *) Complete=>cmpl , (* скопировать признак готовности результата *) Error=> err); (* скопировать регистр ошибок *) (*если установлен признак завершения операции, то *) IF cmpl THEN master1:=0;(*переходим к выполнению следующего блока*) END_IF END_CASE IF Enabl = FALSE THEN Enabl := TRUE; END_IF IF err <> 0 THEN Enabl := FALSE; END_IF END_IF |