通过自己的理解,将modbus的整个工作过程,归纳为如下几张图。

希望能更加形象地,从整体的角度去理解整个原理。

由于篇幅有限,图的字体很小,部分程序的语句被省略掉了,请结合freemodbus的源代码进行查看。 

串口,是基于STM32的USART2进行相应地设置。

 

此外,有3个枚举概率,应该有所认识和区别。

1)eMBEventType,在eMBroll( )中,对事件进行判断。所谓的事件,是针对一条完整的帧(报文)的操作。

typedef enum
{
    EV_READY,                              // 事件准备阶段,即还没有接收到一帧数据
    EV_FRAME_RECEIVED,         //接收完了一帧数据
    EV_EXECUTE,                         //对这一帧数据的具体执行
    EV_FRAME_SENT                  //一个帧被发送
} eMBEventType;   

2)eRcvState 和 eSndState, 这两个枚举变量,是表示接收状态、发送状态,是针对每个字节而言的。

如果有字节在接收,则eRcvState = STATE_RX_RCV;当所有的字节接收完后,就重新出于空闲状态了。

如果没有字节在接收,则eRcvState = STATE_RX_IDLE;只有在接收空闲状态,才能发送。反之亦然。

关系:

当一帧的所有的字节被接收、或者被发送完成之后, 就触发了一个事件。从而,进入对事件的操作中。

 

在有个大致的理解之后,下面的图就更加容易理解了。

 

MODBUS的工作步骤分析(图解)

MODBUS的工作步骤分析(图解)

MODBUS的工作步骤分析(图解)

MODBUS的工作步骤分析(图解)

MODBUS的工作步骤分析(图解)

相关文章:

  • 2022-02-07
  • 2021-06-16
  • 2022-12-23
  • 2021-05-05
  • 2021-05-26
  • 2021-12-18
  • 2021-12-25
  • 2021-12-18
猜你喜欢
  • 2022-12-23
  • 2021-07-05
  • 2021-09-12
  • 2021-12-20
  • 2021-05-18
  • 2021-07-23
  • 2021-05-12
相关资源
相似解决方案