PDA

Просмотр полной версии : Опять 25



Dinf
12.08.2011, 11:38
Здравствуйте, Уважаемые гуру!

Я начинающий программист ПЛК ОВЕН, первый проект.

Прочитал все инструкции по подключению МВ к ПЛК. Посмотрел видео, но что-то все равно не получается.

Проект на ST. Codesys v3.4 patch2 без HF1. (Недоступно для скачивания на Вашем сайте)
Подключены библиотеки: ModBus, ComSerice, SysLibCom.
Описание переменных:


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;
END_VAR

Тело программы:


IF port_opened=0 THEN
Settings.sPort:=0;
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:=16,
FirstAddr:=51,
Quantity:=1,
ComHandle:=Settings.sPort,
TimeOut:=TimeOut,
Buffer:=Buffer,
Complete=>cmpl,
Exception=>err,
ByteCnt=>DataSize);
IF cmpl THEN
IF err=0 THEN
x:=BYTE_TO_WORD(BUFFER[1]) OR SHL(BYTE_TO_WORD(BUFFER[0]),8);
END_IF
END_IF
IF enabl=FALSE THEN
enabl:=TRUE;
END_IF
IF err<>0 THEN
enabl:=FALSE;
END_IF
END_IF


Загружаю, запускаю и COm_SERVICE1.READY всегда FALSE.
Немогу понять почему? Подскажите пожалуйста.
Заранее благодарен!

Dinf
12.08.2011, 11:47
Думаю только из-за этой проблемы и не опрашивает. Остальное должно быть ОК.
Может быть не ту функцию использую для открытия порта?
Прилагаю картинку с выполнением кода.

Малышев Олег
12.08.2011, 14:14
исправьте
Settings.sPort:=0;
на
Settings.sPort:=1;