![image](https://habrastorage.org/webt/mj/u0/6w/mju06wdtrkkmlqtotvikzdatilq.png)
Ранее на Хабре была опубликована статья «ModBus Slave RTU/ASCII без смс и регистрации», посвященная реализации ModBus Slave RTU/ASCII устройств. В комментариях к статье было высказано множество замечаний, в том числе и несколько весьма дельных. В данной публикации приведена новая версия ModBus Slave RTU/ASCII с учетом этих замечаний.
Новые версии файлов:
modbus.c
modbus.h
ModBus2Prg.c
Настоечные константы полностью аналогичны предыдущей версии. Основные отличии от предыдущей версии:
- Добавлен расчет CRC по таблице. Включается опцией ModBusUseTableCRC. Расчет CRC таблице не только более эффективен по скорости, но и гораздо компактнее по размеру, при условии использовании высокой оптимизации компилятора по скорости. При оптимизации компилятора по размеру, целесообразней не использовать табличный метод.
- Введена обработка логических ошибок протокола Modbus. Включается опцией ModBusUseErrMes. Поддерживаются сообщения об ошибках ILLEGAL_FUNCTION, ILLEGAL_DATA_ADDRESS, ILLEGAL_DATA_VALUE, согласно спецификации протокола V1.1b3.
- Добавлена функция протокола 22-запись регистра по маске. Включается опцией ModBusUseFunc22. Многие Modbus Master устройства опционально поддерживают эту функцию, ее использование позволяет оптимизировать трафик при использовании регистров чтения/записи (4Х) как битовых переменных.
- Проведена оптимизация кода, исключены дублирующие действия, уменьшено использование статических переменных и т.п.
- Исправлены ошибки в комментариях.
Мои коллеги, зная что я занимаюсь разработкой промышленных датчиков, просят меня поделится исходными кодами Modbus интерфейса. Я решил «делится кодом» в автоматическом режиме. Надеюсь данная библиотека будет полезна инженерам разрабатывающим ModBus устройства.