- 文件功能
- user_mb_m.c:回调函数,用于拆包(根据协议)
- portevent_m.c:管理事件,主要用于切换状态机
- portserial_m.c:串口移植
- porttimer_m.c:定时器移植,定时器有2个用途
- 接收超时时间(一般是1秒)
- T3.5计时,用于判断接收完一帧
- mb_m.c:主站系统的外部调用函数
- mbfuncxxxx_m.c:协议功能函数,用于打包(请求)
- mbrtu_m.c:RTU协议函数(modbus还包括tcp)
- mbutils.c:多功能工具包,包括位操作等一些工具函数
-
以下是主站的流程图
- 主站初始化以后,占用以下资源
-
ModbusMasterRequeset 线程:打包数据,请求处理、根据回应进行处理(error)
-
eMBMasterPoll线程:发送数据、接收数据、拆包、响应请求
- 串口中断:发送数据、接收数据、切换状态机
- 定时器TIM中断:接收超时、T3.5计时、广播自动结束,主要用于切换状态机和判断接收超时错误
-
- 以下是2个线程、2个中断的时序
- Requeset 线程和 Poll 线程公用公开的资源
- 接收缓存区:ucMasterRTUSndBuf,数据往里面放,供另外一个线程使用
- 发送缓存区:ucMasterRTURcvBuf,数据往里面放,供另外一个线程使用
-
myEvent01Handle(OS event:事件标志组,用于线程挂起以及恢复)
- Requeset 线程等待的事件
-
EV_MASTER_PROCESS_SUCESS /*!< Request process success. */EV_MASTER_ERROR_RESPOND_TIMEOUT /*!< Request respond timeout. */EV_MASTER_ERROR_RECEIVE_DATA /*!< Request receive data error. */EV_MASTER_ERROR_EXECUTE_FUNCTION /*!< Request execute function error. */
- Poll 线程等待的事件
-
EV_MASTER_READY /*!< Startup finished. */EV_MASTER_FRAME_RECEIVED /*!< Frame received. */EV_MASTER_EXECUTE /*!< Execute function. */EV_MASTER_FRAME_SENT /*!< Frame sent. */ EV_MASTER_ERROR_PROCESS /*!< Frame error process. 找不到对应的回调函数(拆包函数) */
- 串口使能函数 vMBMasterPortSerialEnable(),在定时器中断中会使用(FALSE,FALSE)
- 如果 DE RE是2个GPIO引脚,则把2个引脚都关闭
- 如果DE/RE是1个引脚,不是接受就是发送,则打到发送状态
- 重点注意
- 主站start函数(eMBMasterRTUStart)会调用一次 接收使能,此处不合理,可以杠掉
- 相比从站代码,主站在接收的时候会切换SndState,供定时器中断判定是否为超时
- 超时判断=“已发送” 并且 “没有接收” 并且 “进入时间中断”
- 主站需要不断修改定时器的ARR(接收超时 T3.5 切换),因此定时器的 AutoReloadPreload 千万不能使能。否则ARR不会实时更新(要等到下一次中断发生才会更新)
- 定时器ARR是16位,超过会溢出。按照一般的配置,超时时间不能超过3726ms,否则会溢出,实际ARR并不是想要的数据
详细解决方案
Modbus RTU Master源代码解读
热度:93 发布时间:2023-12-18 09:11:11.0
相关解决方案
- master.FindControl的有关问题,初学者!
- Parser Error Message: The file '/MasterPage.master' does not exist.解决办法
- 母板页(master)怎么绑定皮肤
- (急)在数据库 'master' 中回绝了 CREATE DATABASE 权限。~~~~~~~~~~
- 在数据库 'master' 中拒绝了 CREATE DATABASE 权限。解决方案
- master page 下,無法觸發gridview GridView2_SelectedIndexChanged事件,為什麼?该怎么处理
- master page頁面怎么用js來做輸入驗證
- sharepoint 2010 页面增添logo banner方法 custom banner for sharepoint 2010 master page
- sharepoint 2010 页面增添footer方法 custom footer for sharepoint 2010 master page
- 执行"EXEC master.xp_cmdshell."后找不到相干文件,请大家帮忙解答
- mysql主主同步,show master status时,提示empty set.
- 问个基础有关问题:USE master
- 关于执行 EXEC master.xp_cmdshell @sql 的有关问题
- exec master.xp_cmdshell net use 有关问题,多谢!请进入:)
- 怎么修改SQL2008 系统库(master,tempdb等)的 排序规则名称
- master.spt_values表的作用是什么,几个字段的含义是什么,哪位高手能讲讲呢
- 2005 management studio 下面 找不到 master 数据库解决办法
- 邮件发送,exec master.dbo.xp_sendmail提示异常,求!请高手帮忙!多谢
- 在查询分析器中可以执行 EXEC master.dbo.xp_cmdshell 'd:\ab\p.exe beep' 为什么将它移到触发器中却不能执行?解决思路
- 启动sql服务管理器,想启动里面的数据库,结果启动命令执行后还是停止的状态,查看日志说FCB:Open failed: c:\Server\MSSQL\data\master.md,该怎么处理
- SQLSERVER打开出现找不到存储过程'master.dbo.xp_MSplatform'解决方法
- EXEC master.xp_cmdshell 导出Excel能不能设置Excel字体格式,该如何处理
- master.dbo.xp_cmdshell 被删除了 不允许用 怎么处理
- 工作需要半个月让小弟我写四个驱动程序,Opc,DDE,MODBUS Tcp/Ip, 数据库驱动,以前都没接触过。时间紧,另外还有两个控件要调试。请各位前辈指教指教
- modbus TCP串口通信解决方案
- modbus rtu通讯有关问题
- modbus ascii 返回值的解析
- Modbus 协议中串口数据位长度有关问题
- 出现ERROR: Can't get master address from ZooKeeper; znode data == null解决方法
- 故障案例:主从同步出错Fatal error: The slave I/O thread stops because master and slave have equal MySQL server