一、说明1.移植的开发环境是keil5。2.基于rt-thread操作系统,也可以使用ucos和freeRTOS操作系统。3.本人可有偿代移植其他操作系统,具体费用主页加我QQ联系。4.页面底部有rt-thread操作系统移植成功的工程链接,大家可以参考。二、移植步骤由于移植过程比较繁琐,就不过多说明了,大家可以下载工程研究一下就行三、特殊说明1. 读取输入寄存器(功能04)使用函数:
/** * Modbus master input register callback function. * * @param pucRegBuffer input register buffer * @param usAddress input register address * @param usNRegs input register number * * @return result */eMBErrorCode eMBMasterRegInputCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs )读取值存入变量:
USHORT usMRegInBuf[MB_MASTER_TOTAL_SLAVE_NUM][M_REG_INPUT_NREGS];2. 读取线圈(功能01)使用函数:
/** * Modbus master coils callback function. * * @param pucRegBuffer coils buffer * @param usAddress coils address * @param usNCoils coils number * @param eMode read or write * * @return result */eMBErrorCode eMBMasterRegCoilsCB(UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNCoils, eMBRegisterMode eMode)读取值存入变量:
ucMCoilBuf[MB_MASTER_TOTAL_SLAVE_NUM][M_COIL_NCOILS/8+1];3.读取保持寄存器(功能03)使用函数:
/** * Modbus master holding register callback function. * * @param pucRegBuffer holding register buffer * @param usAddress holding register address * @param usNRegs holding register number * @param eMode read or write * * @return result */eMBErrorCode eMBMasterRegHoldingCB(UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegisterMode eMode)读取值存入变量:
USHORT usMRegHoldBuf[MB_MASTER_TOTAL_SLAVE_NUM][M_REG_HOLDING_NREGS];四、相关宏定义的设置在 user_mb_app_m.c文件中,对离散量接收缓冲器 ucMDiscInBuf、线圈接收缓冲器 ucMCoilBuf、输入寄存器接收缓冲器 usMRegInBuf、保持寄存器接收缓冲器 usMRegHoldBuf的大小进行了定义。定义的缓冲区大小取决于对于下列宏的定义: mbconfig.h 从机数量 MB_MASTER_TOTAL_SLAVE_NUM user_mb_app.h 中: #define RT_M_DISCRETE_INPUT_START 0 //离散量起始地址 #define RT_M_DISCRETE_INPUT_NDISCRETES 16 //离散量数量 #define RT_M_COIL_START 0 //线圈起始地址 #define RT_M_COIL_NCOILS 64 //线圈数量 #define RT_M_REG_INPUT_START 0 //输入寄存器起始地址 #define RT_M_REG_INPUT_NREGS 100 //输入寄存器数量 #define RT_M_REG_HOLDING_START 0 //保持寄存器起始地址 #define RT_M_REG_HOLDING_NREGS 100 //保持寄存器数量
五、工程链接STM32F103基于rt-thread操作系统移植的freemodbus主机完整工程