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

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

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

    По умолчанию

    Кстати, вот есть программка теста связи с прибором. Отсылает и принимает пакеты. Тоесть я ввожу свои данные, что надо получить от прибора, тоесть запрос, она составляет такую строку:

    FF 21 20 2E D0 03

    Я отправляю эту строку в прибор, получаю от него ответ:

    если на весах 0 кг:
    +FF 20 21 2E D0 10 00 00 02 00 05 00 D9 10 00 10 00 10 00 10 00 40 C0 00 00 29 88 03
    если на весах 5 кг:
    +FF 20 21 2E D0 10 00 00 02 00 05 00 D5 10 00 10 00 10 00 10 00 12 C0 00 00 2A D5 03

    В свою очередь в Кодесис пишу как запрос:

    SetByte(0,'$ff$20$21$2E$D0$03',6)

    И от прибора ничего не получаю
    Последний раз редактировалось приборист; 04.01.2010 в 13:45.

  2. #12

    По умолчанию

    А почему
    SetByte(0,'$ff$20$21$2E$D0$03',6)
    а не
    SetByte(0,'$ff$21$20$2E$D0$03',6) ????

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

    По умолчанию

    Простите, моя ошибка.

    Поставил
    SetByte(0,'$ff$21$20$2E$D0$03',6);

    ЗАпускаю пошаговое выполнение, получается иногда при выполнении выскакивает
    P=<202daa90>.
    Обычно появляется, при следуещем прохождении пропадае в <00000000>, и где то на 2-4 прохождении опять появляется.
    Это значение неизменяется при изменении веса.

  4. #14

    По умолчанию

    Давайте попробуем так
    sndTON:TON;
    rcvTON:TON;

    sndTON(in:=not sndTON.q,pt:=t#500ms);
    if sndTON.q then
    SetByte....
    rcvTON(in:=true,pt:=t#100ms);
    end_if
    rcvTON(pt:=t#100ms);
    if rcvTON.q then
    p:=GetByte(0)
    s:=RBDATA_TO_STRING(p);
    ...
    rcvTON(in:=false);

    end_if
    Таймауты поменяйте под себя

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

    По умолчанию

    Цитата Сообщение от Малышев Олег Посмотреть сообщение
    Давайте попробуем так
    sndTON:TON;
    rcvTON:TON;

    sndTON(in:=not sndTON.q,pt:=t#500ms);
    if sndTON.q then
    SetByte....
    rcvTON(in:=true,pt:=t#100ms);
    end_if
    rcvTON(pt:=t#100ms);
    if rcvTON.q then
    p:=GetByte(0)
    s:=RBDATA_TO_STRING(p);
    ...
    rcvTON(in:=false);

    end_if
    Таймауты поменяйте под себя
    Попробовал, компилятор ругнулся на S, я заменил его на свою c:string;

    Итак при запуске программы он опять через раз выводит
    P=<202daa90>
    и
    с='$01', иногда '@' иногда '$05'

    Меняешь вес - показания остаются прежними.

  6. #16

    По умолчанию

    Так надо складывать символы, тогда и всё будет правильно.
    GetByte возвращает 1 символ.
    Складываете в буфер, ищите начало и конец пачки, проверяете CRC, если всё сошлось - анализируете содержимое.
    Иначе никак.

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

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    Так надо складывать символы, тогда и всё будет правильно.
    GetByte возвращает 1 символ.
    Складываете в буфер, ищите начало и конец пачки, проверяете CRC, если всё сошлось - анализируете содержимое.
    Иначе никак.
    А можно поподробнее как это надо делать??
    Складываете в буфер я так пнимаю просто писать все символы в отельную строку начиная с первого символа.
    Как искать начало и конец пачки? И как проверить CRC?

  8. #18

    По умолчанию

    с:=RBDATA_TO_STRING(p);
    all_str:=Concat(all_str,c);
    получится строка, а как работать со строкой см описание CoDeSys

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

    По умолчанию

    all_str='`x$01$07$01$01p$01@$01$01}$01$07@$07$02@@ $02$01$01$01'
    И такую муть выводит бесконечно))))

    какой либо зависимости я не смог определить, иногда появляются квадратики, иногда буквы, я так понимаю - все это мусор?

    А можно как нибудь сделать чтобы запрос посылался один раз, а потом улавливать только ответы?
    А то вот эти запросы-ответы постоянные путают ужасно(
    Как можно определить начало и конец посылки? И как определять CRC?

    И еще - Байт-параметр запроса, который мне нужен, тоесть вес БРУТТО или НЕТТО идет как тип Integer. Это на чтото влияет?

  10. #20

    По умолчанию

    Нельзя, весы не знают когда передавать можно. Только в режиме мастер-slave.
    Определить начало/конец можно по символам начала и конца. Из мурзилки.

    Interger - значит целое число.

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

Ваши права

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