Lwip和FreeModbus的移植这里补多说,大家下载我移植好的工程文件自己学习即可,主要说一下注意点一、初始化
初始化主要调用下面这两个函数,用来指定端口和使能TCP连接
eMBTCPInit(502 );
eMBEnable(MB_TCP);
二、关键函数的实现
/**
*****************************************************************************
* @Name : 操作输入寄存器
*
* @Brief : 对应功能码0x04 -> eMBFuncReadInputRegister
*
* @Input : *pucRegBuffer:数据缓冲区,响应主机用
* usAddress: 寄存器地址
* usNRegs: 操作寄存器个数
*
* @Output : none
*
* @Return : Modbus状态信息
*****************************************************************************
**/
eMBErrorCode eMBRegInputCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs )
/**
*****************************************************************************
* @Name : 操作保持寄存器
*
* @Brief : 对应功能码0x06 -> eMBFuncWriteHoldingRegister
* 0x16 -> eMBFuncWriteMultipleHoldingRegister
* 0x03 -> eMBFuncReadHoldingRegister
* 0x23 -> eMBFuncReadWriteMultipleHoldingRegister
*
* @Input : *pucRegBuffer:数据缓冲区,响应主机用
* usAddress: 寄存器地址
* usNRegs: 操作寄存器个数
* eMode: 功能码
*
* @Output : none
*
* @Return : Modbus状态信息
*****************************************************************************
**/
eMBErrorCode eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegisterMode eMode )
/**
*****************************************************************************
* @Name : 操作线圈
*
* @Brief : 对应功能码0x01 -> eMBFuncReadCoils
* 0x05 -> eMBFuncWriteCoil
* 0x15 -> 写多个线圈 eMBFuncWriteMultipleCoils
*
* @Input : *pucRegBuffer:数据缓冲区,响应主机用
* usAddress: 寄存器地址
* usNRegs: 操作寄存器个数
* eMode: 功能码
*
* @Output : none
*
* @Return : Modbus状态信息
*****************************************************************************
**/
eMBErrorCode eMBRegCoilsCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNCoils, eMBRegisterMode eMode )
/**
*****************************************************************************
* @Name : 操作离散寄存器
*
* @Brief : 对应功能码0x02 -> eMBFuncReadDiscreteInputs
*
* @Input : *pucRegBuffer:数据缓冲区,响应主机用
* usAddress: 寄存器地址
* usNRegs: 操作寄存器个数
*
* @Output : none
*
* @Return : Modbus状态信息
*****************************************************************************
**/
eMBErrorCode eMBRegDiscreteCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNDiscrete )
{
三、( void )eMBPoll( );
这个函数要在一个循环中调用,用来处理和发送数据
while(1)
{
LED0 = !LED0;
( void )eMBPoll( );
OSTimeDlyHMSM(0,0,0,500); //延时500ms
}