logo资料库

FreeModbus V1.6 主机使用说明.docx

第1页 / 共15页
第2页 / 共15页
第3页 / 共15页
第4页 / 共15页
第5页 / 共15页
第6页 / 共15页
第7页 / 共15页
第8页 / 共15页
资料共15页,剩余部分请下载后查看
FreeModbus V1.6 主机使用说明
一、简述
1.1、文件结构
二、移植
2.1、软件
2.1.1、操作系统与裸机
2.1.2、数据缓冲区
2.1.3、Modbus数据处理回调接口
2.2、硬件
2.2.1、串口
2.2.2、定时器
三、API
3.1、写单个保持寄存器
3.2、写多个保持寄存器
3.3、读多个保持寄存器
3.4、读写多个保持寄存器
3.5、读多个输入寄存器
3.6、写单个线圈
3.7、写多个线圈
3.8、读多个线圈
3.9、读多个离散输入
四、流程
4.1、初始化配置流程
4.2、正常使用流程
4.3、异常处理流程
FreeModbus V1.6 主机使用说明 [TOC] 一、简述 FreeModbus 是一款开源的 Modbus 协议栈,但是只有从机开源,主机源码是需 要收费的。同时网上也没有发现比较好的开源的 Modbus 主机协议栈,所以才开 发这款支持主机模式的 FreeModbus 协议栈。本版 FreeModbus 版本号更改为 V1.6,特性如下:  新增加的主机源码与原有从机的风格及接口保持一致;  支持主机与从机在同一协议栈运行;  支持实时操作系统及裸机移植;  为应用提供多种请求模式,用户可以选择阻塞还是非阻塞模式,自定义超 时时间等,方便应用层灵活调用;  支持所有常用的 Modbus 方法。 1.1、文件结构 源文件 描述 FreeModbus\modbus\mb.c FreeModbus\modbus\mb_m.c FreeModbus\modbus\ascii\mbascii.c 给应用层提供 Modbus 从机设置及轮询相关接 口 给应用层提供 Modbus 主机设置及轮询相关接 口 ASCII 模式设置及其状 态机
源文件 描述 FreeModbus\modbus\functions\mbfunccoils.c 从机线圈相关功能 FreeModbus\modbus\functions\mbfunccoils_m.c 主机线圈相关功能 FreeModbus\modbus\functions\mbfuncdisc.c 从机离散输入相关功能 FreeModbus\modbus\functions\mbfuncdisc_m.c 主机离散输入相关功能 FreeModbus\modbus\functions\mbfuncholding.c FreeModbus\modbus\functions\mbfuncholding_m.c FreeModbus\modbus\functions\mbfuncinput.c FreeModbus\modbus\functions\mbfuncinput_m.c 从机保持寄存器相关功 能 主机保持寄存器相关功 能 从机输入寄存器相关功 能 主机输入寄存器相关功 能 FreeModbus\modbus\functions\mbfuncother.c 其余 Modbus 功能 FreeModbus\modbus\functions\mbutils.c 一些协议栈中需要用到 的小工具 FreeModbus\modbus\rtu\mbcrc.c CRC 校验功能 FreeModbus\modbus\rtu\mbrtu.c 从机 RTU 模式设置及 其状态机 FreeModbus\modbus\rtu\mbrtu_m.c 主机 RTU 模式设置及
源文件 描述 其状态机 FreeModbus\modbus\tcp\mbtcp.c TCP 模式设置及其状态 机 FreeModbus\port\port.c 实现硬件移植部分接口 FreeModbus\port\portevent.c 实现从机事件移植接口 FreeModbus\port\portevent_m.c FreeModbus\port\portserial.c FreeModbus\port\portserial_m.c 实现主机事件及错误处 理移植接口 从机串口移植 主机串口移植 FreeModbus\port\porttimer.c 从机定时器移植 FreeModbus\port\porttimer_m.c 主机定时器移植 FreeModbus\port\user_mb_app.c FreeModbus\port\user_mb_app_m.c 定义从机数据缓冲区, 实现从机 Modbus 功能 的回调接口 定义主机数据缓冲区, 实现主机 Modbus 功能 的回调接口 注:所有带_m 后缀的文件为主机模式下必须使用的文件,如使用从机模式则无 需这些文件。
二、移植 对于协议栈的移植主要包括两个方面,硬件及软件。用户需要根据自己的需求进 行自行选择。 注:以下所有说明都主要针对 Modbus 主机模式进行介绍。 2.1、软件 软件方面支持基于裸机及实时操作系统的移植;支持单个主机与单个从机同时独 立运行。另外用户也可以修改协议栈的事件回调接口,使主机请求的接口采用阻 塞及非阻塞模式;主机资源等待方面,用户也可以设置等待超时时间等等,诸多 功能将会一一介绍。 2.1.1、操作系统与裸机 对于操作系统与裸机目前协议栈都是支持的,但个人更加推荐采用实时操作系统, 因为这样会使得接口调用及接口移植变得更加简单。目前提供移植完成的操作系 统包括国人的 RT-Thread 实时操作系统及 uCOS 操作系统。操作系统与裸机移 植的过程中涉及的文件为 FreeModbus\port\portevent_m.c 该文件主要有以下需 要用户移植的接口 接口 功能描述 xMBMasterPortEventInit 主机事件初始化 xMBMasterPortEventPost 主机发送事件 xMBMasterPortEventGet 主机获取事件 vMBMasterOsResInit 主机操作系统资源初始化 xMBMasterRunResTake 主机资源获取 vMBMasterRunResRelease 主机资源释放
接口 功能描述 vMBMasterErrorCBRespondTimeout 主机响应超时回调接口 vMBMasterErrorCBReceiveData 主机接收数据出错回调接口 vMBMasterErrorCBExecuteFunction 主机执行 Modbus 方法出错回调接口 vMBMasterCBRequestScuuess 主机请求执行成功回调接口 eMBMasterWaitRequestFinish 主机等待请求完成处理回调接口 在基于操作系统移植时,主要用到操作系统线程同步方面的技术,Modbus 协议 栈自身需要使用操作系统自带的事件机制来实现事件的发送通知与等待获取,同 时用户请求 Modbus 功能的线程与 Modbus 协议栈自身线程(Modbus Poll 线程) 需要通过事件机制实现两个线程的同步;主机协议栈还需要一个主机资源占用的 信号量,初始化默认为 1,采用信号量保证了多线程同时发送主机请求时,只有 一个线程可以使用主机。 在基于裸机移植时,需要通过软件模拟方式实现事件通知机制,事件等待及资源 等待都得采用用户自定义延时及标志变量来实现,实现起来比操作系统模式下的 线程同步机制要复杂很多。 2.1.2、数据缓冲区 数据缓冲区定义的位置位于 FreeModbus\port\user_mb_app_m.c 文件顶部,共计 4 种数据类型。 FreeModbus 从机默认使用一维数组作为缓存区数据结构,主机 可以存储所有网内从机的数据,所以主机采用二位数组对所有从机节点数据进行 存储。二维数组的列号代表寄存器、线圈及离散量地址,行号代表从机节点 ID, 但需要做减一处理,例如 usMRegHoldBuf[2][1]代表从机 ID 为 3,保持寄存器地 址为 1 的从机数据。 2.1.3、Modbus 数据处理回调接口 Modbus 一共有 4 种不同的数据类型,所有的 Modbus 功能都围绕这些数据类型 进行操作。由于不同的用户数据缓冲区结构可能有所不同,那么对应的 Modbus
数据处理方式也就存在差异,所以用户需要把每种数据类型对应的操作,按照自 己的数据缓冲区结构进行定制实现。 所有的 Modbus 数据处理回调接口如下: 接口 功能描述 eMBMasterRegInputCB 输入寄存器回调接口 eMBMasterRegHoldingCB 保持寄存器回调接口 eMBMasterRegCoilsCB 线圈回调接口 eMBMasterRegDiscreteCB 离散输入回调接口 对于数组形式的数据缓冲区结构,源码中已经做好了移植,直接使用即可。 2.2、硬件 移植 FreeModbus 协议栈主机部分时,在硬件方面需要修改串口及定时器配置, 文件位于 port 文件下,用户需要根据自己的 CPU 进行移植修改。 注:协议栈默认自带 STM32F103X 移植文件,用户可以参考移植 这里提一下基于操作系统设备驱动框架的移植,后期协议栈会增加对 RT-Thread 自带设备驱动框架的移植,只要是 RT-Thread 的 BSP 支持的 IC,用户都无需考 虑底层的移植过程,减低移植成本。 2.2.1、串口 涉及到串口的移植文件位于 FreeModbus\port\portserial_m.c,在这个文件中用户 需要对以下接口方法进行修改 接口 功能描述 vMBMasterPortSerialEnable 使能和失能串口的发送及接收功能,如使用 485 总线,需要注意收发模式切换 vMBMasterPortClose 关闭串口
接口 功能描述 xMBMasterPortSerialInit 串口初始化,如果使用 485,收发模式切换引 脚也要在此初始化 xMBMasterPortSerialPutByte 串口发送单字节数据 xMBMasterPortSerialGetByte 串口接收单字节数据 prvvUARTTxReadyISR prvvUARTRxISR 串口发送完成中断服务程序接口,按照默认方 式,直接引用 pxMBMasterFrameCBTransmitterEmpty 方法即可 串口接收中断服务程序接口,按照默认方式, 直接引用 pxMBMasterFrameCBByteReceived 方法 即可 还需要在文件末尾增加 CPU 的自带的串口服务程序,将上表中的发送及接收中 断程序接口,放到对应的中断服务程序中去即可。 2.2.2、定时器 涉及到定时器的移植文件位于 FreeModbus\port\porttimer_m.c,在这个文件中用 户需要对以下接口方法进行修改 接口 功能描述 xMBMasterPortTimersInit vMBMasterPortTimersT35Enable vMBMasterPortTimersConvertDelayEnable 定时器初始化,将定时器预分 频数及 T3.5 时间计数值分别 备份到 usPrescalerValue 及 usT35TimeOut50us 设置定时器按照 T3.5 时间开 始计数 设置定时器按照广播帧的转 换延时时间开始计数
接口 功能描述 vMBMasterPortTimersRespondTimeoutEnabl e 设置定时器按照响应超时时 间开始计数 vMBMasterPortTimersDisable prvvTIMERExpiredISR 失能定时器,定时器将停止计 数 定时器中断服务程序接口,按 照默认方式,直接引用 pxMBMasterPortCBTimerExpire d 方法即可 注: 1、usPrescalerValue 及 usT35TimeOut50us 在文件顶部有定义 2、转换延时 时间及响应超时时间在 FreeModbus\modbus\include\mbconfig.h,用户可以根据自 己系统的特点自行设置。 除上面接口方法外,用户需要在文件末尾增加 CPU 的自带的定时器中断服务程 序,将上表中的定时器中断服务程序接口放进去。 三、API Modbus 主机使用过程中与从机有很大不同,从机是需要被动等待主机请求,而 主机则是主动发出请求,并接收处理从机响应。在主机发送广播请求的时候,从 机不需要返回响应,所以广播请求适合主机的写从机数据命令,不适合读从机数 据命令。 主机请求 API 中的所有方法的返回值格式都相同,返回值意义如下。 返回值 描述 MB_MRE_NO_ERR 正常,没错误 MB_MRE_NO_REG 寄存器、线圈或离散输入地址出错 MB_MRE_ILL_ARG 入参格式有误 MB_MRE_REV_DATA 接收数据出错
分享到:
收藏