PDA

Просмотр полной версии : нужна помощь. чтение из Rs-232 порта



DMel
15.01.2010, 15:16
Всем здравствуйте.
Пытался написать программку связи ПЛК 100 с компьютером по примеру программы посылки SMS.
Посылка данных компьютеру замечательно происходит, а вот чтение никак. Вроде все просто должно быть, не пойму в чем дело. Вот код:

VAR
com_num:PORTS:=COM1;
com_handle: DWORD;
com_set: COMSETTINGS;
res:BOOL;
sz: DWORD;
rcvBUF: ARRAY [0..1023] OF BYTE;
str: STRING:='PLK 100 Ready!$R';
port_opened:BOOL := FALSE;
In1 AT %IX0.0.0:BOOL;
Out1 AT %QX1.0: BOOL := FALSE;
CanSend:BOOL := TRUE;
END_VAR

IF NOT port_opened THEN
com_handle:=SysComOpen(com_num);
IF com_handle=16#FFFFFFFF THEN
SysComClose( com_num );
com_handle:=SysComOpen( com_num );
END_IF

com_set.Port:=com_num;
com_set.dwBaudRate:=9600;
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));

port_opened := TRUE;

END_IF

IF CanSend AND In1 THEN
CanSend := FALSE;
SysComWrite( com_num, ADR( str ), LEN( str ), 0 );
Out1 := FALSE;
END_IF

IF NOT In1 AND NOT CanSend THEN
CanSend := TRUE;
Out1 := TRUE;
END_IF

IF port_opened THEN
sz := SysComRead( com_num, ADR( rcvBUF ), 10, 0 );
IF sz <> 0 THEN
Out2 := NOT Out2;
END_IF
END_IF

При замыкании первого входа происходит посылка строки на ком порт и замыкается первый выход

А при чтении хоть чего-то из порта должен замыкаться и размыкаться второй выход, но ничего не происходит :(

В чем может быть проблема?

Gans
21.01.2010, 09:28
Наверное в любом случае необходимо развязать все события по времени.

Ниже следубщий код выполняется всегда, а надо выполнять например раз в 100 мс.

if Ton1.q then (*новая строка*)
IF port_opened THEN
sz := SysComRead( com_num, ADR( rcvBUF ), 10, 0 );
IF sz <> 0 THEN
Out2 := NOT Out2; (*Вот это одназначно приведет к дребезгу контактов используй <ТР>*)
END_IF
END_IF
end_if (*новая стока*)