-
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.
Ваши права
- Вы не можете создавать новые темы
- Вы не можете отвечать в темах
- Вы не можете прикреплять вложения
- Вы не можете редактировать свои сообщения
-
Правила форума