Illegal data value

Просмотр 13 сообщений - с 1 по 13 (из 13 всего)
  • Автор
    Сообщения
  • #20499
    manjey73
    Участник

    Там случайно при обновлении системы и драйверов к ней не напортачили случайно ?

    Не предается команда по Modbus с указанной ошибкой…

    Отправка (17): 01 10 02 0D 00 02 08 66 66 42 28 00 00 00 00 53 D4

    Приём (5/5): 01 90 03 0C 01
    Ошибка устройства: [03] ILLEGAL DATA VALUE!

    Part of Data Package	Description	Value
    01	Slave address	0x01 (1)
    10	Function code	0x10 (16) - Write Multiple Registers
    02 0D	Starting address	Physical: 0x020D (525)
    Logical: 0x020E (526)
    00 02	Quantity	0x0002 (2)
    08	Byte count	0x08 (8)
    66 66 42 28 00 00 00 00	Registers value	0x6666 (26214), 0x4228 (16936), 0x0000 (0), 0x0000 (0)
    53 D4	CRC	0x53D4 (21460)

    Каким боком вдруг Float стал 8 байт ? Byte Count ???

    В настройках шаблона команда множественная Holding Register
    Тип Float 4 байта
    В настройках стоит порядок байт 2301 и в самой переменной оставлял поле пустым и ставил 2301 разницы нет, почему не перставилось, даже если в основных настройках 2301 ???

    #20503
    Mikhail
    Модератор

    Может Вы случайно включили драйвер Enron Modbus? Там как раз другой размер элементов.

    #20505
    manjey73
    Участник

    Не трогал вообще ничего, пока на Raspberry стояла версия 5.8.2 все работало.
    После обновления даже не проверял, что там и как. Менял переменную с принимающего сервера через Gate, увидел отсутствие реакции, полез менять через Web Raspberry и оп-па…

    #20506
    manjey73
    Участник

    Не вижу через Администратор, где бы там был Enron Modbus совсем. Все, как было, так и стоит.

    #20510
    manjey73
    Участник

    Где скачать KpModbus.dll именно от 5.8.2 версии ?

    На ноутбуке стояла предыдущая версия, скинул dll из нее и теперь работает.
    Что-то у вас собралось неверно или ошибка в DLL…

    • Этот ответ был изменен 2 месяца, 2 недели назад от manjey73.
    #20534
    manjey73
    Участник

    Михаил, есть какое-то понимание с ошибкой передачи данных float в последней версии библиотеки Modbus ?

    #20544
    Mikhail
    Модератор

    Были изменения в драйвере, которые могли привести к ошибке. Сделайте, пожалуйста, скриншоты настроек команды в шаблоне Модбас.

    #20545
    manjey73
    Участник
    <?xml version="1.0" encoding="utf-8"?>
    <DevTemplate>
      <Settings>
        <ZeroAddr>true</ZeroAddr>
        <DecAddr>true</DecAddr>
        <DefByteOrder2 />
        <DefByteOrder4>2301</DefByteOrder4>
        <DefByteOrder8 />
      </Settings>
      <ElemGroups>
        <ElemGroup active="true" tableType="HoldingRegisters" address="512" name="">
          <Elem name="Code_Error" type="ushort" byteOrder="" />
          <Elem name="Time_UTC" type="uint" byteOrder="0123" />
          <Elem name="T_Gvs" type="float" byteOrder="" />
          <Elem name="Uroven_Litr" type="float" byteOrder="" />
          <Elem name="T_Out" type="float" byteOrder="" />
          <Elem name="T_Heat" type="float" byteOrder="" />
          <Elem name="T_Cool" type="float" byteOrder="" />
          <Elem name="waterHys" type="float" byteOrder="" />
          <Elem name="wterDelta" type="float" byteOrder="" />
          <Elem name="TH_onnM" type="short" byteOrder="" />
          <Elem name="TContrl" type="short" byteOrder="" />
          <Elem name="TctrlSave" type="float" byteOrder="" />
        </ElemGroup>
      </ElemGroups>
      <Cmds>
        <Cmd tableType="HoldingRegisters" multiple="true" address="525" elemType="float" elemCnt="2" byteOrder="" cmdNum="8" name="waterHyst" />
        <Cmd tableType="HoldingRegisters" multiple="true" address="527" elemType="float" elemCnt="2" byteOrder="" cmdNum="9" name="waterDelta" />
        <Cmd tableType="HoldingRegisters" multiple="false" address="529" byteOrder="" cmdNum="10" name="TH_onnM" />
      </Cmds>
    </DevTemplate>

    Так не проще? новый драйвер принимает файл, при этом при сохранении ничего не меняет. ByteOrder выставлен в настройках для всех 4 байтных. (добавлял и непосредственно в команду, безрезультатно).
    Драйвер отправляет 8 байт вместо 4-х.
    Драйвер от 5.8.2 отправляет 4-е байта как и положено.
    То есть я просто подкинул KpModbus.dll от предыдущей версии и все, ничего в настройках не менял, команды заработали.

    #20555
    Mikhail
    Модератор

    Спасибо за информацию. Проверю и напишу в этот тикет в течение нескольких недель.

    #20612
    Mikhail
    Модератор

    Ссылка на обновление KpModbus.
    Пакеты команд формируются корректно. Но поведение может отличаться от предыдущей версии для команд с типом данных 4 байта и более.

    Рассмотрим команду:

    View post on imgur.com

    Указан тип float 4 байта и 2 элемента. Текущая реализация подразумевают, что будут отправлены 4 * 2 = 8 байт.
    Элемент — это логическая сущность произвольной длины.
    Тогда как регистр всегда имеет длину 2 байта.

    • Этот ответ был изменен 2 месяца назад от Mikhail.
    #20614
    manjey73
    Участник

    Так теперь оперировать надо сущностями?
    То есть если указываем float, и он у нас один, то количество элементов = 1 ?
    И просто понимая, что этот элемент из 4-х байт, обязаны установить параметр Множественная команда?

    Не приведет ли это к еще большей путанице ?

    #20615
    manjey73
    Участник

    Работает со старыми настройками.

    #20617
    Mikhail
    Модератор

    Путаницы должно быть меньше, т.к. в запросе можно создать 1 элемент с типом float, который будет состоять из 4 байт. Команда ему соответствует.

Просмотр 13 сообщений - с 1 по 13 (из 13 всего)
  • Вы должны авторизироваться для ответа в этой теме.