Все что нужно почитамши. И еще почитаю. Широко шагаешь товаришь, штаны не порви.
Все что нужно почитамши. И еще почитаю. Широко шагаешь товаришь, штаны не порви.
Добрый день.
Пытаюсь связаться с МК210-302 по Modbus TCP.
Честно, никогда раньше не имел дела ни с Modbus ни с OWEN.
Отправляю на сокет с указанным в конфигураторе IP такой пакет
#pragma pack(push, 1)
struct data_t {
uint16_t transaction_n;
uint16_t protocol_id;
uint16_t packet_size;
uint8_t slave_id;
uint8_t func_id;
uint16_t registry_n;
uint16_t registers_count;
uint8_t value_size;
uint8_t value;
};
#pragma pack(pop)
data_t data;
data.transaction_n = 0;
data.protocol_id = 0;
data.packet_size = 8;
data.slave_id = 1;
data.func_id = 16;
data.registry_n = 470;
data.registers_count = 1;
data.value_size = 1;
data.value = 8;
нужные значения дискретных выходов не устанавливаются.
правильный ли я пакет отправляю?
всё, получилось, прошу прощение за беспокойство
НО. Появился другой вопрос. Чтобы стабильно установить эти данные, приходится посылать одно и тоже 2 раза.
Это явно нехорошо. Что я делаю неправильно может нужна какая-то инициализация?
вернее наоборот, опытном путем выяснил, что НЕ проходит именно последняя команда. Причем дело явно не в клиенте (мастере), поскольку если отправить эту же структуру в конце, забитую 0-ми, то ничего не поменяется, сервер его просто не обработает, как и последнюю значащую команду.
Поставьте себе например Owen OPC Server, это пара минут, он может читать и записывать по Модбас или TCP, например ваш модуль.
В логах опроса видно всё, запросы мастера, ответы модуля слейва, посмотрите как это работает.
https://owen.ru/catalog/opc_serveri