通过自己的理解,将modbus工作的全过程归纳为以下几个图。
希望你能更形象地从整体的角度理解整体的原理。
由于篇幅有限,图中的字体很小,省略了一些程序的语句。 请结合freemodbus的源代码进行确认。
串行端口相应地设置有基于STM32的USART2。
另外,应该有三个枚举概率,有识别和区别。
1 ) emb事件类型、emb角色) )中,判断事件。 事件是对完整帧(消息)的操作。
类型编号
{
EV_READY,//事件准备阶段,即还没有接收到1帧的数据
EV_FRAME_RECEIVED,//1帧的数据接收结束
EV_EXECUTE,//此帧数据的具体执行
发送EV_FRAME_SENT //帧
} emb事件类型;
2 ) eRcvState和eSndState,这两个枚举变量表示接收状态、发送状态,每字节。
如果存在正在接收的字节,则eRcvState=STATE_RX_RCV; 所有字节接收后,将再次进入空闲状态。
如果没有正在接收的字节,则eRcvState=STATE_RX_IDLE; 只有在接收空闲状态下才能发送。 反之亦然。
他们的关系:当一帧的所有的字节被接收、或者被发送完成之后, 就触发了一个事件。从而,进入了对事件的操作中。
有了大致的理解,下图会更容易理解。