Вход

Просмотр полной версии : ПЛК160 RS232 SysLibCom



BodDen
10.06.2025, 13:38
Здравствуйте,
Взял библиотеку SysLibCom, подключил ее к RS232 и использую пример
84248

код из примера:


(* Пример выдает в интерфейс RS-485 каждую секунду строку "TEST1"
Настройка порта 9600, 7бит, нет четности, один стоп бит *)
PROGRAM PLC_PRG
VAR
port_opened: BOOL := FALSE;
com_handle: DWORD;
com_num: PORTS:=0;
com_set: COMSETTINGS;
com_setEx: COMSETTINGSEX;
res: BOOL;
tOn1:TON;
start_tmr:BOOL:=FALSE;
tr1:R_TRIG;
snd_str: STRING:='TEST1$N';
port_init: BOOL;
rcvbuf:ARRAY [0..1023] OF BYTE;
sz:DWORD;
END_VAR






(*Открываем порт*)
IF NOT port_opened THEN
com_handle:=SysComOpen(com_num);
IF com_handle<>16#FFFFFFFF THEN
port_init:=TRUE;
ELSE
SysComClose( com_num);
com_handle:=SysComOpen( com_num);
port_init:=TRUE;

END_IF
(*
(*Настраиваем скорость*)
com_set.Port:=com_num;
com_set.dwBaudRate:=115200;
com_set.byParity:=0;
com_set.dwTimeout:=0;
com_set.byStopBits:=0; (* *)
com_set.dwBufferSize:=0;
com_set.dwScan:=0;
res:=SysComSetSettings(com_num,ADR(com_set));
(*Успешно открыли*)
IF NOT res THEN
port_opened:=TRUE;
END_IF

*)
com_setEx.Size:=SIZEOF(com_setEx);
com_setEx.Port:=com_num;
com_setEx.dwBaudRate:=9600;

com_setEx.byStopBits:=0;
(*
byStopBits:BYTE; Кол-во стоповых бит 0 =один, 1=полтора , 2=два
*)
com_setEx.byParity:=0;
(*
byParity:BYTE; Режим проверки четности 0 = нет, 1 = нечет, 2 = чет
*)

com_setEx.dwTimeout:=0;(*
DWORD; Не используется должно быть =0
*)
com_setEx.dwBufferSize:=0;
(*DWORD; Не используется должно быть =0
*)
com_setEx.dwScan:=0;(*DWORD; Не используется должно быть =0
*)

com_setEx.cByteSize :=7;
(* BYTE; Длина символа в битах 5-8 бит.
*)
(*
fOutxCtsFlow : BOOL; Определяет состояние вывода CTS в PLC-100 не распаян

fDtrControl : BYTE; Определяет состояние вывода DTR в PLC-100 не распаян

fDsrSensitivity : BOOL; Определяет чувствительность к состоянию вывода DTR в PLC-
100 не распаян
f RtsControl : BYTE; Определяет состояние вывода RTS в PLC-100 не распаян

fOutxDsrFlow : BOOL; Определяет состояние вывода DSR в PLC-100 не распаян
*)

res:=SysComSetSettingsEx(com_num,ADR(com_setEx));

(*Успешно открыли*)
IF NOT res THEN
port_opened:=TRUE;
END_IF
END_IF

IF NOT port_opened THEN
RETURN;
END_IF

ton1(In:=start_tmr,pt:=t#1s);
start_tmr:=TRUE;
tr1(clk:=ton1.Q);
IF tr1.Q THEN
SysComWrite(com_num,ADR(snd_str),LEN(snd_str),0);
start_tmr:=FALSE;
END_IF

sz:=SysComRead(com_num,ADR(rcvBUF),1024,0);


возвращается открытый порт:

84249
84250

Но в порт ни чего не идет.
84251
Только осваиваю, вопросов много. Помогите пожалуйста, может что то включить еще надо?

kondor3000
10.06.2025, 14:31
Может вам начать с чего попроще, взять какой нибудь модуль и его опросить.
Лучше напишите что вы хотите сделать.
Вы же закоментировали половину программы , настройки сети не выставили и что то хотите добиться ещё, просто жесть.

Sergey361
10.06.2025, 14:59
Дескриптор порта com_handle на картинках равен 0, получается порт не открылся. Номер порта у 232 вроде 1, 0 - это 485. Лучше другой пример взять

BodDen
10.06.2025, 14:59
Может вам начать с чего попроще, взять какой нибудь модуль и его опросить.
Лучше напишите что вы хотите сделать.
Вы же закоментировали половину программы , настройки сети не выставили и что то хотите добиться ещё, просто жесть.

Modbus RTU, я уже делал через конфигуратор. А этот пример с сайта https://owen.ru/product/codesys_v2/libraries - так что я ни чего не комментировал.

kondor3000
10.06.2025, 15:14
Modbus RTU, я уже делал через конфигуратор. А этот пример с сайта https://owen.ru/product/codesys_v2/libraries - так что я ни чего не комментировал.

Ниже примеры
Возьмите
Примеры сетевого обмена / 5 Обмен через библиотеки Modbus и OwenNet, выберите пример с Модбас и читайте комментарии в программе
https://owen.ru/product/codesys_v2/example_program