Modbus 0.3
Библиотека Modbus для STM
Loading...
Searching...
No Matches
modbus.h
Go to the documentation of this file.
1/**
2*******************************************************************************
3* @file modbus.h
4* @brief Главный заголовочный файл Modbus библиотеки
5*******************************************************************************
6@addtogroup MODBUS Modbus tools
7@brief Библиотека реализующая протокол Modbus
8*******************************************************************************
9@addtogroup MODBUS_FUNCTIONS Main API for Modbus Library
10@ingroup MODBUS
11@brief Публичные функции библиотеки
12@{
13*******************************************************************************
14* @details
15Объединяющий файл для подключения всей функциональности Modbus.
16Подключает все необходимые модули:
17
18
19@section Start Инструкция по подключению
20Для корректной работы надо:
21- Подключить обработчики RS_UART_Handler(), RS_TIM_Handler(), в соответствубщие
22 низкоуровневые прерывания UART_IRQHandler, TIM_IRQHandler вместо HAL'овского обработчика
23
24- В modbus_config.h настроить дефайны для нужной работы UART
25
26- Инициализировать хендл мобдас. По умолчанию глобально создается hmodbus1
27- После для запуска Modbus:
28 @code
29 //----------------Слейв модбас----------------//
30 #include "modbus.h"
31
32 MODBUS_FirstInit(&hmodbus1, &huart1, &htim3);
33 MODBUS_Config(&hmodbus1, MODBUS_DEVICE_ID, MODBUS_TIMEOUT, MODBUS_MODE_SLAVE);
34 MODBUS_SlaveStart(&hmodbus1, NULL);
35 @endcode
36 @code
37 //----------------Мастер модбас----------------//
38 #include "modbus.h"
39
40 MODBUS_FirstInit(&hmodbus1, &huart1, &htim3);
41 MODBUS_Config(&hmodbus1, 0, MODBUS_TIMEOUT, MODBUS_MODE_MASTER);
42 // Запрос на 1 ID, считать холдинг регистры с 0 адреса 10 штук
43 RS_MsgTypeDef msg = MB_REQUEST_READ_HOLDING_REGS(1, 0, 10);
44 MODBUS_MasterRequest(&hmodbus1, &msg, &callback_func);
45
46 void callback_func(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg)
47 {
48 // MB_RespGet_... Чтобы достать нужные данные из ответа
49 if(hmodbus->RS_STATUS == RS_OK)
50 {
51 for(int addr = MODBUS_MSG.Addr; addr < MODBUS_MSG.Addr + MODBUS_MSG.Qnt; addr++)
52 {
53 uint16_t value;
54 if(MB_RespGet_RegisterValue(&MODBUS_MSG, addr, &value))
55 {
56 read_hold[i] = value;
57 }
58 }
59 }
60 }
61 @endcode
62
63
64@section modules Подключаемые модули:
65- rs_message.h - работа с uart
66- modbus_core.h - базовые определения
67- modbus_coils.h - работа с дискретными выходами
68- modbus_holdregs.h - работа с регистрами хранения
69- modbus_inputregs.h - работа с входными регистрами
70- modbus_devid.h - идентификация устройства
71- modbus_diag.h - диагностика modbus
72
73
74@section data Структура данных Modbus
75
76#### Holding/Input Registers:
77- Регистры — 16-битные слова. Доступ к регистрам осуществляется через указатель.
78Таким образом, сами регистры могут представлять собой как массив так и структуру.
79
80#### Coils:
81- Coils — это биты, упакованные в 16-битные слова. Доступ к коилам осуществляется через указатель.
82Таким образом, сами коилы могут представлять собой как массив так и структуру.
83
84******************************************************************************/
85#ifndef __MODBUS_H_
86#define __MODBUS_H_
87
88#include "rs_message.h"
89#ifdef MODBUS_ENABLE_MASTER
90#include "modbus_master.h"
91#endif
92#ifdef MODBUS_ENABLE_SLAVE
93#include "modbus_slave.h"
94#endif
95#ifdef MODBUS_ENABLE_COILS
96#include "modbus_coils.h"
97#endif
98#ifdef MODBUS_ENABLE_HOLDINGS
99#include "modbus_holdregs.h"
100#endif
101#ifdef MODBUS_ENABLE_INPUTS
102#include "modbus_inputregs.h"
103#endif
104#ifdef MODBUS_ENABLE_DEVICE_IDENTIFICATIONS
105#include "modbus_devid.h"
106#endif
107#ifdef MODBUS_ENABLE_DIAGNOSTICS
108#include "modbus_diag.h"
109#endif
110
111
112#ifdef MODBUS_ENABLE_MASTER
113#define MODBUS_MODE_MASTER 1 ///< Псевдо-enum: Режим мастер
114#endif
115
116#ifdef MODBUS_ENABLE_SLAVE
117#define MODBUS_MODE_SLAVE 0 ///< Псевдо-enum: Режим слейв
118#endif
119
120/////////////////////////////////////////////////////////////////////
121/////////////////////////---FUNCTIONS---/////////////////////////////
122
123
124//----------------FUNCTIONS FOR USER----------------
125
126/* Инициализация периферии модбас. */
127HAL_StatusTypeDef MODBUS_FirstInit(RS_HandleTypeDef *hmodbus, UART_HandleTypeDef *huart, TIM_HandleTypeDef *htim);
128/* Программная конфигурация модбас. */
129HAL_StatusTypeDef MODBUS_Config(RS_HandleTypeDef *hmodbus, uint8_t ID, uint16_t Timeout, uint8_t master);
130/* Запуск слейв устройства */
131HAL_StatusTypeDef MODBUS_SlaveStart(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg);
132/* Реквест мастера модбас */
133HAL_StatusTypeDef MODBUS_MasterRequest(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg, void (*pClbk)(RS_HandleTypeDef*, RS_MsgTypeDef*));
134
135
136
137/////////////////////////---FUNCTIONS---/////////////////////////////
138
139#endif //__MODBUS_H_
140
141/** MODBUS_FUNCTIONS
142 * @}
143 */
144
HAL_StatusTypeDef MODBUS_MasterRequest(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg, void(*pClbk)(RS_HandleTypeDef *, RS_MsgTypeDef *))
Реквест мастера модбас.
Definition modbus.c:136
HAL_StatusTypeDef MODBUS_Config(RS_HandleTypeDef *hmodbus, uint8_t ID, uint16_t Timeout, uint8_t master)
Программная конфигурация модбас.
Definition modbus.c:72
HAL_StatusTypeDef MODBUS_SlaveStart(RS_HandleTypeDef *hmodbus, RS_MsgTypeDef *modbus_msg)
Запуск слейв модбас.
Definition modbus.c:105
HAL_StatusTypeDef MODBUS_FirstInit(RS_HandleTypeDef *hmodbus, UART_HandleTypeDef *huart, TIM_HandleTypeDef *htim)
Инициализация периферии модбас.
Definition modbus.c:42
Работа с коилами Modbus.
Идентификаторы устройства Modbus.
Диагностика устройства Modbus.
Работа с регистрами хранения Modbus.
Работа с входными регистрами Modbus.
Главный заголовочный файл Modbus библиотеки
Главный заголовочный файл Modbus библиотеки
Библиотека обмена сообщениями по RS-интерфейсу
Handle for RS communication.
Definition rs_message.h:228
Structure for modbus messsage.