STM32 на основе Modbus RTU из исходного кода MODE MDK Исходный код MDK

Вес товара: ~0.7 кг. Указан усредненный вес, который может отличаться от фактического. Не включен в цену, оплачивается при получении.
Описание товара
- Информация о товаре
- Фотографии
Этот код включает в себя две части исходного кода:
(1)Код 1Это оригинальный код от друга, который реализует все функциональные коды MODBUS SLAVE и может использоваться для связи с главным экраном, ПЛК и роботом.
(2) Код 2 — это извлеченная часть проекта (ЦП — STM32F103R8T6), в основном пересаженная.Основанный на коде ведомого устройства freemodbus Modbus_RTU, этот код относится к зарубежному коду freemodbus и переносится в STM32. Все функциональные коды реализованы и имеются богатые китайские комментарии.
Примечание:Эти два кода написаны не мной, поэтому техническую поддержку оказать не могу. Они подходят для пользователей, имеющих базовые знания программирования и знакомых с MODBUS. Заинтересованные друзья могут сфотографировать для изучения и трансплантации. Если вы не знакомы с MODBUS, вы можете обратиться к моему оригинальному примеру кода MODBUS Slave (реализована только функция чтения 0x03 и записи 0x06):http://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-4698294976.74.crufbl&id=37305199317
После проведения экспериментов изучите и пересадите эти два кода. Эти два кода реализуют все функциональные коды и могут взаимодействовать с часто используемыми хостами MODBUS, такими как ЖК-экраны (такие как Weiluntong, Kunlun, Xinjie Screen), ПЛК и роботы. Затем измените и напишите свое интерфейсное приложение, а затем приложение можно будет пересадить в свой проект.
Скриншот программы:

Ниже приводится подробное введение в MODBUS:
Протокол ModBus определяет структуру сообщений, которую контроллер может понимать и использовать независимо от того, через какую сеть они общаются. Он формулирует общий формат поля и содержимого сообщения, описывает процесс запроса контроллером доступа к другим устройствам, ответа на запросы от других устройств, а также способы обнаружения и записи информации об ошибках.
Посредством этого протокола информация и данные могут обмениваться и передаваться между контроллерами, контроллерами через сети (например, Ethernet) и другими устройствами, так что программируемые контроллеры последовательности (ПЛК), RTU, системы SCADA, РСУ или сторонние устройства, совместимые с протоколом ModBus от различных компаний и производителей, могут быть подключены для формирования промышленных сетей для построения различных сложных систем мониторинга и облегчения обслуживания и расширения системы.Этот протокол связи широко используется в энергетической отрасли и промышленности промышленного управления в стране и за рубежом в качестве общего промышленного стандартного протокола для системной интеграции.
По протоколу MODBUS-RTU существует множество документации и справочных кодов, но не существует справочного примера, который действительно можно было бы использовать при обмене данными с продуктом.Поскольку MODBUS-RTU имеет хорошую практичность и низкую стоимость внедрения, он особенно часто используется в промышленной связи, приборах и контрольно-измерительном оборудовании.
В приборах, счетчиках и датчиках, если используется протокол Modbus RTU, он обычно используется в качестве ведомой станции.Основное оборудование станции обычно реализуется в виде ПЛК, ПК, HMI, платы PCI и т. д. Разработка подчиненного оборудования Modbus RTU очень проста, обычно это уровень интерфейса RS485.
Как ведомая станция MODBUS-RTU, она указана в некоторых спецификациях и стандартах.Временной интервал 3,5 символаВ качестве условия принятия сообщения. Это значительно снижает количество ложных ответов от ведомой станции.
Код 2Он извлекается из прошлых зрелых продуктов и добавляется с дополнительными аннотациями для облегчения понимания.Код использует 3,5 символа в качестве условия получения решения.Когда ведущая станция отправляет кадр команды чтения и записи, ведомая станция определяет временной интервал, превышающий или равный 3,5 символам, в качестве условия приема решения.Если скорость передачи данных разная, время 3,5 символов оценивается соответствующим образом.
Код 2:Часть драйвера RS485 может использоваться для чипа RS485 управления самопередачей и приемом. Микросхема RS485, которую также можно использовать для приемопередатчика управления GPIO..
Последовательный порт UART использует методы прерывания приема и отправки для повышения скорости отклика. Предоставленный исходный код программного обеспечения упакован в виде файлов проекта, и вы можете скомпилировать и использовать его напрямую. В настоящее время предоставляются два языковых кода MCU C. Функция кода STM32F103R8T6 поддерживает функциональные коды:
Функциональный код
Определение
Операция (бинарная)
0x02
Чтение входного сигнала переключателя
Считайте один или несколько входных данных о состоянии переключателя.
0x01
Чтение коммутационного выхода
Чтение одного или нескольких данных о состоянии коммутационного выхода.
0x03
0x04
Чтение данных регистра
Чтение данных из одного или нескольких регистров
0x05
0X0F
Записать выход переключателя
Напишите несколько переключателей
Управление одним реле“”
0x06
Запись одноканального регистра
Записать набор двоичных данных в один регистр
0x10
Напишите многоканальный регистр
Запись нескольких наборов двоичных данных в несколько регистров
Этот код создан на основе зарубежного открытого исходного кода, пересажен и оптимизирован на его основе и используется в многофункциональных измерителях мощности, устройствах защиты двигателей и трехфазных измерителях тока и напряжения проекта. Он стабилен и надежен. При передаче и приеме используется режим прерывания, который обеспечивает лучшую производительность в реальном времени.
При его использовании вам нужно только изменить определение макроса и глобальные переменные. Как определено ниже, измените его до нужной вам длины и функции.
/*----------------------------------------------------------------
имя:   катушка
Идентификатор места хранения: 0XXXX
Тип: бит
Чтение и запись:  
Адрес хранилища: (00001~0XXXX).XXXX: относится к устройству.
Код функции: Чтение состояния катушки (0x01), запись одной катушки (0x05), запись нескольких катушек (0x0F)
использовать: реле DO
//-----------------------------------------------------------------*/
#define REG_COILS_START 0x0001
#define REG_COILS_SIZE 16
static unsigned char
/*----------------------------------------------------------------
имя: Входная катушка
Идентификатор места хранения: 1XXXX
Тип: бит
Чтение и запись: только чтение
Адрес хранилища: (10001~1XXXX).XXXX: относится к устройству.
Код функции: Чтение статуса входа (0x02)
использовать: DI-реле
//-----------------------------------------------------------------*/
/* --------------------------------------------------- --------------------------------------------------- --------------------------------------------------- ------------------*/
#define REG_DISC_START 0x0001
#define REG_DISC_SIZE 16
static
/*----------------------------------------------------------------
имя: Входной регистр
Идентификатор места хранения: 3XXXX
Тип: слова
Чтение и запись: только чтение
Адрес хранилища: (30001~3XXXX).XXXX: относится к устройству.
Код функции: Чтение входного регистра (0x04)
использовать:   аналоговый вход
//-----------------------------------------------------------------*/
#define REG_INPUT_START 0x0001
#define REG_INPUT_NREGS 10
static USHORT usRegInputStart = REG_INPUT_START;
static USHORT usRegInputBuf[REG_INPUT_NREGS]=
{0x0011, 0x0022, 0x0033, 0x0044,055, 0x0066,077, 0x0088, 0x0099, 0x00aa};
/*----------------------------------------------------------------
имя: Регистр хранения/вывода
Идентификатор места хранения: 4XXXX
Тип: слова
Чтение и запись:  
Адрес хранилища: (40001~4XXXX).XXXX: относится к устройству.
Код функции: Чтение регистра временного хранения (0x03), запись одного регистра (0x06), запись нескольких регистров (0x10)
использовать:   аналоговый выход
//-----------------------------------------------------------------*/
#define REG_HOLDING_START 0x0001 //Удержание начального адреса регистра
#define REG_HOLDING_NREGS 10 //Количество регистров хранения
static USHORT
static USHORT
Достаточно
Изменить определение нужно только во время инициализации. Следующим образом:
Embinit (mb_rtu, 0x01, 1, 38400, mb_par_none);
//функция modbus: режим RTU, номер таблицы 1, последовательный порт 1, 38400, без проверки
