Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 11 по 20 из 37

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

  1. #11

    По умолчанию

    Честно говоря у меня была похожая проблемма... надо было с датчика температуры считывать показания по RS485.
    Т.е. я отсылаю запрос, от выдает ответ с пакзаниями. Если я подключал датчик через преобразователь АС3 к контроллеру ( датчик - RS 485 - АС3 - RS 232 - контроллер ) то ответ от датчика был правильным, но если напрямую подрубал датчик к контроллеру, в буфере порта появлялись неправильные данные. Так и не разобрался откуда они брались и почему так получалось.
    В связи с чем вопрос такой появляется, вы используетет RS 485 для подключения к контроллеру прибора ?

  2. #12

    По умолчанию стоп

    а между прочим ...
    считываю данные с порта :
    "х:=SysComRead(com_num,ADR(rcvBUF),9,0);"
    но в массиве "rcvBUF" беред, данные не восринимаются, как hex байты, если просто принимать в переменную STRING, то в нём проскакивает действительное звачение, но оно пляшит - как отловить?

  3. #13

    По умолчанию

    Цитата Сообщение от mettled Посмотреть сообщение
    В связи с чем вопрос такой появляется, вы используетет RS 485 для подключения к контроллеру прибора ?
    конечно ...
    попробую через 232- ас3 ...

  4. #14

    По умолчанию

    моя тема по этому вопросу... может чего инетресного вычитаешь
    http://www.owen.ru/forum/showthread....hlight=mettled

  5. #15

    По умолчанию

    Цитата Сообщение от K.I.V. Посмотреть сообщение
    а между прочим ...
    считываю данные с порта :
    "х:=SysComRead(com_num,ADR(rcvBUF),9,0);"
    но в массиве "rcvBUF" беред, данные не восринимаются, как hex байты, если просто принимать в переменную STRING, то в нём проскакивает действительное звачение, но оно пляшит - как отловить?
    А не пробовали UNM.lib

  6. #16

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    А не пробовали UNM.lib
    не пробывал ...

    зы буквы кончаются ...

  7. #17

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    А не пробовали UNM.lib
    пробую ...
    1 - пример, который в описании явно не рабочий ( но это как всегда )
    2 - сейчас делаю приём, постоянно ругается на target ...
    3 - пошел ещё один глюк ... "ругается на аналоговый толь вход, толь выход ... забыл, попадется ещё уточню" - при этом в проекте только уни. циф. порт ....

  8. #18

    По умолчанию

    А проектик можно посмотреть? Таргет и прошивка совпадают (иногда таргет не устанавливается поверх старого, версию можно посмотреть в начале файла hardware.cfg).
    Standart configuration делали?

  9. #19

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    А проектик можно посмотреть? Таргет и прошивка совпадают (иногда таргет не устанавливается поверх старого, версию можно посмотреть в начале файла hardware.cfg).
    Standart configuration делали?

    с таргетом отлегло ... переустановил codesys & пошло поехало ...

    я явно не догоняю с "RBDATA" и ...
    var
    dd: POINTER TO RBDATA;

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

    ...
    при этом
    dd:=<202в57с4>
    всегда

    наивно думал, что в dd сложиться 9 байт, ... но они даже по парядку не хотят там повиться ...


    зы на пк мне горазно проще реализовать приём в скаду,
    ...
    а у вас нет примера ... но не с модемом ?

  10. #20

    По умолчанию

    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.

Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя

Ваши права

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