1

Пример записи переменных по Modbus для CoDeSys 3

Пример на языке ST реализует работу по интерфейсу RS-485: запись параметров типа Int (функция Modbus 06 — MB_WR_SNG_REG) и записи параметра типа Float (функция Modbus 16 — MB_WR_REGS). Для работы примера в PLC Configuration должны быть подключены библиотеки SisLibCom, Modbus, ComService.

PROGRAM PLC_PRG

VAR

send1_modbus:MB_WR_SNG_REG; (*функция 06 — запись параметра*)

send2_modbus: MB_WR_REGS; (*функция 16 — запись параметров*)

COM_SERVICE1: COM_SERVICE; (*ФБ открытия порта*)

Buffer: ARRAY[0..255] OF BYTE; (* байтовый буфер данных *)

cmpl: BOOL; (* признак завершения операции *)

port_opened: BYTE := 0; (*состояние порта*)

Init: BOOL; (* признак инициализации пользовательской программы *)

Settings:COMSETTINGS; (* настройки последовательного порта *)

com_num: PORTS:=1; (*0 — RS-485, 1 — RS-232*)

enabl: BOOL; (*состояние работы блока*)

err: INT; (*номер ошибки*)

TimeOut: TIME:=T#50ms; (*таймаут*)

Exception: BYTE;

DataSize: WORD;

master1: BYTE;

t: DWORD; (*переменная для организации счетчика*)

A: WORD := 0; (*счетчик*)

f1:DINT:=65; (*Записываемый параметр типа DINT*)

f2:REAL:=12.7; (*Записываемый параметр типа REAL*)

ptr_f2:POINTER TO BYTE;

END_VAR

(*Организуем счетчик, что бы передавать эти данные по сети*)

t:=t+1;

IF (t MOD 1000)=0 THEN

A := A + 1;

IF A > 9999 THEN

A := 0;

END_IF

(*Устанавливаем настройки COM-порта*)

IF port_opened=0 THEN

Settings.Port:=com_num; (*номер COM-порта*) Описание интерфейса библиотеки ФБ для работы с протоколом Modbus

Settings.dwBaudRate:=115200; (*скорость*)

Settings.byParity:=0;

Settings.dwTimeout:=0;

Settings.byStopBits:=0;

Settings.dwBufferSize:=0;

Settings.dwScan:=0;

END_IF

(*Открываем COM-порт*)

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

0: (* функция 06 — запись параметра типа Int в прибор с адресом 1 в регистр 0*)

send1_modbus(

Enable:=enabl , (* разрешение работы блока *)

Mode:=MB_ASCII , (*режим передачи*)

DevAddr:=1 , (*адрес*)

RegAddr:=0 , (*регистр*)

Value:=A, (*значение переменной, которое надо передать*)

ComHandle:= Settings.Port, (*номер сом-порта*)

TimeOut:=TimeOut , (*таймаут T#50ms*)

Complete=>cmpl , (* скопировать признак завершения операции *)

Exception=>err ); (* скопировать регистр ошибок *)

(*если установлен признак завершения операции, то *)

IF cmpl THEN

master1:=1; (*переходим к выполнению следующего блока*)

END_IF

1: (* функция 16 — запись параметров типа Int (регистр 4) и Real (регистр 6) в прибор с адресом 2 *)

(*запись в буффер параметра типа INT*)

Buffer[1] := DINT_TO_BYTE(f1);

Buffer[0] := DINT_TO_BYTE( SHR(f1,8));

Buffer[3] := DINT_TO_BYTE( SHR(f1,16));

Buffer[2] := DINT_TO_BYTE( SHR(f1,24));

(*запись в буффер параметра типа Float*)

ptr_f2:=ADR(f2);

buffer[5] := ptr_f2^;

ptr_f2:=ptr_f2+1;

21 Описание интерфейса библиотеки ФБ для работы с протоколом Modbus 22

buffer[4] := ptr_f2^;

ptr_f2:=ptr_f2+1;

buffer[7] := ptr_f2^;

ptr_f2:=ptr_f2+1;

buffer[6] := ptr_f2^;

send2_modbus(

Enable:= enabl, (* разрешение работы блока *)

Mode:=MB_ASCII , (*режим передачи*)

DevAddr:=2 , (*адрес*)

FirstAddr:= 4, (*номер регистра*)

Quantity:= 4, (*количество записываемых регистров*)

ComHandle:=Settings.Port ,(*номер сом-порта*)

TimeOut:=TimeOut , (*таймаут T#50ms*)

Buffer:=Buffer , (* буфер данных *)

Complete=>cmpl , (* скопировать признак завершения операции *)

Exception=>err , (* скопировать регистр ошибок *)

RegCnt=> DataSize); (*кол-во считанных байтов *)

(*если установлен признак завершения операции, то *)

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

Раздел: CDS3 Метки: ,

1 комметарий к "Пример записи переменных по Modbus для CoDeSys 3"

  1. Владимир:

    Очень хороший пример, дающий большую пользу. Единственный момент: ГДЕ можно скачать библиотеку CоmService.library для CodeSys 3.0 и выше?

Оставить комментарий

Отправить сообщение

CoDeSys GSM/GPRS модем Lectus OPC MasterSCADA Modbus MX110 Omron OPC-сервер owen owen logic PLC Configuration PROFIBUS s-200 SCADA scada системы siemens siemens plc SIMATIC Simplight SMS step7 TRACE MODE Динамизация ИП-320 МЭК 1131–3 ОВЕН ОВЕН ПЛК ОВЕН ПЧВ ПЛК ПЛК ОВЕН ПР 110 Панель оператора Программируемое реле Частотный преобразователь библиотека в CoDeSys визуализация диспетчеризация конфигурация панели программирование ПЛК серия NS сименс плк частотник частотное управление язык CFC язык ST
.