基于MODBUS协议的通讯系统.docx
- 文档编号:5809830
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:86
- 大小:1.70MB
基于MODBUS协议的通讯系统.docx
《基于MODBUS协议的通讯系统.docx》由会员分享,可在线阅读,更多相关《基于MODBUS协议的通讯系统.docx(86页珍藏版)》请在冰豆网上搜索。
基于MODBUS协议的通讯系统
基于MODBUS协议的通讯系统
【摘要】本设计研究如何通过MODBUS通讯协议,设计利用单片机,结合NRF24L01无线收发芯片,实现了温度实时采集与主机(PC机)显示。
用STC89C52单片机与DS18B20对温度采集显示于数码管,在通过无线模块发送到另一块单片机系统里通过1602液晶显示,成后,基于MODBUS通讯协议通过RS-485的物理层实现串口通信,发送实时数据给主机。
经过一系列的处理后,温度得以实时在两个单片机系统中显示并准确显示在主机串口调试软件中。
经检测,作品实现了基于MODBUS协议的通讯。
【关键词】MODBUSNRF24L01STC89C52PC机
[Abstract]ThisdesigntostudyhowthroughtheMODBUScommunicationprotocoldesignedtousemicrocontroller,tocombineNRF24L01wirelesstransceiverchiptemperaturereal-timeacquisitionwiththehost(PC)display.TheSTC89C52SCMandDS18B20temperatureacquisitionanddisplaydigitalcontrol,the1602LCD,afterthecompletionofamicrocontrollersystemviaRS-485physicallayercommunicationprotocolbasedonMODBUSserialcommunicationthroughawirelessmoduletosendtosendreal-timedatatothehost.Afteraseriesoftreatments,thetemperaturecanbeshowninthetwosingle-chipsysteminrealtimeandaccuratelydisplayedonthehostserialportdebuggingsoftware.Aftertesting,theworksbasedonMODBUSprotocolcommunication.
[Keywords]TheMODBUSnRF24L01STC89C52hostcomputer
第1章绪论
1.1Modbus协议简介
Modbus是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的总线协议。
为更好地普及和推动Modbus在基于以太网上的分布式应用,目前施耐德公司已将Modbus协议的所有权移交给IDA(InterfaceforDistributedAutomation,分布式自动化接口)组织,并成立了Modbus-IDA组织,为Modbus今后的发展奠定了基础。
在中国,Modbus已经成为国家标准GB/T19582-2008。
据不完全统计:
截止到2007年,Modbus的节点安装数量已经超过了1000万个。
Modbus协议是应用于电子控制器上的一种通用语言。
通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。
它已经成为一通用工业标准。
有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。
此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。
它描述了一控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。
它制定了消息域格局和内容的公共格式。
1.2Modbus协议的应用
工业控制已从单机控制走向集中监控、集散控制,如今已进入网络时代,工业控制器连网也为网络管理提供了方便。
Modbus就是工业控制器的网络协议中的一种。
Modbus协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。
它描述了控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。
它制定了消息域格局和内容的公共格式。
当在Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。
如果需要回应,控制器将生成反馈信息并用Modbus协议发出。
在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。
这种转换也扩展了根据具体的网络解决节地址、路由路径及错误测的方法。
1.3、本论文的主要内容
考虑到工业上常常要对一些移动性强的设备进行一些监控,本次设计了温度信号实时采集显示。
在短距离利用无线模块与一些移动性强的设备进行数据交换克服有线通讯的弊端,再基于Modbus通讯协议将采集到的数据显示于上位机上实现远程通讯。
本论文的主要内容总由五章组成。
第一章介绍Modus通讯协议与它的应用;第二章介绍设计的总思路和基本原理,对Mdodbus、通讯接口、无线模块的方案进行介绍和选择;第三章介绍modbus协议、RS485通讯接口、NRF24L01通讯模块的内容;第四章具体介绍硬件设计,最小系统、按键液晶数码管显示、电源电路、RS232—485模块、NRF24L01模块的硬件设计等;第五章介绍Modbus协议的软件设计、A机软件设计、B机软件设计等;第六章介绍整个作品的实现,对设计的整体外观、串口显示、对结果进行评价;说明了不足之处和设计的展望等。
第2章 设计总思路和法案选择
2.1、设计总体思路基本原理和框图
本次设计了基于RS232-485为接口,双绞线为介质的MODBUS通讯协议来实现远距离、高稳定、高速率、抗干扰能力强的通讯系统,得以在远离现场进行监测。
考虑到现场有时候设备移动性比较强时,比如物料输送时要监测移动的设备的温度时,有线方式通讯是受限的,所以设计中还结合了无线模块来避免这种弊端。
根据设计思路本次设计为A、B两个系统模块和PC机通讯模块;A机和B机可以通过无线模块双向传输信号;在Modbus通讯中B机作为从机,PC机作为主机,通过RS232-485接口实现通讯。
功能如图2-1所示:
MCU—A机
独立
键盘
无线收发模块A
液晶显示器
数码管显示
无线收发模块B
MCU—B机
温度、时钟
RS232转485物理层
上位机显示
Modbus协议
温度、时钟
电磁波
图2-1总体框图
⑴A机可以显示时钟和采集到的温度信息,可以向B机发送命令,使B机当前显示的是温度或时钟。
⑵B机可以按A机的命令显示时钟(与甲时钟需同步)或者温度信息,当B机接受了A机的命令时指示灯闪烁一次。
⑶B机的温度、时钟通过Modbus协议与主机通讯实现将温度值、时钟的时分信号读取显示于上位机串口调试软件上。
系统中主要有MCU、液晶显示、数码管显示、独立按键、温度采集、无线收发、RS232转485、上位机等单元。
其中MCU为各单元的控制中心,无线收发模块是实现A机和B机通信的终端;主机、数码管和液晶显示部分用来观察系统工作状态及无线通信的成功与否。
2.2MODBUS方案选择
在Modbus协议中,依数据在传输过程中的具体形式不同,分为两种模式:
ASCII模式和RTU模式,采用哪种模式由用户自己根据需要进行选择。
在改变数据传输模式时,同一Modbus网络中的所有设备的数据传输模式必须一致。
方案一、ASCII(AmericanStandardCodeforInformationInterchange),即美国信息交换标准代码。
在这种模式中,每个8比特的字节被转换为两个ASCII字符进行传送。
这种模式的主要优点是传送中每相邻的两字节之间允许的最大时间间隔较长,可达1秒。
代码系统:
十六进制,ASCII字符0…9,A…F,消息中的每个ASCII字符都是一个十六进制字符组成每个字节的位:
表2-1ASCII模式
起始位
地址代码
功能代码
数据位
LRC校验码
结束位
START
ADDRESS
FUNCTION
DATA
LRCCHECK
END
1字节
2字节
2字节
n字节
2字节
2字节
1CHAR
2CHARS
2CHARS
nCHARS
2CHARS
2CHARS
方案二、RTU(RemoteTerminalUnit),即远程终端单元。
当控制器设为在Modbus网络上以RTU(远程终端单元)模式通信,在消息中的每个8Bit字节包含两个4Bit的十六进制字符。
代码系统:
8位二进制,十六进制数0...9,A...F,消息中的每个8位域都是一个两个十六进制字符组成每个字节的位:
表2-2RTU模式
起始位
地址代码
功能代码
数据位
CRC校验码
结束位
START
ADDRESS
FUNCTION
DATA
CRCCHECK
END
T1-T2-T3-T4
8BITS
8BITS
n*8BITS
16BITS
T1-T2-T3-T4
通过比较可以看到,ASCII协议和RTU协议相比拥有开始和结束标记,因此在进行程序处理时能更加方便,而且由于传输的都是可见的ASCII字符,所以进行调试时就更加的直观,另外它的LRC校验也比较容易。
但是因为它传输的都是可见的ASCII字符,RTU传输的数据每一个字节ASCII都要用两个字节来传输,比如RTU传输一个十六进制数0xF9,ASCII就需要传输’F’’9’的ASCII码0x39和0x46两个字节,这样它的传输的效率就比较低。
综合各因素本次设计采用方案二即RTU模式。
2.3通讯接口选择
方案一、RS-232接口。
由于RS-232-C接口标准出现较早,难免有不足之处,主要有以下四点:
⑴ 接口的信号电平值较高,易损坏接口电路的芯片,又因为与TTL 电平不兼容故需使用电平转换电路方能与TTL电路连接。
⑵ 传输速率较低,在异步传输时,波特率为20Kbps。
⑶ 接口使用一根信号线和一根信号返回线而构成共地的传输形式, 这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。
⑷ 传输距离有限,最大传输距离标准值为50英尺,实际上也只能 用在50米左右。
方案二、RS-485接口。
针对RS-232-C的不足,于是就不断出现了一些新的接口标准,RS-485就是其中之一,它具有以下特点:
⑴ RS-485的电气特性:
逻辑“1”以两线间的电压差为+(2—6) V表示;逻辑“0”以两线间的电压差为-(2—6)V表示。
接口信号电平比RS-232-C降低了,就不易损坏接口电路的芯片, 且该电平与TTL电平兼容,可方便与TTL 电路连接。
⑵ RS-485的数据最高传输速率为10Mbps ⑶ RS-485接口是采用平衡驱动器和差分接收器的组合,抗共模干能力增强,即抗噪声干扰性好。
⑷ RS-485接口的最大传输距离标准值为4000英尺,实际上可达 3000米,另外RS-232-C接口在总线上只允许连接1个收发器, 即单站能力。
而RS-485接口在总线上是允许连接多达128个收发器(RS485芯片的驱动能力有限,因而在实际应用中其实只能驱动40多个收发器)。
即具有多站能力,这样用户可以利用单一的RS-485接口方便地建立起设备网络。
因RS-485接口具有良好的抗噪声干扰性,长的传输距离和多站能力等上述优点所以本次设计采用RS-485接口。
2.4无线模块的选择
方案一:
采用nRF24L01无线收发芯片组成智能家庭安全系统的自适应无线传感和控制网络,网络拓扑图如图所示。
nRF24L01是一款新型单片射频收发器件。
工作于2.4GHz~2。
5GHzISM频段。
内置频率合成器、功率放大器、晶体振荡器、调制器等功能模块,并融合了增强型ShockBurst技术,其中输出功率和通信频道通过程序进行配置。
nRF24L01功耗低,在以一6dBm的功率发射时,工作电流也只有9mA;接收时,工作电流只有12.3mA,多种低功率工模式(掉电模式和空闲模式)使节能设计更方便。
而且nRF24L01价格在20元左右,性价比高。
方案二:
CC1100是原Chipcon公司推出的一种低成本、真正单片的超高频无线收发器,为低功耗无线应用而设计。
整个应用电路的无线频率主要设定在315MHz、433MHz、868MHz和915MHz四个ISM(工业、科学和医学)频段上,也可以容易地设置为300MHz~348MHz、400MHz~464MHz和800MHz~928MHz的其它频率上。
芯片低电压(217V~316V)供电并且功耗较低(接收数据时为1516mA、214kbos、433MHz)、灵敏度高(112kbos下为110dBm),可编程控制的数据传输率最高可达500kbos。
CC1100适用于电子消费产品、住宅、建筑的自动控制、无线警报和安全系统等诸多无线应用领域。
方案三:
采用315m超外差无线收发模块。
模块优点:
成本低廉,频率稳定,接收灵敏度高。
模块缺点:
静态时会输出短暂针状干扰杂波,用于遥控没有问题,但用微处理器数传时要采取软件滤波;功耗较大,不适宜小容量电池供电应用。
综合各方面因素的考虑,我们选择方案一。
2.5本章小结
本章介绍了本课题设计总体思路基本原理和框图及其要实现的功能,同时对框架的各个主要模块提出了明确的设计方案,为下文的硬件、软件设计奠定基础。
第3章通讯系统实现的理论原理
3.1MODBUS-RTU通讯协议内容简介
3.1.1物理层
⑴通讯协议类型:
Modbus-RTU
⑵传输方式:
RS485半双工
⑶通讯地址:
理论上可能的设备地址(1~247)
⑷通讯波特率:
300BPS~38400BPS
⑸通讯介质:
双绞线
⑹通讯距离:
大于1000米
3.1.2链路层
⑴传输方式:
主从半双工方式。
首先,主机的信号寻址到一台唯一的终端设备软起动器(从机);然后,在相反的方向上终端设备(软起动器)发出的应答信号传输给主机。
协议只允许在主机和终端设备(软起动器)之间,而不允许独立的终端设备之间的数据交换。
这就不会使它们在初始化时占据通讯线路,而仅限于相应到达终端设备本机的查询信号。
⑵数据帧格式:
一个数据帧格式包括:
1位起始位,8位数据位,偶校验位,1位停止位。
⑶数据包格式:
表3-1数据包格式
地址
功能码
数据
校验码
8-Bits
8-Bits
N×8-Bits
16-Bits
⑷数据格式说明:
本协议详细定义了校验码、数据序列等,这些都是特定数据交换的必要内容。
当数据帧到达终端设备时,它通过一个简单的“端口”进入寻址到的设备,该设备去掉数据帧的“信
封”(数据头),读取数据。
如果没有错误,就执行数据所请求的任务。
然后,它将自己生成的数据加入到取得的“信封”中,把数据帧返回给发送者。
返回的响应数据中包含了以下内容:
终端从机地址(Address)、被执行了的命令(Function)、执行命令生成的被请求数据(Data)和一个校验码(Check)。
终端从机能对来自主机的错误通讯进行识别,并做出不同的错误响应。
3.1.3地址(Address)域
地址域在帧的开始部分,由8位组成,理论上可能的设备地址(1~247),这些位标明了用户指定的终端设备的地址,该设备将接收来自与之相连的主机数据。
每个终端设备的地址必须是唯一的,仅仅被寻址到的终端会响应,响应包含了该地址的查询应答。
当终端发送回一个响应,响应中的从机地址数据便告诉了主机哪台终端正与之进行通讯。
在本次设计中我们采用RS232转485这个接口实现通讯,而因为RS485芯片的驱动能力有限,在实际应用中其实只能驱动40多个从机而已。
3.1.4功能(Function)域
功能域代码告诉了被寻址到的终端执行何种功能操作。
下表列出了所有本协议比较常用到的功能码、它们的意义及它们的初始功能。
表3-2功能域
01
读取线圈状态
取得一组逻辑线圈的当前状态(ON/OFF)
02
读取输入状态
取得一组开关输入的当前状态(ON/OFF)
03
读取保持寄存器
在一个或多个保持寄存器中取得当前的二进制值
04
读取输入寄存器
在一个或多个输入寄存器中取得当前的二进制值
05
强置单线圈
强置一个逻辑线圈的通断状态
06
预置单寄存器
把具体二进值装入一个保持寄存器
07
读取异常状态
取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定
08
回送诊断校验
把诊断校验报文送从机,以对通信处理进行评鉴
09
编程(只用于484)
使主机模拟编程器作用,修改PC从机逻辑
10
控询(只用于484)
可使主机与一台正在执行长程序任务从机通信,探询该从机是否已完成其操作任务,仅在含有功能码9的报文发送后,本功能码才发送
11
读取事件计数
可使主机发出单询问,并随即判定操作是否成功,尤其是该命令或其他应答产生通信错误时
12
读取通信事件记录
可是主机检索每台从机的Modbus事务处理通信事件记录。
如果某项事务处理完成,记录会给出有关错误
13
编程(184/384484584)
可使主机模拟编程器功能修改PC从机逻辑
14
探询(184/384484584)
可使主机与正在执行任务的从机通信,定期控询该从机是否已完成其程序操作,仅在含有功能13的报文发送后,本功能码才得发送
15
强置多线圈
强置一串连续逻辑线圈的通断
3.1.5数据域
数据域包含了终端执行特定功能所需要的数据或者终端响应查询时采集到的数据。
这些数据的内容
可能是数值、参考地址或者极限值。
例如:
功能域码告诉终端读取一个寄存器,数据域则需要指明从哪
个寄存器开始读及读取多少个数据,内嵌的地址和数据依照类型和从机之间的不同能力而有所不同。
3.1.6错误校验域
该域允许主机和终端检查传输过程中的错误。
有时,由于电噪声和其它干扰,一组数据在从一个设
备传输到另一个设备时在线路上可能会发生一些改变,出错校验能够保证主机或者终端不去响应那些传
输过程中发生了改变的数据,这就提高了系统的安全性和效率,出错校验使用了16位循环冗余的方法。
3.1.7错误检测
循环冗余校验(CRC)域占用两个字节,包含了一个16位的二进制值。
CRC值由传送设备计算出来,然后附加到数据帧上,接收设备在接收数据时重新计算CRC值,然后与接收到的CRC域中的值进行比较,如果这两个值不相等,就发生了错误。
CRC运算时,首先将一个16位的寄存器预置为全1,然后连续把数据帧中的8位字节与该寄存器的当前值进行运算,仅仅每个字节的8个数据位参与生成CRC,起始位和终止位以及可能使用的奇偶位都不影响CRC运算。
在生成CRC值时,每个8位字节与寄存器中的内容进行异或,然后将结果向低位移位,高位则用“0”补充,最低位(LSB)移出并检测,如果是1,该寄存器就与一个预设的固定值进行一次异或运算,如果最低位为0,不作任何处理。
上述处理重复进行,直到执行完了8次移位操作,当最后一位(第8位)移完以后,下一个8位字节与寄存器的当前值进行异或运算,同样进行上述的另一个8次移位异或操作,当数据帧中的所有字节都作了处理,生成的最终值就是CRC值。
生成一个CRC值的流程为:
⑴预置一个16位寄存器为0FFFFH(全1),称之为CRC寄存器。
⑵把数据帧中的第一个8位字节与CRC寄存器中的低字节进行异或运算,结果存回CRC寄存器。
⑶将CRC寄存器向右移一位,最高位填以0,最低位移出并检测。
⑷如果最低位为0:
重复第三步(下一次移位);
如果最低位为1:
将CRC寄存器与一个预设的固定值(0A001H)进行异或运算。
⑸重复第3步和第4步直到8次移位,这样处理完了一个完整的八位。
⑹重复第2步到第5步来处理下一个八位,直到所有的字节处理结束。
⑺最终CRC寄存器的值就是CRC的值。
3.2RS-485接口简介
RS-485标准理想地用于多分支(multi-drop)应用和远程接口中。
它允许在一条数据线
上连接32个发送器和接收器,非常适合于多分支应用。
由于允许使用4000英尺长的电缆,
RS-485收发器可以使用一个宽(-7V~+12V)共模方式范围来调整零电位偏差。
因为RS-485
是一个差分接口,所以传输数据时完全可以抑制来自发送线的干扰。
图3-1RS485引脚说明
3.3NRF24L01无线模块内容简介
无线收发单元采用2.4GHz单片高速2Mbps无线收发芯片nRF24L01,nRF2401是挪威NoRDICSEMICONDUCTOR公司的产品,它把射频收发电路集成在一块芯片上,可以用MCU模拟SPI通信协议实现数字传输。
通过编程,nRF2401芯片的射频工作频率和输出信号的功率等参量可以非常方便地调节。
无线收发芯片nRF2401具有以下功能:
⑴125个工作频道,工作频道之间的转换时间小于200us
⑵无线通信数据具有地址检测和循环冗余检查。
⑶信号的调制方式为频移键控(FSK)
⑷最大数据传输速率1Mbps
⑸最大输出功率0dB
⑹独特的ShockBurstTM射频信号发射模式。
该模式降低平均发射功率,降低对微控制器数据传输速率的要求。
⑺接收灵敏度—93dBm。
⑻独特的DuoCeiverT模式。
该模式支持两个不同工作频道的信号同时接收。
⑼工作电压范围:
1.9V一3.6V;具有正常、旁路和掉电3种供电模式。
SPI接口:
SPI接口是标准的SPI接口,其最大的数据传输率为10Mbps。
大多数寄存器是可读的。
SPI指令设置:
SPI接口可能用到的指令在下面有所说明。
CSN为低后SPI接口等待执行指令。
每一条指令的执行都必须通过一次CSN由高到低的变化。
表3-3SPI指令格式
指令名称
指令格式
操作
R_REGISTER
000AAAAA
读配置寄存器。
AAAAA指出读操作的寄存器地址
W_REGISTER
001AAAAA
写配置寄存器。
AAAAA指出写操作的寄存器地址
只有在掉电模式和待机模式下可操作。
R_RX_PAYLOAD
01100001
读RX有效数据:
1-32字节。
读操作全部从字节0开始。
当读RX有效数据完成后,FIFO寄存器中有效数据被清除。
应用于接收模式下。
W_RX_PAYLOAD
10100000
写TX有效数据:
1-32字节。
写操作从字节0开始。
应用于发射模式下
FLUSH_TX
11100001
清除TXFIFO寄存器,应用于发射模式下。
FLUSH_RX
11100010
清除RXFIFO寄存器,应用于接收模式下在传输应答信号过程中不应执行此指令。
也就是说,若传输应答信号过程中执行此指令的话将使得应答信号不能被完整的传输。
REUSE_TX_PL
11100011
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MODBUS 协议 通讯 系统