Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 11

Тема: Библиотека UNM

  1. #1
    Пользователь
    Регистрация
    18.03.2007
    Адрес
    г. Краснодар
    Сообщений
    233

    Question Библиотека UNM

    Подскажите как передавать и принимать двоичные данные.

    Пример.
    Передать 1 2 9 0 0 3 ('$01$02$09$00$00$03')
    Принять 2 1 9 0 0 3 ('$02$01$09$00$00$03')
    и тд.

    UNM передает и принимает только строку. Если в середине двоичных данных ноль, то строка заканчивается.

    Как в строку вставить двочное число.
    Пример
    str:string := '$01$02$09$00$00$03';
    dat:byte := 10;
    надо получить '$01$02$09$00$00$03'+10 = '$01$02$09$00$00$03$0A'

  2. #2
    незарегистрированный
    Гость

    По умолчанию

    Примерно так
    aointer to array [0...2000] of byte;
    x:string(255);
    a:=ADR(X);
    a[4]:=0;

  3. #3

    По умолчанию

    1. SetByte принимает номер устройства, указатель на массив байт (в его качестве может выступать и строка и число байт, к-е необходимо передать.
    UNM передает и принимает только строку. Если в середине двоичных данных ноль, то строка заканчивается. Не UNM обрывает передачу, а функции копирования строк=> не не надо их использовать, воспользуйтесь методом в предыдущем сообщении
    Тролль-наседка, добрый, нежный и ласковый

  4. #4

    По умолчанию

    Подскажите пожалуйста на простом примере как при помощи б.UNM и
    указателей передать строку имеющую нули в том числе. SetByte всегда
    просит STRING.

  5. #5
    незарегистрированный
    Гость

    По умолчанию

    Цитата Сообщение от Anis Посмотреть сообщение
    Подскажите пожалуйста на простом примере как при помощи б.UNM и
    указателей передать строку имеющую нули в том числе. SetByte всегда
    просит STRING.
    Где-то так
    a: array [0..255] of byte;
    pointer to string;
    p:=adr(a);
    len:dword:=255;
    SetByte(p,len);

  6. #6

    По умолчанию

    Спасибо, попробуем.

  7. #7

    По умолчанию up'ну тему

    Добрый день.

    дабы не плодить однотипные темы, подниму эту.
    никак не получается реализовать обмен данными с помощью библиотеки UNM.
    пока пытаюсь элементарно отправить некое сообщение (любое) в порт Rs-485 и принять его на ПК (в качестве преобразователя rs-485 в rs-323 icp con i-7520).
    итак, сам код:
    Код:
    FUNCTION_BLOCK unmPort1
    VAR_INPUT
    	disable: BOOL;
    END_VAR
    VAR_OUTPUT
    END_VAR
    VAR
    	res: DWORD;
    	res1:INT;
    	res2: DWORD;
    	sended: BOOL := FALSE;
    END_VAR
    
    IF NOT disable AND NOT sended THEN
    	res:=LockDevice(0);
    	res1:=DWORD_TO_INT(SetByte(0, 'hello', 5));
    	sended:=TRUE;
    	res2:=ReleaseDevice(0);
    END_IF;
    //флаг sended для того, чтобы код выполнился лишь один раз, а то на форуме были упоминания о возможном переполнении буфера.

    в конфигурации ПЛК добавлен universal network module, интерфейс rs-485, режим ascii.

    в res и res2 при выполнении записывается единица, т.е. захват и освобождение порта происходят успешно.
    а вот в res1 -1, и, соответственно, мое приветствие ПК не отсылается =( а ведь так хочется с ним поздороваться.

    вариант с указателями тоже не получился. еще на этапе компиляции ругань о несоответствии типа и последующий облом.

  8. #8
    Пользователь
    Регистрация
    10.01.2007
    Адрес
    Красноярск
    Сообщений
    138

    По умолчанию

    Может подождать немного с ReleaseDevice(0) или вообще не использовать.
    Никогда не использовал Release, раз захватил и работай пока контроллер не выключат.

  9. #9

    По умолчанию

    нашел сегодня время продолжить воевать (ну или пытаться подружиться) с плк150 и UNM.
    залил в него последнюю стабильную версию прошивки (соответствующий таргет установил).
    теперь в порт уходят нули. лучше чем ничего, но хуже, чем хотелось бы.
    в res1 записывается количество отправленных байт (соответствует реальности).

    что с ReleaseDevice, что без - результат не меняется.

  10. #10

    По умолчанию

    если б я перекрестил контроллер, то сказал бы "вот что крест животворящий делает". а так буду думать, какого лешего пошел обмен. все в порядке. самопроизвольно.

Страница 1 из 2 12 ПоследняяПоследняя

Ваши права

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