CSharp
17.03.2014, 10:42
PROGRAM PLC_PRG
VAR
get1_modbus: MB_RD_HOLD_REGS;
t: DWORD;
a: WORD:=0;
port_opened: BYTE:=0;
Settings: COMSERICE.SysCom.COM_Settings;
SettingsEx: COMSERICE.SysCom.COM_SettingsEx;
Com_service1:Com_service;
master1: BYTE:=1;
enabl: BOOL;
TimeOut: TIME:=T#50ms;
Buffer: ARRAY [0..255] of byte;
Complete: BOOL;
err: INT;
Exception: INT;
ByteCnt: WORD;
cmpl: BOOL;
x: WORD;
DataSize: BYTE;
TempWateOutMB: REAL;
ptr_D: POINTER TO BYTE;
END_VAR
IF port_opened=0 THEN
Settings.sPort:=1;
Settings.ulBaudRate:=115200;
Settings.byParity:=0;
Settings.ulTimeOut:=0;
Settings.byStopBits:=0;
Settings.ulBufferSize:=0;
SettingsEx.byByteSize:=8;
SettingsEx.bBinary:=TRUE;
COM_SERVICE1(Enable:=(port_opened=0), Settings:=Settings, (*sets_ex:=Setting*****) Task:=OPEN_TSK);
END_IF
IF COM_SERVICE1.ready THEN
port_opened:=2;
END_IF
IF port_opened=2 THEN
get1_modbus(
Enable:=enabl,
Mode:=MB_RTU,
DevAddr:=1,
FirstAddr:=4,
Quantity:=2,
ComHandle:=Settings.sPort,
TimeOut:=TimeOut,
Buffer:=Buffer,
Complete=>cmpl,
Exception=>err,
ByteCnt=>DataSize);
IF cmpl THEN
IF err=0 THEN
ptr_D:=ADR(TempWateOutMB);
ptr_D^:=buffer[3];
ptr_D:=ptr_D+1;
ptr_D^:=buffer[2];
ptr_D:=ptr_D+1;
ptr_D^:=buffer[1];
ptr_D:=ptr_D+1;
ptr_D^:=buffer[0];
END_IF
END_IF
IF enabl=FALSE THEN
enabl:=TRUE;
END_IF
IF err<>0 THEN
enabl:=FALSE;
END_IF
END_IF
ПЛК 304, всегда ошибка 255 и светодиод не мигает на обмене.
VAR
get1_modbus: MB_RD_HOLD_REGS;
t: DWORD;
a: WORD:=0;
port_opened: BYTE:=0;
Settings: COMSERICE.SysCom.COM_Settings;
SettingsEx: COMSERICE.SysCom.COM_SettingsEx;
Com_service1:Com_service;
master1: BYTE:=1;
enabl: BOOL;
TimeOut: TIME:=T#50ms;
Buffer: ARRAY [0..255] of byte;
Complete: BOOL;
err: INT;
Exception: INT;
ByteCnt: WORD;
cmpl: BOOL;
x: WORD;
DataSize: BYTE;
TempWateOutMB: REAL;
ptr_D: POINTER TO BYTE;
END_VAR
IF port_opened=0 THEN
Settings.sPort:=1;
Settings.ulBaudRate:=115200;
Settings.byParity:=0;
Settings.ulTimeOut:=0;
Settings.byStopBits:=0;
Settings.ulBufferSize:=0;
SettingsEx.byByteSize:=8;
SettingsEx.bBinary:=TRUE;
COM_SERVICE1(Enable:=(port_opened=0), Settings:=Settings, (*sets_ex:=Setting*****) Task:=OPEN_TSK);
END_IF
IF COM_SERVICE1.ready THEN
port_opened:=2;
END_IF
IF port_opened=2 THEN
get1_modbus(
Enable:=enabl,
Mode:=MB_RTU,
DevAddr:=1,
FirstAddr:=4,
Quantity:=2,
ComHandle:=Settings.sPort,
TimeOut:=TimeOut,
Buffer:=Buffer,
Complete=>cmpl,
Exception=>err,
ByteCnt=>DataSize);
IF cmpl THEN
IF err=0 THEN
ptr_D:=ADR(TempWateOutMB);
ptr_D^:=buffer[3];
ptr_D:=ptr_D+1;
ptr_D^:=buffer[2];
ptr_D:=ptr_D+1;
ptr_D^:=buffer[1];
ptr_D:=ptr_D+1;
ptr_D^:=buffer[0];
END_IF
END_IF
IF enabl=FALSE THEN
enabl:=TRUE;
END_IF
IF err<>0 THEN
enabl:=FALSE;
END_IF
END_IF
ПЛК 304, всегда ошибка 255 и светодиод не мигает на обмене.