Здравствуйте!
Решил попробовать эту библиотеку для организации сетевого обмена. Модули у меня МДВВ.
Подключил два модуля - читать их получается, а вот записать в регистры нет.
Блок MB_WR_REGS выдает ошибку 3:
Безымянный.png
Мой код:
Раздел описания:
код:Код:FUNCTION_BLOCK Comm VAR_INPUT END_VAR VAR_OUTPUT END_VAR VAR ModbusAdrDi11,ModbusAdrDi12: MB_RD_HOLD_REGS; ModbusAdrDo11,ModbusAdrDo12:MB_WR_REGS; BufferIN: ARRAY[0..255] OF BYTE; BufferOUT: ARRAY[0..255] OF BYTE; cmpl: BOOL; port_opened: BYTE := 0; Init: BOOL; Settings:COMSETTINGS; com_num: PORTS:=0; enabl: BOOL; Error, ErrorDI11,ErrorDO11,ErrorDI12,ErrorDO12: INT; TimeOut: TIME:=T#100ms; Exception: BYTE; DataSize: WORD; master1: BYTE:= 1; WordAdr11,WordAdr12:WORD; COM_SERVICE1: COM_SERVICE; END_VAR
Что я делаю неправильно, и как записать байт в регистр мдвв??Код:IF port_opened=0 THEN Settings.Port:=com_num; Settings.dwBaudRate:=115200; Settings.byParity:=0; Settings.dwTimeout:=0; Settings.byStopBits:=0; Settings.dwBufferSize:=0; Settings.dwScan:=0; END_IF COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings , Task:=OPEN_TSK ); IF COM_SERVICE1.ready THEN port_opened:=2; END_IF IF port_opened=2 THEN CASE master1 OF 0: ModbusAdrDi11( Enable:=enabl , Mode:=MB_RTU , DevAddr:=11 , FirstAddr:=51 , Quantity:=1, ComHandle:=Settings.Port , TimeOut:=TimeOut , Buffer:=BufferIN , Complete=>cmpl , Exception=>ErrorDI11 , ByteCnt=>DataSize ); IF cmpl THEN IF ErrorDI11=0 THEN WordAdr11:=BYTE_TO_WORD(BUFFERIN[1]) OR SHL(BYTE_TO_WORD(BUFFERIN[0]),8); END_IF master1:=1; END_IF 1: ModbusAdrDi12( Enable:=enabl , Mode:=MB_RTU , DevAddr:=12 , FirstAddr:=51 , Quantity:=1, ComHandle:=Settings.Port , TimeOut:=TimeOut , Buffer:=BufferIN , Complete=>cmpl , Exception=>ErrorDI12 , ByteCnt=>DataSize ); IF cmpl THEN IF ErrorDI12=0 THEN WordAdr12:=BYTE_TO_WORD(BUFFERIN[1]) OR SHL(BYTE_TO_WORD(BUFFERIN[0]),8); END_IF master1:=2; END_IF 2: ModbusAdrDO11( Enable:= enabl, Mode:= MB_RTU, DevAddr:= 11, FirstAddr:= 50, Quantity:= 1, ComHandle:= Settings.Port, TimeOut:= TimeOut, Buffer:= BufferOUT, Complete=> cmpl, Exception=> ErrorDO11, RegCnt=> DataSize); IF cmpl THEN master1:=0; END_IF END_CASE IF enabl = FALSE THEN enabl := TRUE; END_IF(* IF ErrorDI11<> 0 OR ErrorDI12<> 0 OR ErrorDO11<> 0 OR ErrorDO12<> 0 THEN enabl := FALSE; END_IF *) END_IF
Объясните пожалуйста зачем в блоке MB_WR_REGS вход buffer имеет тип данных ARRAY[0..255] OF BYTE;


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