Доработки и рефакторинг
This commit is contained in:
@@ -98,7 +98,7 @@ typedef enum
|
||||
* @code
|
||||
* // Пример: Запросили 10 coils с адреса 20, хотим узнать состояние coil 25
|
||||
* int coil_state;
|
||||
* if(MB_GetCoilState(&MODBUS_MSG, 25, &coil_state))
|
||||
* if(MB_RespGet_CoilState(&MODBUS_MSG, 25, &coil_state))
|
||||
* {
|
||||
* printf("Coil 25 state: %s\n", coil_state ? "ON" : "OFF");
|
||||
* }
|
||||
@@ -107,7 +107,7 @@ typedef enum
|
||||
* for(int addr = MODBUS_MSG.Addr; addr < MODBUS_MSG.Addr + MODBUS_MSG.Qnt; addr++)
|
||||
* {
|
||||
* int state;
|
||||
* if(MB_GetCoilState(&MODBUS_MSG, addr, &state))
|
||||
* if(MB_RespGet_CoilState(&MODBUS_MSG, addr, &state))
|
||||
* {
|
||||
* printf("Coil %d: %s\n", addr, state ? "ON" : "OFF");
|
||||
* }
|
||||
@@ -115,7 +115,7 @@ typedef enum
|
||||
* @endcode
|
||||
*/
|
||||
|
||||
int MB_GetCoilState(RS_MsgTypeDef *modbus_msg, uint16_t coil_addr, int *coil_state);
|
||||
int MB_RespGet_CoilState(RS_MsgTypeDef *modbus_msg, uint16_t coil_addr, int *coil_state);
|
||||
|
||||
/** MODBUS_REQ_COILS_API
|
||||
* @}
|
||||
|
||||
@@ -19,8 +19,8 @@
|
||||
#include "stm32f1xx_hal.h"
|
||||
|
||||
// Общие параметры
|
||||
#define MODBUS_DEVICE_ID 1 ///< девайс текущего устройства
|
||||
#define MODBUS_TIMEOUT 5000 ///< максимальнйы тайтаут MB в тиках таймера
|
||||
#define MODBUS_DEVICE_ID 1 // Адрес устройства в сети Modbus
|
||||
#define MODBUS_TIMEOUT 5000 // Таймаут в тиках таймера
|
||||
|
||||
// Строковые идентификаторы устройства
|
||||
#define MODBUS_VENDOR_NAME "NIO-12"
|
||||
@@ -34,14 +34,14 @@
|
||||
|
||||
// Периферия (опционально)
|
||||
#define mb_huart huart1 ///< Удобный дефайн для модбасовского uart
|
||||
#define mb_htim htim2 ///< Удобный дефайн для модбасовского таймера
|
||||
#define mb_htim htim3 ///< Удобный дефайн для модбасовского таймера
|
||||
//#define RS_EnableReceive() ///< Функция изменения направления передачи на ПРИЕМ для RS-485
|
||||
//#define RS_EnableTransmit() ///< Функция изменения направления передачи на ПЕРЕДАЧУ для RS-485
|
||||
|
||||
|
||||
// Модули modbus
|
||||
#define MODBUS_ENABLE_SLAVE ///< Включить обработку МАСТЕР режима
|
||||
#define MODBUS_ENABLE_MASTER ///< Включить обработку СЛЕЙВ режима
|
||||
#define MODBUS_ENABLE_SLAVE ///< Включить обработку СЛЕЙВ режима
|
||||
//#define MODBUS_ENABLE_MASTER ///< Включить обработку МАСТЕР режима
|
||||
|
||||
#define MODBUS_ENABLE_COILS ///< Включить обработку коилов
|
||||
#define MODBUS_ENABLE_HOLDINGS ///< Включить обработку регистров хранения
|
||||
|
||||
@@ -87,7 +87,7 @@ void MB_DeviceInentificationInit(void);
|
||||
* // Пример 1: Получить VendorName (ID = 0x00)
|
||||
* uint8_t length;
|
||||
* char vendor_name[64];
|
||||
* if(MB_FindObjectById(&MODBUS_MSG, 0x00, vendor_name, &length))
|
||||
* if(MB_RespGet_ObjectById(&MODBUS_MSG, 0x00, vendor_name, &length))
|
||||
* {
|
||||
* // получено
|
||||
* }
|
||||
@@ -96,12 +96,12 @@ void MB_DeviceInentificationInit(void);
|
||||
* uint8_t obj_id, obj_length;
|
||||
* char obj_data[256];
|
||||
*
|
||||
* int obj_count = MB_GetNumberOfObjects(&MODBUS_MSG);
|
||||
* int obj_count = MB_RespGet_NumberOfObjects(&MODBUS_MSG);
|
||||
* printf("Total objects: %d\n", obj_count);
|
||||
*
|
||||
* for(int i = 0; i < obj_count; i++)
|
||||
* {
|
||||
* if(MB_GetObjectByIndex(&MODBUS_MSG, i, &obj_id, obj_data, &obj_length))
|
||||
* if(MB_RespGet_ObjectByIndex(&MODBUS_MSG, i, &obj_id, obj_data, &obj_length))
|
||||
* {
|
||||
* // получено
|
||||
* }
|
||||
@@ -110,11 +110,11 @@ void MB_DeviceInentificationInit(void);
|
||||
*/
|
||||
|
||||
/* Получить количество объектов в сообщении */
|
||||
int MB_GetNumberOfObjects(RS_MsgTypeDef *modbus_msg);
|
||||
int MB_RespGet_NumberOfObjects(RS_MsgTypeDef *modbus_msg);
|
||||
/* Найти объект по ID в сообщении */
|
||||
int MB_FindObjectById(RS_MsgTypeDef *modbus_msg, uint8_t obj_id, char *obj_data, uint8_t *obj_length);
|
||||
int MB_RespGet_ObjectById(RS_MsgTypeDef *modbus_msg, uint8_t obj_id, char *obj_data, uint8_t *obj_length);
|
||||
/* Получить объект по индексу в сообщении */
|
||||
int MB_GetObjectByIndex(RS_MsgTypeDef *modbus_msg, int index, uint8_t *obj_id, char *obj_data, uint8_t *obj_length);
|
||||
int MB_RespGet_ObjectByIndex(RS_MsgTypeDef *modbus_msg, int index, uint8_t *obj_id, char *obj_data, uint8_t *obj_length);
|
||||
|
||||
|
||||
/** MODBUS_REQ_DEFID_API
|
||||
|
||||
@@ -66,13 +66,13 @@ void MB_DiagnosticsInit(void);
|
||||
* @code
|
||||
* Получить данные диагностики (значение счетчика)
|
||||
* uint16_t counter_value;
|
||||
* if(MB_GetDiagnosticResponse(&MODBUS_MSG, &counter_value))
|
||||
* if(MB_RespGet_Diagnostic(&MODBUS_MSG, &counter_value))
|
||||
* {
|
||||
* printf("Counter value: %d\n", counter_value);
|
||||
* }
|
||||
* @endcode
|
||||
*/
|
||||
int MB_GetDiagnosticResponse(RS_MsgTypeDef *modbus_msg, uint16_t *data);
|
||||
int MB_RespGet_Diagnostic(RS_MsgTypeDef *modbus_msg, uint16_t *data);
|
||||
/** MODBUS_REQ_DIAG_API
|
||||
* @}
|
||||
*/
|
||||
|
||||
@@ -83,7 +83,7 @@ RS_MsgTypeDef MB_REQUEST_READ_DEVICE_ID_SPECIFIC(uint8_t slave_addr, uint8_t obj
|
||||
* @code
|
||||
* // Пример: Запросили 10 регистров с адреса 100, хотим получить значение регистра 105
|
||||
* uint16_t reg_value;
|
||||
* if(MB_GetRegisterValue(&MODBUS_MSG, 105, ®_value))
|
||||
* if(MB_RespGet_RegisterValue(&MODBUS_MSG, 105, ®_value))
|
||||
* {
|
||||
* printf("Register 105 value: %d\n", reg_value);
|
||||
* }
|
||||
@@ -92,7 +92,7 @@ RS_MsgTypeDef MB_REQUEST_READ_DEVICE_ID_SPECIFIC(uint8_t slave_addr, uint8_t obj
|
||||
* for(int addr = MODBUS_MSG.Addr; addr < MODBUS_MSG.Addr + MODBUS_MSG.Qnt; addr++)
|
||||
* {
|
||||
* uint16_t value;
|
||||
* if(MB_GetRegisterValue(&MODBUS_MSG, addr, &value))
|
||||
* if(MB_RespGet_RegisterValue(&MODBUS_MSG, addr, &value))
|
||||
* {
|
||||
* printf("Register %d: %d\n", addr, value);
|
||||
* }
|
||||
@@ -100,7 +100,7 @@ RS_MsgTypeDef MB_REQUEST_READ_DEVICE_ID_SPECIFIC(uint8_t slave_addr, uint8_t obj
|
||||
* @endcode
|
||||
*/
|
||||
|
||||
int MB_GetRegisterValue(RS_MsgTypeDef *modbus_msg, uint16_t reg_addr, uint16_t *reg_value);
|
||||
int MB_RespGet_RegisterValue(RS_MsgTypeDef *modbus_msg, uint16_t reg_addr, uint16_t *reg_value);
|
||||
|
||||
|
||||
/** MODBUS_REQ_REGS_API
|
||||
|
||||
Reference in New Issue
Block a user