Страница 3 из 7 ПерваяПервая 12345 ... ПоследняяПоследняя
Показано с 21 по 30 из 63

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

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

    По умолчанию

    Филоненко Владислав
    А куда запихивать всякие @,{,',x,p?

    Я знаю что Integer это целое число, почему в книженции написано что байт
    Текущее НЕТТО - передается типом Integer

    А например
    Биты состояния передаются типом Byte
    Код АЦП передается типом word.

    На что это влияет?

  2. #22

    По умолчанию

    Найдите в строке где конкретно передается вес. Из байтов в 2-х и 4-х Можно преобразовать с помощью функций byte_TO_WORD,byte_TO_DWROD, shr,shl

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

    По умолчанию

    Итак, в очередной раз мучая прибор дошел до такого этапа:

    Подключил прибор напрямую к компу по rs232.
    Параллельно прибор связан с контроллером по Rs 485.
    Запускаю программу которую я выкладывал выше, где можно состовлять пакеты на компьютере и отправлять в прибор получая ответ.

    Выяснил, что при отправке такого запроса:
    FF 21 20 2E 32 E2 03
    Я получаю ответ с нужным весом:
    +FF 20 21 2E 32 10 00 00 2E 00 10 FC 04 00 00 00 34 03

    2E - в данном ответе и есть вес в 16ричном виде без точки. Тоесть вес на весах 4.6 кг.

    FF Это у нас SOH, ибо в мурзилке SOH - 255=> ff
    FC это у нас ETX,(Получается 255-3)

    Что после FC - я не знаю)


    Итак, в Кодесисе я составляю запрос :
    SetByte(0,'$ff$21$20$2E$32$e2$03',7);

    И замечаю странную особенность:
    При запуске программы в контроллере, программа проверки test485l начинает сама отвечать на этот запрос)
    Тоесть начинают отображаться нужный вес.
    Получается что запрос правильный и прибор на него отвечат.

    Теперь самое интересное, программа отправлять то отправляет запрос, а вот командой GetByte получается одну ересь вида
    'яяяяяяяя$01яяяяяяяяя$01p'

    Почему программа виндовыми способами нормально может получить данные на запрос, а я в кодесисе немогу?((

  4. #24

    По умолчанию

    1. FC 04 00 00 00 34 03 Очень напоминает ModBus - пачку, ничего лишнего не подключали?
    2. В UNM правильно настроены частота и число битов посылки? Очень похоже, что частота в UNM сильно завышена.
    3. 485 не мешает приёму - он точно в режим приёма переводится?

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

    По умолчанию

    1. Даже при подключении только лишь ВЕСОВ к компьютеру - выводится эта строчка.
    Тоесть отключая контроллер вообще, проверяя свзяь с ВЕСАМИ через rs232 + PC я получаю такой ответ.
    2. Вроде все правильно
    9600
    No parity
    8 bits
    One stop bit
    RS485
    ASCII
    0
    No
    3. Получается что у могу отправить через контроллер запрос по rs485 в ВЕСЫ, а получить на компьютере но уже по rs232. Осталось получить по rs485 обратно в контроллер.

  6. #26

    По умолчанию

    Выложите проектик, может очепятка где?

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

    По умолчанию

    PLC 100 R.M.
    Target-файлы 2.05
    Binary VERSION 2.02.8
    Последний раз редактировалось приборист; 04.01.2010 в 13:45.

  8. #28

    По умолчанию

    1. LockDevice(0); надо делать 1 раз, а не каждый цикл ПЛК.
    2. А вот считывать ответ - как можно чаще, а не раз в 10 мс. А то посылаете раз в 30 мс, читаете по 1 символу раз в 10 мс. Что тут можно получить с порта?
    3.
    Процедура считывания должна происходить до исчерпания символов в буфере или до нахождения ликв. пачки
    p:=GetByte(0);
    while (p<>0) do

    p:=GetByte(0);
    Вот тут должна быть проверка на наличие символа
    IF p<>0 then
    c:=RBDATA_TO_STRING(p);
    А вот тут должна находится машина состояний для поиска символа начала, складывания символов в буфер до прихода символа конца или
    превышения размера буфера, а после проверка CRC и только потом считывание значения (на забываем проверить код команды, вдруг не та команда!)


    all_str:=CONCAT(all_str,c);
    END_IF
    END_WHILE

    Надеюсь поможет

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

    По умолчанию

    1. LockDevice убрал, он пока что ненужен. Подхватывает и так пока один.
    2. Поставил отсылку раз 50 мс, прием раз в 3 мс.
    3. Сделал так как описали. Пока не делал машину для поиска символов, так как не знаю что искать)) ДУмаю надо расшифровать данные приходящие из прибора - тогда и будем клепать поисковик)

    Итак, кажется что-то уже получается, ибо ответы приходят стандартизированные, и строка повторяется.

    При весе 0 кг:
    all_str='!.2$10$10ь$1C$02$03!.2$10$10ь$1C$02$03!.2 $10'....Ну и далее также.
    Я так понимаю
    !.2$10$10ь$1C$02$03 - и есть сам ответ

    При весе 4.6 кг:
    all_str='!.2$10.$10ь$044$03!.2$10.$10ь$044$03!.2$1 0.$10ь'.....

    !.2$10.$10ь$044$03 - это ответ.

    При весе 9.6 кг:
    all_str='!.2$10'$10ь$04z$03!.2$10'$10ь$04z$03!.2$1 0'$10ь'.......

    !.2$10'$10ь$04z$03 - это ответ.

    А теперь непонятное мне:
    Что за мягкий знак всегда выскакивает? $10ь
    Какой таблицой пользоваться для рассшифровки всего этого?

  10. #30

    По умолчанию

    Просто анализируйте код в 16-ти ричной форме. И вместо string используте Array of BYTE - сразу всё станет понятно.

Страница 3 из 7 ПерваяПервая 12345 ... ПоследняяПоследняя

Ваши права

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