首先,在使能modbus协议栈的时候,会调用pvMBFrameStartCur函数
/* 使能modbus */
eMBErrorCode eMBEnable(void)
{
eMBErrorCode eStatus = MB_ENOERR;
/* modbus还未使能 */
if(eMBState == STATE_DISABLED)
{
/* 启动modbus */
pvMBFrameStartCur();
/* 设置modbus状态为使能 */
eMBState = STATE_ENABLED;
}
else
{
/* 状态不合法 */
eStatus = MB_EILLSTATE;
}
return eStatus;
}
在rtu模式下pvMBFrameStartCur指针指向eMBASCIIStart函数
/* modbus ascii启动函数 */
void eMBASCIIStart(void)
{
ENTER_CRITICAL_SECTION();
/* 串口打开接收、关闭发送 */
vMBPortSerialEnable(TRUE, FALSE);
/* 接收状态设置为接收空闲 */
eRcvState = STATE_RX_IDLE;
EXIT_CRITICAL_SECTION();
/* 发送就绪事件 */
(void)xMBPortEventPost(EV_READY);
}
启动RTU时,接收状态eRcvState 设置为接收空闲态STATE_RX_IDLE,打开接收中断,向主程序发送就绪事件。
主程序接收到就绪事件后什么也没做
/* modbus轮询 *