Управление контроллером DSE7320 по modbus

Стартовая страница Форумы Взаимодействие с устройствами Управление контроллером DSE7320 по modbus

Помечено: 

Просмотр 9 сообщений - с 16 по 24 (из 24 всего)
  • Автор
    Записи
  • #28454
    manjey73
    Участник

    byte[] val1Bytes = BitConverter.GetBytes(val1);
    byte[] cmdData = new byte[4] { val1Bytes[1], val1Bytes[0], val1Bytes[0], val1Bytes[1] }

    То есть таким способом

    #28456
    George
    Участник

    Не знаю почему, но с таким вариантом:
    public byte[] PassDSE(ushort val1)
    {
    byte[] val1Bytes = BitConverter.GetBytes(val1);
    byte[] cmdData = new byte[4] { val1Bytes[1], val1Bytes[0], val1Bytes[0], val1Bytes[1] };
    return cmdData;
    }
    выходит в парсере 0A 10 10 08 00 02 04 8B 75 75 8B 46 24,
    Part of Data Package Description Value
    0A Slave address 0x0A (10)
    10 Function code 0x10 (16) — Write Multiple Registers
    10 08 Starting address Physical: 0x1008 (4104)
    Logical: 0x1009 (4105)
    00 02 Quantity 0x0002 (2)
    04 Byte count 0x04 (4)
    8B 75 75 8B Registers value 0x8B75 (35701), 0x758B (30091)
    46 24 CRC 0x4624 (17956)
    т.е. вместо 35701, 29834 возвращает 35701, 30091

    #28458
    George
    Участник

    В общем с вариантом ushort.MaxValue всё работает корректно. С val1= 35702 тоже разобрался, в интерфейсе не тот номер команды ТУ выбрал.

    #28459
    manjey73
    Участник

    Получается что у вас не перестановка байт при отправке команды и именно разница между 65535 и первоначальным числом?

    Просто когда вы давали самый первый пример вроде как была перестановка.

    • Ответ изменён 3 года, 1 месяц назад пользователем manjey73.
    #28461
    manjey73
    Участник

    Да, увидел что от 65535 надо отнимать, так не проще это число и вбить вместо ushort.MaxValue ?

    • Ответ изменён 3 года, 1 месяц назад пользователем manjey73.
    #28463
    George
    Участник

    так не проще это число и вбить вместо ushort.MaxValue ?

    Можно и так.

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

    Возможно, достаточно сменить тип ushort на short.

    #43001
    Arthur Teryoshkin
    Участник

    1. В «Скрипты» добавил функцию:
    // Возвращает значение ‘System control’ для заданного ‘Function code’
    public uint dse_sys_ctrl(uint fun_code) {
    uint res = 35700 + fun_code;
    return res * 65536 + (~res & 0xFFFF);
    }
    2. В шаблоне опроса устройств «DrvModbus_DSE_8610.xml» (у меня DSE 8610) добавил «Команду»:
    Код команды=System control
    Блок данных=Holding…
    Адрес=4104
    Тип элементов=uint (4 байта)
    Количество элементов=1
    3. Создал каналы:
    Наименование 1= ДГУ 1 — Стоп
    Наименование 2= ДГУ 1 — Авто
    Наименование 3= ДГУ 1 — Ручной
    и т.д.
    Тип=Выходной
    Код тега=System control
    Выходная формула 1=dse_sys_ctrl(0)
    Выходная формула 2=dse_sys_ctrl(1)
    Выходная формула 3=dse_sys_ctrl(2)
    4. В «Представлении» добавил «Button 1, 2, 3»; настроил на созданные каналы; Действие=Отправить команду сразу

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

    Спасибо

Просмотр 9 сообщений - с 16 по 24 (из 24 всего)
  • Для ответа в этой теме необходимо авторизоваться.