Доброго времени суток, возникает следующая проблема при попытке открыть порт COM, COM_SERVICE1.ready постоянно возвращает FALSE, код программы следующий(практически такой же, как и из примера):
PROGRAM PLC_PRG
VAR
GetTemp: MB_RD_HOLD_REGS;
Buffer: ARRAY[0..255] OF BYTE; (* байтовый буфер данных *)
port_opened: BYTE := 0;
cmpl: BOOL;
Init: BOOL; (* признак инициализации пользовательской программы *)
Settings: ModBus.SysCom.COM_Settings;(* настройки последовательного порта *)
SettingsEx: ModBus.SysCom.COM_SettingsEx;
com_num: ModBus.COM_Ports:=1;
enabl: BOOL:=1; (*состояние работы блока*)
err: INT; (*номер ошибки*)
TimeOut: TIME:=T#500ms;(*таймаут*)
Exception: BYTE;
DataSize: WORD;
master1: BYTE:= 1;
t: DWORD; (*переменная для организации счетчика*)
A: WORD := 0; (*счетчик*)
x: WORD; (*считанное значение*)
x1: WORD; (*переменная для записи по сети*)
x2: WORD; (*переменная для записи по сети*)
x3: WORD; (*переменная для записи по сети*)
d: REAL; (*считанное значение*)
ptr_D:POINTER TO BYTE;
COM_SERVICE1: COM_SERVICE;
//Res : ModBus.SysCom.RTS_IEC_RESULT;
END_VAR
(*Устанавливаем настройки COM-порта*)
IF port_opened=0 THEN
Settings.sPort:=com_num;
Settings.ulBaudRate:=19200;
Settings.byParity:=0;
Settings.ulTimeOut:=0;
Settings.byStopBits:=3;
Settings.ulBufferSize:=0;
//SettingsEx.byByteSize:=8;
//SettingsEx.bBinary:=TRUE;
END_IF
COM_SERVICE1(Enable:=(port_opened=0) , Settings:=Settings,(*sets_ex:=Setting*****) Task:=OPEN_TSK);
(*Если COM-порт открыт, то переходим к приему и передачи данных *)
IF COM_SERVICE1.ready THEN
port_opened:=2;
//ELSE
//COM_SERVICE1.Enable:=FALSE;
END_IF
IF port_opened=2 THEN
GetTemp(
Enable:=enabl , (* разрешение работы блока *)
Mode:=MB_RTU , (*режим передачи*)
DevAddr:=1 , (*адрес*)
FirstAddr:=1 , (*номер регистра*)
Quantity:=1, (*количество регистров*)
ComHandle:=Settings.sPort , (*номер COM-порта*)
TimeOut:=TimeOut , (*Таймаут T#500ms*)
Buffer:=Buffer , (* буфер данных *)
Complete=>cmpl , (* скопировать признак завершения операции *)
Exception=>err , (* скопировать регистр ошибок *)
ByteCnt=>DataSize ); (*кол-во считанных байтов *)
END_IF;