首先,在使能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时,接收状态eRc
本文详细介绍了FreeModbus协议栈在ASCII传输模式下的工作流程,从接收报文的起始字符判断,到数据帧的LRC校验与拆解,再到响应主机的功能调用,详述了ASCII模式下的一帧数据从接收、处理到发送的完整过程。
订阅专栏 解锁全文
1224

被折叠的 条评论
为什么被折叠?



