freeModbus流程分析

简介: freeModbus流程注解

ADU 》 应用数据单元,每个MODBUS帧
PDU 》 协议数据单元,除设备地址及CRC校验码的数据

Modbus从设备

字符接收:
串口字符中断 》RTUReceiveFSM 》读取一个字节 》保存至接收缓冲区,同时启动T3.5定时器(帧与帧之间需间隔至少3.5个字符传输时间);
每次收到新字符,定时器都会被重置,直至T3.5超时,表示一个MODBUS帧结束

定时器超时后:
发出FRAME_RECEIVED事件

主线程:
收到FRAME_RECEIVED事件后,对帧进行CRC校验,并从中获取到从机地址、帧数据起始地址以及帧数据长度,当帧地址为本机地址或广播地址时,发出EV_EXECUTE事件

收到EV_EXECUTE事件后,从帧数据中取得功能码,并依据功能码调用相应的处理函数,相同的帧数据地址用于保存处理结果数据,并返回结果数据的长度,然后调用RTUSend函数,通知发送任务进行数据发送

注意:

  1. T3.5超时到函数被处理这段时间内,如果有新的帧进来,因共享缓冲区的原因,数据帧将会被破坏,需要注意
  2. MODBUS-RTU是按照数据传输间的空闲时间作为帧与帧之间区分的依据,所以串口接收不能使用缓冲区,必须实时处理,以满足时序要求

Modbus主设备

主设备功能是由从设备移植而来,所以基本流程与从设备一致,流程如下:

  1. 应用任务填充PDU数据至发送缓冲区中,然后发送MASTER_FRAME_SENT事件,等待发送完成
  2. 主功能线程收到MASTER_FRAME_SENT事件后,调用MasterRTUSend函数,添加CRC校验码后,启动发送线程
  3. 发送线程调用MasterRTUTransmitFSM函数,送出所有数据,然后判断如果为广播模式,则启动广播命令固定延时定时器,否则启动等待从设备响应定时器
  4. 接收到从设备数据后,停止等待接收定时器,启动T3.5定时器
  5. T3.5定时器超时后,发送MASTER_FRAME_RECEIVED事件,通知主线程数据接收完成
  6. 主线程解析帧并获取从机地址、数据等信息,发送MASTER_EXECUTE事件
  7. 主线程收到MASTER_EXECUTE事件,根据功能码最高位判断是否发生异常,并解析出异常码
  8. 如果数据正常,则调用对应处理函数进行数据处理

注意:

  1. 主模式下定时器不再是单一的T3.5定时器,还有等待从设备响应超时定时,以及广播命令固定延时定时功能
  2. 定时器超时函数中,判断超时原因为接收等待超时,则发送MASTER_ERROR_PROCESS事件,主线程中根据超时类型调用对应的错误回调函数处理各种错误
目录
相关文章
|
3月前
|
监控 安全 数据处理
了解阿里云 RPA:如何实现流程自动化
机器人流程自动化(RPA)是一种快速发展的技术,它可以帮助企业实现重复性任务的自动化,提高工作效率和准确性。阿里云 RPA 作为一款强大的 RPA 解决方案,为用户提供了一种简单而高效的方式来实现流程自动化。本文将介绍阿里云 RPA 的功能和特点,以及如何使用它来实现流程自动化。
|
3月前
|
监控 机器人 数据安全/隐私保护
|
12月前
|
存储 数据可视化 测试技术
「数据架构」5分钟学会数据流程图:客户服务系统示例
「数据架构」5分钟学会数据流程图:客户服务系统示例
|
消息中间件 数据库 RocketMQ
生成预订单流程分析1|学习笔记
快速学习生成预订单流程分析1
96 0
生成预订单流程分析1|学习笔记
|
消息中间件 数据库 RocketMQ
生成预订单流程分析2|学习笔记
快速学习生成预订单流程分析2
49 0
|
数据采集 消息中间件 监控
数据预处-理用例流程介绍|学习笔记
快速学习数据预处-理用例流程介绍
67 0
数据预处-理用例流程介绍|学习笔记
|
数据采集 机器学习/深度学习 算法
整体流程介绍 | 学习笔记
快速学习整体流程介绍
108 0
整体流程介绍 | 学习笔记
|
数据采集 消息中间件 监控
项目总体数据处理流程详解|学习笔记
快速学习项目总体数据处理流程详解
169 0
项目总体数据处理流程详解|学习笔记
|
Dubbo Java 应用服务中间件
服务注册流程分析02
上一篇文章中、我们已经知道 Dubbo 会额外注册 ServiceBean 到 Spring 容器中、因为需要借助这个 ServiceBean 注册到服务中心
127 0
|
XML Dubbo Java
服务注册流程分析01
在填充该 ServiceBean 的时候会将对应的那个声明了注解的 bean 设置到 ServiceBean 中。 剩下的流程放置到下一篇文章中
95 0