从0开始FreeModbus应用-chang原创课件资料 下载本文

内容发布更新时间 : 2024/5/17 22:16:08星期一 下面是文章的全部内容请认真阅读。

从应用角度学习FreeModbus

一、前言

FreeModbus本身没有什么说明文档。网上已经有了一些介绍,有些是内核分析,很有深度;有一些是应用笔记,实际应用时可能会用到。作为一个新入,我并不想了解那么多。我只想按步就班地知道到底要怎样能够很快地用起来。收集了一些资料,花了一些时间才终于基本搞清楚了一个大概。下面我从新人应用的角度来谈谈,参考甚至抄摘了前人的文档。入手主要是FreeModbus-V1.5自带的AVR平台下的DEMO项目,适当考虑FREERTOS下的特点。

二、FreeModbus简介

(本节摘抄自“百度百科”的词条“FreeModbus”)

FreeMODBUS一个奥地利人写的Modbus协议。它是一个针对嵌入式应用的一个免费(自由)的通用MODBUS协议的移植。Modbus是一个工业制造环境中应用的一个通用协议。Modbus通信协议栈包括两层:Modbus应用层协议,该层定义了数据模式和功能;另外一层是网络层。

FreeMODBUS 提供了RTU/ASCII 传输模式及TCP协议支持。FreeModbus遵循BSD许可证,这意味着用户可以将FreeModbus应用于商业环境中。目前版本FreeModbus-V1.5提供如下的功能支持:

表1 FreeModbus-V1.5功能支持

代码 Master Slave MB_RTU MB_ASCII MB_TCP 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x0B 0x0C 0x0F 0x10 0x11 0x14 0x15 0x16 0x17 0x18 0x2B 0x2B/0x0D 主机 从机 RTU模式 ASCII模式 TCP模式 读线圈 读离散输入 读保持寄存器 读输入寄存器 写单个线圈 写单个寄存器 读异常状态 诊断 获取事件计数器 获取事件记录 写多个线圈 写多个寄存器 报告从机ID 读文件记录 写文件记录 屏蔽写寄存器 读/写多个寄存器 写FIFO 封装接口传输 CANopen参考请求与应答 描述 是否支持 否 是 是 是 是 是 是 是 是 是 是 否 否 否 否 是 是 是 否 否 否 是 否 否 否 协议与文档不一致 备注 注意!!!!我批注 0x2B/0x0E

读设备身份表示 否 三、准备工作

下载FreeModbus-V1.5.0.zip,解压到当前文件夹。在当前文件夹下会生成“freemodbus-v1.5.0”目录。

如果选择了解压到“freemodbus-v1.5.0\\”,则会形成两级“freemodbus-v1.5.0”,可以不管,也可用复制粘贴的方法删除一级。将此目录(或两级目录)改为“freemodbus_v1.5.0”,否则后面用AVRSTUDIO4.12编译时会出错。

下载ATMEL公司的AVRSTUDIO4.12并安装。再下载AVR的GCC编译器avr-toolchain-installer-3.3.0.710-win32.win32.x86.exe并安装,它会集成到AVRSTUDIO4.12中。

关于freemodbus和STUDIO工程,后面会结合freemodbus文件目录结构进一步介绍。继续准备。 下载并安装虚拟串口VSPD。

设置串口3与4互连(后面PROTEUS里面的硬件,串口设置为3;ModScan32主机软件,串口设置为4),如图所示:

下载并安装ModScan32包,绿色版里直接运行ModScan32.exe就行了。它可以当作ModBus主机,也可以查看收发的数据,起监测作用。连接设置:菜单-->connection-->connect,出现下面界面,按图设置:

注意:串口是用的N,8,1的模式,没有校验位,原例子程序是需要有even偶校验位,后面会改原代码。因为总是模拟通不过,换这个就通过了,具体原因没有去找。

再点“rotocol selection”,如下图设置:

报文设置: 菜单-->setup-->data define,然后如下图所示: