Нужно срочно соеденить свое устройство по сети, прочитал все про modbus rtu, нашел свободную библиотеку, понял как настроить протокол, но не нашел как отправить свой массив байт на запрос мастера. Делаю первый раз такие вещи. Если у кого есть опыт оставьте емаил, сильно доставать не буду.
Массив байт можно считывать через очереди или через файлы (команды Modbus 0x18 и 0x14). Ни то, ни другое freemodbus не умеет. Вижу два решения:
1. Дописать поверх библиотеки расширение для FIFO.
2. Передавать массив через функцию "Read Input Registers (0x04)"
Какой предполагается размер массива и известен ли он в момент запроса?
Вообще надо передать структуру, могу поля переписать в масив, либо привести к указателю и длину посчитать через sizeof. Я не могу понять где мне узнать что пришел запрос на отправку данных? Где вызывать функцию отправки
Посмотрите, как реализованы готовые функции отправки. Например:
/modbus/functions/mbfuncinput.c: eMBFuncReadInputRegister()
Ей передаются указатель на RTU-фрейм запроса и его длина. Ф-ция парсит фрейм, находит указатель на запрошенные регистры, их количество, и проверяет все это на корректность. Затем дёргает функцию
/demo/$PLATFORM/demo.c: eMBRegInputCB()
которая пишет во фрейм ответа данные из запрошенных регисторв.
Колбэки на функции-обработчики хранятся в
/modbus/mb.c: xFuncHandlers[]
Вам надо по аналогии написать свой обработчик, который будет определять, какие именно данные запрошены, и упаковывать структуру в фрейм.