freemodbus流程解析(原创).pdf

上传人:大张伟 文档编号:5675803 上传时间:2020-07-22 格式:PDF 页数:2 大小:64.91KB
返回 下载 相关 举报
freemodbus流程解析(原创).pdf_第1页
第1页 / 共2页
freemodbus流程解析(原创).pdf_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

《freemodbus流程解析(原创).pdf》由会员分享,可在线阅读,更多相关《freemodbus流程解析(原创).pdf(2页珍藏版)》请在三一文库上搜索。

1、流程: 上电后即执行 Main(); 1. 调用 mb.c 中的 eMBInit(RTU,地址,端口 0,波特率,无校验) 验证地址是否正确并设置主机地址, 设置模式 RTU 并对函数指针进行映射 调用 mbrtu.c 中的 eMBRTUInit(地址,端口,波特率,校验) 初始化串口,初始化定时器 初始化事件函数 2. 调用 mb.c 中的 eMBEnable() 判断状态为禁止,则调用 eMBRTUStart() 状态设为 RX 初始化 启动串口接收功能 使能定时器 状态设为使能 3. 循环调用 eMBPoll() 检查状态是否为使能 如果有事件发生,则判断事件状态 事件为准备好 事件为接

2、收帧 事件为处理数据 事件为发送帧 首次, 从机等待串口数据包-接收到数据包触发串口中断-xMBRTUReceiveFSM( ) 函数-不断接收数据但不保存,不断重置定时器-直到数据接收完后产生 3.5T 定 时器中断代表接收完成-中断函数调用 xMBRTUTimerT35Expired( void )函数 -根据状态 RXINIT 调用 xMBPortEventPost( EV_READY )事件函数加入序列- 关闭定时器,设为 RXIDLE,返回主程序。-主程序 poll 根据 EVREADY 空操作取出 事件,返回。 再次接收到串口数据包-进入中断函数 xMBRTUReceiveFSM(

3、 )-根据状态 RXIDLE 数据存入 RTUBUF,状态设为 RXRCV,启动定时器-收到下个数据包,存储 数据并重置定时器,不断重复直到接收完数据包-收完后产生 3.5T 定时中断 xMBRTUTimerT35Expired()-根据 RXRCV 发送事件 EV_FRAME_RECEIVED,关 闭定时 器设 为 RXIDLE ,返回 主程 序 poll- 根 据 FRAMERECEIVED 调 用 eMBRTUReceive()处理收到数据的存储指针,然后发送事件 EV_EXECUTE-然 后返回主程序,继续执行 poll,-根据 EVEXECUTE,提取功能码,并判断功能 码确定功能处

4、理函数指针,并调用该函数。 (-以读单个线圈为例子,调用 eMBFuncReadCoils(数据帧,长度) ,-检查长 度是否正确,正确则处理寄存器地址,处理读取线圈数量-设定初始数据指针和长度 -加入头,计算所需字节数,调用 eMBRegCoilsCB(帧指针,地址,线圈数,读)回调 函数-检查地址是否正确-计算位偏移量-读线圈调用 xMBUtilGetBits()循 环读所需位,-按字节读取需要的位,存入 regbuf,然后返回-无错后长度增 加,返回 poll-) 如 果 不 是 广 播 命 令 , 则 需 要 响 应 - 有 异 常 则 发 送 异 常 , 无 异 常 则 调 用 eMBRTUSend()-接收状态为 RXIDLE 则计算首地址,地址,长度,CRC,发送状态设 为 TXXMIT, 使能串口发送功能-串口发送寄存器空产生中断, 调用中断函数- 调用 xMBRTUTransmitFSM( )函数-串口依次输出数据,发送完毕后,事件设为 EV_FRAME_SENT,禁用串口发送,状态改为 TXIDLE-返回 poll,根据 FRAMESENT 取出事件清空队列,一个循环完成。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1