Показано с 1 по 9 из 9

Тема: библиотека Unm и нулевые символы

  1. #1

    По умолчанию библиотека Unm и нулевые символы

    Подскажите будет ли работать такой скрипт с библиотекой UNM и структурой RBDATE, чтоб вместо принятия строки принимать байты, тем самым обойти нулевые символы в строке:
    <
    VAR
    LockDevise: RBDATA;
    RB_0: BYTE; (*Принятые байты *)

    RB_8: BYTE;
    i2:INT;
    END _VАR
    ….
    (*побайтно а не в строку*)
    CASE i2 OF
    0:
    dat:=GetByte(DeviceNumber :=id_dev);
    RB_0:=LockDevise.data;
    i2:=1;
    1:
    dat:=GetByte(DeviceNumber :=id_dev);
    RB_1:=LockDevise.data;
    i2:=2;


    8:
    dat:=GetByte(DeviceNumber :=id_dev);
    RB_8:=LockDevise.data;
    i2:=0
    END_CASE
    ……
    >
    Вместо принятия строки:
    <
    FOR i:=1 TO 9 DO
    dat:=GetByte(DeviceNumber :=id_dev);
    rcv_str:=CONCAT(rcv_str,RBDATA_TO_STRING(dat));
    END_FOR
    >
    Или ‘date’ в структуре ‘RBDATE’ не являеться байтом принятой посылки?

  2. #2

    По умолчанию

    Не работает такой скрипт. Просто 'date’ постоянно равно нулю. Очевидно 'date’ в структуре ‘RBDATE’ не являеться байтом принятой посылки.
    Похоже библиотека Unm не подоходит. С передачей проблем нет передаются и нулевые символы, а вот прочитать входную посылку ни как не удается.
    С одной стороны библиотека Unm дает возможность использовать нестандартные протоколы, а с другой - через невозможность считать нулевые символы все сводится на нет.

  3. #3

    По умолчанию

    да все там возможно.
    Последний раз редактировалось Николаев Андрей; 23.02.2010 в 14:09.

  4. #4

    По умолчанию

    владислав, подскажите, что я не так делаю.

  5. #5

    По умолчанию

    посмотрите пример
    Последний раз редактировалось vojt; 10.01.2011 в 22:07.

  6. #6

    По умолчанию

    только через Rs-232 удается добиться стабильного приема посылки, но нужно учитывать, что если в посылке будут нулевые символы 16#00, они в буфер не записываются а просто пропускаются. в некоторых темах пользователи подключались через ас-3м <плк-232-ас-3м-485-прибор>
    в том случае если у внешнего прибора не было Rs-232 .
    все-таки у Rs-485 в режиме приема где-то есть косяк.

  7. #7

    По умолчанию

    Нулевые символы записываются и обрабатываются.
    Но самими CoDeSys не отображаются и стираются строковыми функциями.

    На диске ПЛК есть пример, на форуме примеров море. Но каждый не читает документацию и строем идет по граблям. Поиск по сайту рулит!

  8. #8

    По умолчанию

    Спасибо Владислав, действительно похожая тема уже была на форуме:
    http://www.owen.ru/forum/showthread.php?t=1193&page=2
    RBDATA - структура из 2-х байт, в первом - принятый символ, во втором - флаги.

    В приведённом коде:

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

    dd - это указатель, его надо разименовать.

    data:byte;

    data:=dd^.data;
    Переменной "data" присваивается значение принятого символа. Далее его можно складывать в массив, анализировать и пр.
    Что-то более-мене прояснилось со структурой RBDATA. Но при запуске в режиме эмуляции в онлайн на "data:=dd^.data;" выдает ошибку
    "Доступ по не существующему адресу. ПЛК остановлен". Почему?
    Неужели работает только в ПЛК. Просто сейчас нет возможности попробовать на ПЛК.

  9. #9

    По умолчанию

    Действительно "data:=dd^.data;" работает только в ПЛК. В режиме эмуляции выдает ошибку. В остальном все нормально читается по Rs-232. По Rs-485 читается, но проскакивают ошибки, точнее смещение байт принимаемой посылки. Считаю тему закрытой. Спасибо за помощь.

Ваши права

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