Показано с 1 по 2 из 2

Тема: нужна помощь. чтение из Rs-232 порта

  1. #1

    Red face нужна помощь. чтение из Rs-232 порта

    Всем здравствуйте.
    Пытался написать программку связи ПЛК 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

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

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

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

  2. #2

    По умолчанию

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

    Ниже следубщий код выполняется всегда, а надо выполнять например раз в 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 (*новая стока*)
    Автоматизация Диспетчеризация Сервис
    e-mail: ads-kaluga@mail.ru

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •