Показано с 1 по 10 из 37

Тема: Нестандартный протокол

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #18

    По умолчанию

    RBDATA - структура из 2-х байт, в первом - принятый символ, во втором - флаги.

    В приведённом коде:

    IF n1_out THEN LockDevice(0);
    SetByte(0, Line, LEN); ...
    dd:=GetByte(0);
    END_IF

    dd - это указатель, его надо разименовать.

    data:byte;

    data:=dd^.data;
    Переменной "data" присваивается значение принятого символа. Далее его можно складывать в массив, анализировать и пр.

    Расшифровка флагов:

    /* //Осталось со времен динозавров
    typedef struct {
    unsigned char parity_error: 1;
    unsigned char frame_error: 1;
    unsigned char overrun: 1;
    unsigned char noktime: 1;
    unsigned char new_frame: 1;
    unsigned char end_frame: 1;
    unsigned char temp_el_full: 1;
    unsigned char reserved1: 1;
    } RBOPTIONS;*/

    Интересуют первые 3 бита - это ошибки приёма
    и бит end_frame - признак конца пачки по стандарту RTU (пауза более 3,5 символов)
    Если поднят noktime - пауза между символами >1.5 и <3.5 символов - возможно устройство не успевает складывать байты запроса/ответа в свой передающий буффер, особенно этим грешат древние/самопальные приборы и Windows. Обрабатывать ли этот флаг -решать Вам.

    /* Определение типа данных, хранящихся в кольцевом буфере приема/передачи */
    typedef struct {
    unsigned char data;
    unsigned char flags;
    }RBDATA;
    Последний раз редактировалось Филоненко Владислав; 27.02.2008 в 19:10.

Ваши права

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