Страница 1 из 7 123 ... ПоследняяПоследняя
Показано с 1 по 10 из 63

Тема: Библиотека UNM, отправка и получение запроса.

  1. #1
    Пользователь
    Регистрация
    12.07.2007
    Адрес
    Воронеж
    Сообщений
    884

    По умолчанию Библиотека UNM, отправка и получение запроса.

    Здравствуйте.
    Все никак не могу разобраться с отправкой и получение посылок в rs485 с помощью библиотеки UNM.

    В мурзилке на прибор написано следующее:
    Есть 4 основные команды:
    I - Десятичный код - 73 - Выдать идентификационный код устройства.
    Т - Десятичный код -84 - Тест на эхо.
    . - Десятичный код - 46 - Выдать ответ по бит маске.
    К - Десятичный код - 75 - Имитация нажатий кнопок.
    В свою очередь команда 46 имеет байт-параметр:
    Бит 0 - Код АЦП
    Бит 1 - Текущее значение брутто
    Бит 2 - Текущее значение нетто
    Бит 3 - Текущее значение тары
    Бит 4 - Ноль
    Бит 5 - Биты состояний
    Бит 6 - Индикация (0-флаг мигания,1-позиция точки,2-состояние веса,3-светодиоды,4-9 - маски семисегментных индикаторов)
    Бит 7 -Статус RS485 (0-битмаска ошибки,1-количество ошибок связи,2-количество принятых пакетов)

    Пример:
    Посылать в прибор нужно:
    SOH <0x21> <0x20> <46> <1> <0xD1> ETX, где
    0х21 - Адрес кому(1)
    0х20 - Адрес от кого(0)
    46 - Адрес команды "ответ по бит-маске"
    1 - маска (только поле "Код АЦП")
    0хD1 - значение CRC

    В свою очередь на это прибор должен ответить:
    SOH <0x20> <0x21> <46> <1> DLE <0> <0x6D> <0x52> <0x11> ETX,где
    До DLE тоже самое что было в запросе,
    DLE <0> - 0xFF - бит маска новостей
    0x6D - Поле Код АЦП , старший бит
    0x52 - Поле Код АЦП , младший бит
    0х11 - CRC.

    Кто-нибудь может подсказать как должна выглядеть правильная посылка?
    Вообще необходимо получать вес из прибора.

  2. #2

    По умолчанию

    1. Что такое SOH,DLE,ETX?
    2. Мурзилку не выложите, многое может стать яснее.

  3. #3
    Пользователь
    Регистрация
    12.07.2007
    Адрес
    Воронеж
    Сообщений
    884

    По умолчанию

    SOH u ETX - Ограничители пакета, тоесть начало и конец пакета
    DLE - служит для возможности передачи зарегистрированные символы как данные.

    Вобщем часть мурзилки я написал выше. А полная версия вот:
    Последний раз редактировалось приборист; 04.01.2010 в 13:45.

  4. #4

    По умолчанию

    Любят же извращаться...
    Значит так.
    В строке с CoDeSys забиваете нужные значения через $xx, где xx - требуемый 16-ти ричный код спецсимвола. И отправляете эту строку в порт. Приём - читаете побайтно и скрадываете в буфер в соотв. с байтами - ограничителями пакета.

  5. #5
    Пользователь
    Регистрация
    12.07.2007
    Адрес
    Воронеж
    Сообщений
    884

    По умолчанию

    Владислав, так я так понимаю команда будет выглядеть так:

    SetByte(0,'$2e',1); (*Отправляем в прибор код . *)
    GetByte(0);(*Получаем от прибора ответ*)

    Так?

  6. #6

  7. #7
    Пользователь
    Регистрация
    12.07.2007
    Адрес
    Воронеж
    Сообщений
    884

    По умолчанию

    Я сделал так :
    var

    a:dword;
    b:POINTER TO rbdATA;
    end_var;


    LockDevice(0);
    a:=SetByte(0,'$2E',1);
    b:=GetByte(0);

    В итоге
    a=1 и иногда перескакивает в значение a=4294967295
    b=<00000000>.

    В чем поблема и почему ничего не показывает я понять не могу((

  8. #8

    По умолчанию

    SetByte - возвращает число переданных символов, если возвращает -1, то это значит вы слишком много символов положили в буффер - он переполнился. Послали запрос - дождитесь ответа или разумного таймаута 50-150 мс. И только после этого новый запрос
    GetByte - возвращает указатель на след. символ.
    Если символа нет - то указатель нулевой, если есть - отличный от нуля, его надо разименовать и получить доступ к данным и флагам. Разименовывание через ^

  9. #9
    Пользователь
    Регистрация
    12.07.2007
    Адрес
    Воронеж
    Сообщений
    884

    По умолчанию

    Ну в общих чертах оно вроде понятно, но все такие непонимаю почему он нехочет отвечать.
    Сейчас пробую так:
    P:POINTER TO RBDATA;

    IF
    SetByte(0,'$2E',1)=1 THEN
    P:=GetByte(0);
    ELSE
    error:=1;
    end_if;

    И запускаю пошагово. Получается что байт 2E он передает в прибор, а в ответ Нули.

    По идее то при отправке единичного запроса он должен хоть чтото ответить.

    И еще не дают мне покоя эти SOH, ETX,DLE. Почему мы отбрасываем их? Может быть прибор просто непонимает пустые 2Е?

  10. #10

    По умолчанию

    Судя по мурзилке SOH, ETX,DLE - это символы , к-е надо тоже передавать.
    Учитывая мурзилку Вам надо добавить SOH, 2 адреса, команду 2Е+1 байт данных, CRC и ETX, итого 7байт.

Страница 1 из 7 123 ... ПоследняяПоследняя

Ваши права

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