# FreeModbus V1.6 主机使用说明
----------
## 一、简述
FreeModbus是一款开源的Modbus协议栈,但是只有从机开源,主机源码是需要**收费**的。同时网上也没有发现比较好的开源的Modbus主机协议栈,所以才开发这款支持主机模式的FreeModbus协议栈。本版FreeModbus版本号更改为V1.6,特性如下:
- 新增加的主机源码与原有从机的风格及接口保持一致;
- 支持主机与从机在同一协议栈运行;
- 支持实时操作系统及裸机移植;
- 为应用提供多种请求模式,用户可以选择阻塞还是非阻塞模式,自定义超时时间等,方便应用层灵活调用;
- 支持所有常用的Modbus方法。
### 1.1、文件结构
|源文件 |描述 |
|:------------------------------ |:----- |
|FreeModbus\modbus\mb.c |给应用层提供Modbus从机设置及轮询相关接口|
|FreeModbus\modbus\mb_m.c |给应用层提供Modbus主机设置及轮询相关接口|
|FreeModbus\modbus\ascii\mbascii.c |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 |定义从机数据缓冲区,实现从机Modbus功能的回调接口|
|FreeModbus\port\user_mb_app_m.c |定义主机数据缓冲区,实现主机Modbus功能的回调接口|
> 注:所有带_m后缀的文件为主机模式下必须使用的文件,如使用从机模式则无需这些文件。
----------
## 二、移植
对于协议栈的移植主要包括两个方面,硬件及软件。用户需要根据自己的需求进行自行选择。
> 注:以下所有说明都主要针对Modbus主机模式进行介绍。
### 2.1、软件
软件方面支持基于裸机及实时操作系统的移植;支持单个主机与单个从机同时独立运行。另外用户也可以修改协议栈的事件回调接口,使主机请求的接口采用阻塞及非阻塞模式;主机资源等待方面,用户也可以设置等待超时时间等等,诸多功能将会一一介绍。
#### 2.1.1、操作系统与裸机
对于操作系统与裸机目前协议栈都是支持的,但个人更加推荐采用实时操作系统,因为这样会使得接口调用及接口移植变得更加简单。目前移植完成的操作系统包括国人的 [RT-Thread][1] (详见项目源码) 、 UCOS 及 FreeRTOS。
操作系统与裸机移植的过程中涉及的文件为`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 |离散输入回调接口|
> 对于数组形式的数据缓冲区结构,源码中已经做好了移植,直接使用即可。也可以使用 [EasyDataManager](https://github.com/armink/EasyDataManager) 库,采用链表作为缓冲区,该库还支持事件驱动,做到数据变化自动通知应用层。
### 2.2、硬件
移植 FreeModbus 协议栈主机部分时,在硬件方面需要修改串口及定时器配置,文件位于port文件下,用户需要根据自己的CPU进行移植修改。
> 注:协议栈默认自带STM32F103X移植文件,用户可以参考移植
这里提一下基于操作系统设备驱动框架的移植,后期协议栈会增加对 [RT-Thread][1] 自带设备驱动框架的移植,只要是 RT-Thread 的 BSP 支持的 MCU,用户都无需考虑底层的移植过程,减低移植�
没有合适的资源?快使用搜索试试~ 我知道了~
FreeModbus_Slave-Master-RTT-STM32-master
共663个文件
c:271个
h:208个
s:90个
5星 · 超过95%的资源 需积分: 43 33 下载量 79 浏览量
2017-05-20
16:22:34
上传
评论 2
收藏 2.02MB ZIP 举报
温馨提示
FreeModbus_Slave-Master-RTT-STM32-master,主从通讯
资源推荐
资源详情
资源评论
收起资源包目录
FreeModbus_Slave-Master-RTT-STM32-master (663个子文件)
start_ccs.asm 14KB
context_ccs.asm 7KB
context_iar.asm 4KB
context_iar.asm 2KB
vector_ccs.asm 867B
AUTHORS 571B
FreeModbus_Slave&Master+RTT+STM32_uvopt.bak 222KB
FreeModbus_Slave&Master+RTT+STM32_uvproj.bak 63KB
FreeModbus_Slave&Master+RTT+STM32.cspy.bat 2KB
stm32f10x_tim.c 104KB
stm32f10x_flash.c 59KB
ipc.c 58KB
module.c 56KB
stm32f10x_rcc.c 49KB
stm32f10x_adc.c 45KB
stm32f10x_i2c.c 43KB
stm32f10x_can.c 43KB
core.c 40KB
stm32f10x_usart.c 36KB
otgd_fs_cal.c 35KB
system_stm32f10x.c 35KB
system_stm32f10x.c 35KB
sdio.c 35KB
stm32f10x_fsmc.c 34KB
finsh_compiler.c 33KB
usb_core.c 31KB
kservice.c 30KB
stm32f10x_spi.c 29KB
stm32f10x_dma.c 28KB
usb_regs.c 28KB
stm32f10x_sdio.c 27KB
cmd.c 27KB
slab.c 26KB
memheap.c 24KB
finsh_parser.c 23KB
stm32f10x_gpio.c 22KB
cpu_port.c 21KB
otgd_fs_int.c 21KB
thread.c 19KB
shell.c 19KB
cdc_vcom.c 18KB
sd.c 18KB
timer.c 18KB
stm32f10x_dac.c 18KB
mbfuncholding_m.c 18KB
mem.c 18KB
serial.c 17KB
zcore.c 17KB
mstorage.c 17KB
alarm.c 16KB
hub.c 16KB
mmcsd_core.c 16KB
core_cm3.c 16KB
cpu_port.c 15KB
mbascii.c 15KB
mbrtu_m.c 14KB
mbfunccoils_m.c 14KB
core.c 13KB
otgd_fs_dev.c 13KB
block_dev.c 13KB
msh.c 13KB
string.c 13KB
object.c 12KB
mempool.c 12KB
spi_core.c 12KB
pthread.c 12KB
mb_m.c 12KB
mb.c 12KB
adk.c 12KB
scheduler.c 12KB
mbfuncholding.c 12KB
usart.c 11KB
log_trace.c 11KB
otgd_fs_pcd.c 11KB
finsh_token.c 11KB
mbrtu.c 11KB
device.c 11KB
stm32f10x_cec.c 11KB
i2c-bit-ops.c 11KB
ymodem.c 10KB
cpuport.c 10KB
finsh_ops.c 10KB
user_mb_app_m.c 9KB
pthread_rwlock.c 9KB
mbfunccoils.c 9KB
serial.c 9KB
dataqueue.c 9KB
bsp.c 9KB
user_mb_app.c 9KB
rz.c 9KB
mmu.c 9KB
mmu.c 9KB
stm32f10x_pwr.c 8KB
mmu.c 8KB
stm32f10x_rtc.c 8KB
semaphore.c 8KB
pipe.c 8KB
stm32f10x_bkp.c 8KB
serial.c 8KB
mqueue.c 8KB
共 663 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
资源评论
- ewin662018-05-21太棒了!有主有从。版本很新,2013版的。
tox33
- 粉丝: 64
- 资源: 304
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功