b_mod_modbus
数据结构
//这部分代码主要是提供RTU模式的主机读写功能
//从机返回读数据结果的数据结构
typedef struct
{
uint8_t func;
uint8_t reg_num;
uint16_t *reg_value;
} bMB_ReadResult_t;
//从机返回写数据结果的数据结构
typedef struct
{
uint8_t func;
uint16_t reg;
uint16_t reg_num;
} bMB_WriteResult_t;
//传入回调函数的数据结构
typedef struct
{
uint8_t type; // 0: read 1:write
union
{
bMB_ReadResult_t r_result;
bMB_WriteResult_t w_result;
} result;
} bMB_SlaveDeviceData_t;
typedef void (*pMB_Send_t)(uint8_t *pbuf, uint16_t len);
typedef void (*pMB_Callback_t)(bMB_SlaveDeviceData_t *pdata);
//指定发送函数和回调函数
typedef struct
{
pMB_Send_t f;
pMB_Callback_t cb;
} bMB_Info_t;
typedef bMB_Info_t bModbusInstance_t;
//可以通过这个宏快速创建实例,创建实例的时候指定发送和回调函数
#define bMODBUS_INSTANCE(name, pSendData, pCallback) \
bModbusInstance_t name = {.f = pSendData, .cb = pCallback};
接口介绍
//读取寄存器的值
int bMB_ReadRegs(bModbusInstance_t *pModbusInstance, uint8_t addr, uint8_t func, uint16_t reg,uint16_t num);
//写寄存器的值
int bMB_WriteRegs(bModbusInstance_t *pModbusInstance, uint8_t addr, uint8_t func, uint16_t reg, uint16_t num, uint16_t *reg_value);
//将接收到的数据喂给模块,让模块进行解析。解析正确后执行回调
int bMB_FeedReceivedData(bModbusInstance_t *pModbusInstance, uint8_t *pbuf, uint16_t len);
使用例子
//...待添加