Нестандартные команды MODBUS

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

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

    Вообще написать драйвер для отправки любого набора байт не проблема.
    Но что делать с ответами на команды?
    Проверка crc, какого-то ответа от прибора?

    #32028
    manjey73
    Участник

    Все нормально с crc, это просто в тексте косяк, согласно примеров все правильно.

    #32029
    JurasskPark
    Участник

    Вообще написать драйвер для отправки любого набора байт не проблема.

    Эх… А еще от критичности проекта зависит. А потом в суд за то, что атомная станция бабахнула. 🙁

    01

    #32030
    manjey73
    Участник

    Драйвер для отправки любого набора байт в сом порт могу сделать, это не проблема.
    Проблема в получении ответа.
    Если посылку можно сделать универсальной, то вот разбор вряд ли, так как у разных устройств он разный.

    Ну либо как Михаил написал, чисто мини драйвер для конкретной задачи и только делать.

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

    С помощью драйвер DrvTester можно отправить любой набор байт. Затем считать ответ, не разбирая его. Из описания драйвера:

    Команды ТУ:
    1, SendStr - отправить строку;
    2, SendBin - отправить бинарные данные.
    

    Вам нужна команда SendBin. Добавьте устройство типа DrvTester стандартным образом и попробуйте отправить команду через Администратор. Если не заработает, отправляйте журнал линии связи и скриншоты.

    #32054
    manjey73
    Участник

    Ох ты. А считать ответ в строку (массив каналов) DrvTester может?
    Тогда уже что бы не прилетело, можно ведь и скриптами разложить на байты и обработать ответ, любой, уже средствами scada и скриптов.

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

    На данный момент считанная строка только отображается. Идея поместить данные в каналы хотя бы в бинарном виде хорошая.

    #32097
    sergey_narva
    Участник

    Михаил, спасибо. Через администратор все работает.

    #32098
    sergey_narva
    Участник

    https://ibb.co/72Wx3TZ

    • Этот ответ был изменен 8 месяцев назад от sergey_narva.
    • Этот ответ был изменен 8 месяцев назад от sergey_narva.
    #32101
    sergey_narva
    Участник

    Воспользовался подсказкой, спасибо jurasskpark, попробовал реализовать через DrvModbus. Через администратор отправил через команду данные
    80 11
    получил следующее

    https://ibb.co/ft80cQw

    #32124
    manjey73
    Участник

    @sergey_narva в первом случае вы забыли про контрольную сумму судя по всему
    CRC-16 (Modbus) 0x0000 так точно.

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

    Самое интересное, как оказалось, конкретно для PZEM004T V3.0 совершенно без разницы какие данные предаются в 0x42. По любому происходит обнуление регистра подсчета энергии. В ответ получаем пакет полностью совпадающий с переданным. Если смотреть по документации, принятый пакет, с большой долей вероятности, не совпадет с переданным только в случае неисправности «железа» (микросхемы).
    Т.е.

    пакет 0x01 0x42 0x80 0x11
    ответ 0x01 0x42 0x80 0x11
    приводит к обнулению регистра подсчета энергии (это пакет без данных — адрес устройства, функциональный код, CRC), также как и пакеты с данными:

    пакет 0x01 0x42 0x00 0x00 0xA1 0xCC
    ответ 0x01 0x42 0x00 0x00 0xA1 0xCC

    пакет 0x01 0x42 0x80 0x11 0x00 0x00
    ответ 0x01 0x42 0x80 0x11 0x00 0x00

    ну и так далее.

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