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

Тема: Modbus String Output Module - передает лишние нули

  1. #1

    По умолчанию Modbus String Output Module - передает лишние нули

    ПЛК110 связывается с устройством через RS-485 по Modbus.
    В устройство необходимо задать три параметра, через функцию 0х10 Modbus (Preset Multiple Registers), причем устройство не поддерживает запись по одному регистру, надо записывать сразу все три одной командой (не спрашивайте почему, так написал программист разработавший устройство), т.е.:
    01 10 00 06 00 03 06 00 01 00 02 00 03 {2 байта CRC}, где:
    01 - адрес устройства
    10 - функция 0х10 Modbus (Preset Multiple Registers)
    00 06 - адрес регистра для записи
    00 03 - количество регистров для записи
    06 - количество байт для записи
    00 01 00 02 00 03 - передаваемые данные

    Для передачи в таком виде пытаюсь использовать String Output Modulу с параметрами
    Command: Preset Multiple Registers 0х10
    Register Address: 6
    Amount byte: 6

    Данные в строку пишу через указатель:

    pt : POINTER TO BYTE;

    pt := ADR(MB_OUT_STRING);
    pt^ := 1;
    pt := pt + 1;
    pt^ := 0;
    pt := pt + 1;
    pt^ := 2;
    pt := pt + 1;
    pt^ := 0;
    pt := pt + 1;
    pt^ := 3;
    pt := pt + 1;
    pt^ := 0;

    В результате ПЛК передает следующее:
    01 10 00 06 00 03 06 00 00 00 00 00 01 {2 байта CRC}
    Т.е. первые два регистра передаются нулевыми значениями.

    Если увеличить параметр Amount byte до 10 (т. е. передается уже не 3, а 5 регистров), то передаются все данные, но первые два регистра все равно нулевые:
    01 10 00 06 00 05 0A 00 00 00 00 00 01 00 02 00 03

    Откуда эти нули : 00 00 00 00 , как от них избавится, что я делаю не так?
    Может есть какой то другой, более правильный способ записи нескольких регистров одной командой, а не через String Output Module ?

  2. #2
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,244

    По умолчанию

    начните от обратного, в конфигураторе задайте какую нибудь строку, а через указатели разберите на сомтавляющие, в тех ли местах рпсположены данные
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  3. #3

    По умолчанию

    А что вы мучаетесь? Я так понимаю тип WORD (2 байта)? Ну и кидайте массивом. http://www.owen.ru/forum/showthread.php?t=22372 Только вместо REAL, WORD делайте и Amount byte 6 соответственно. У меня было как-то нужно записать REAL+WORD+WORD массивом и ничего, так что у вас все получится!

  4. #4

    По умолчанию

    Спасибо Knive87, с записью через массив все работает как надо.

Похожие темы

  1. CoDeSys не передает значения в TRACE MODE 6 по ModBus IP
    от Shef444 в разделе Другие SCADA системы
    Ответов: 12
    Последнее сообщение: 28.09.2014, 12:44
  2. Ответов: 5
    Последнее сообщение: 20.11.2011, 00:58
  3. Ошибка! Module not created Template for module Id=2 or
    от JuLi в разделе ПЛК1хх
    Ответов: 13
    Последнее сообщение: 19.07.2010, 11:10
  4. Register output module State
    от RV9WFJ в разделе ПЛК1хх
    Ответов: 5
    Последнее сообщение: 12.10.2009, 17:38
  5. Ответов: 4
    Последнее сообщение: 25.12.2007, 10:56

Метки этой темы

Ваши права

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