2021-09-24 14:31:23 索炜达电子 722
项目编号:E1294
文件大小:2M
源码说明:带中文注释
开发环境:C编译器
简要概述:
FreeModbus V1.6 主机使用说明
简述
FreeModbus是一款开源的Modbus协议栈,但是只有从机开源,主机源码是需要收费的。同时网上也没有发现比较好的开源的Modbus主机协议栈,所以才开发这款支持主机模式的FreeModbus协议栈。本版FreeModbus版本号更改为V1.6,特性如下:
-新增加的主机源码与原有从机的风格及接口保持一致;
-支持主机与从机在同一协议栈运行;
-支持实时操作系统及裸机移植;
-为应用提供多种请求模式,用户可以选择阻塞还是非阻塞模式,自定义超时时间等,方便应用层灵活调用;
-支持所有常用的Modbus方法。
注:所有带_m后缀的文件为主机模式下必须使用的文件,如使用从机模式则无需这些文件。
移植
对于协议栈的移植主要包括两个方面,硬件及软件。用户需要根据自己的需求进行自行选择。
注:以下所有说明都主要针对Modbus主机模式进行介绍。
1、软件
软件方面支持基于裸机及实时操作系统的移植;支持单个主机与单个从机同时独立运行。另外用户也可以修改协议栈的事件回调接口,使主机请求的接口采用阻塞及非阻塞模式;主机资源等待方面,用户也可以设置等待超时时间等等,诸多功能将会一一介绍。
1.1、操作系统与裸机
对于操作系统与裸机目前协议栈都是支持的,但个人更加推荐采用实时操作系统,因为这样会使得接口调用及接口移植变得更加简单。目前移植完成的操作系统包括国人的 RT-Thread (详见项目源码) 、 UCOS 及 FreeRTOS。 操作系统与裸机移植的过程中涉及的文件为FreeModbus\port\portevent_m.c 该文件主要有以下需要用户移植的接口文件结构
在 基于操作系统移植 时,主要用到操作系统线程同步方面的技术,Modbus 协议栈自身需要使用操作系统自带的事件机制来实现事件的发送通知与等待获取,同时用户请求 Modbus 功能的线程与 Modbus 协议栈自身线程(Modbus Poll 线程)需要通过事件机制实现两个线程的同步;主机协议栈还需要一个主机资源占用的信号量,初始化默认为1,采用信号量保证了多线程同时发送主机请求时,只有一个线程可以使用主机。
在 基于裸机移植 时,需要通过软件模拟方式实现事件通知机制,事件等待及资源等待都得采用用户自定义延时及标志变量来实现,实现起来比操作系统模式下的线程同步机制要复杂很多。
1.2、数据缓冲区
数据缓冲区定义的位置位于 FreeModbus\port\user_mb_app_m.c 文件顶部,共计 4种 数据类型。 FreeModbus从机默认使用 一维数组 作为缓存区数据结构,主机可以存储所有网内从机的数据,所以主机采用 二维数组 对所有从机节点数据进行存储。二维数组的列号代表寄存器、线圈及离散量地址,行号代表从机节点ID,但需要做减一处理,例如usMRegHoldBuf[2][1]代表从机ID为 3,保持寄存器地址为 1 的从机数据。
1.3、Modbus数据处理回调接口
Modbus 一共有4种不同的数据类型,所有的 Modbus 功能都围绕这些数据类型进行操作。由于不同的用户数据缓冲区结构可能有所不同,那么对应的 Modbus 数据处理方式也就存在差异,所以用户需要把每种数据类型对应的操作,按照自己的数据缓冲区结构进行定制实现。 所有的 Modbus 数据处理回调接口如下:
对于数组形式的数据缓冲区结构,源码中已经做好了移植,直接使用即可。也可以使用 EasyDataManager 库,采用链表作为缓冲区,该库还支持事件驱动,做到数据变化自动通知应用层。
2、硬件
移植 FreeModbus 协议栈主机部分时,在硬件方面需要修改串口及定时器配置,文件位于port文件下,用户需要根据自己的CPU进行移植修改。
注:协议栈默认自带STM32F103X移植文件,用户可以参考移植
这里提一下基于操作系统设备驱动框架的移植,后期协议栈会增加对 RT-Thread 自带设备驱动框架的移植,只要是 RT-Thread 的 BSP 支持的 MCU,用户都无需考虑底层的移植过程,减低移植成本。
2.1、串口
涉及到串口的移植文件位于FreeModbus\port\portserial_m.c,在这个文件中用户需要对以下接口方法进行修改
文件列表: