MODUS通讯协议实例工业控制已从单机控制走向集中监控
- 格式:doc
- 大小:64.50 KB
- 文档页数:4
MODBUS 是MODICON公司最先倡导的一种软的通讯规约,经过大多数公司的实际应用,逐渐被认可,成为一种标准的通讯规约,只要按照这种规约进行数据通讯或传输,不同的系统就可以通讯。
目前,在RS232/RS485通讯过程中,更是广泛采用这种规约。
常用的MODBUS 通讯规约有两种,一种是MODBUS ASCII,一种是MODBUS RTU。
一般来说,通讯数据量少而且主要是文本的通讯则采用MODBUS ASCII规约,通讯数据数据量大而且是二进制数值时,多采用MODBUS RTU规约。
在实际的应用过程中,为了解决某一个特殊问题,人们喜欢自己修改MODBUS 规约来满足自己的需要(事实上,人们经常使用自己定义的规约来通讯,这样能解决问题,但不太规范)。
更为普通的用法是,少量修改规约,但将规约格式附在软件说明书一起,或直接放在帮助中,这样就方便了用户的通讯。
ModBus RTU通讯协议是Modicon公司的注册商标, 采用主从问答方式工作,是目前国际智能化仪表普遍采用的主流通讯协议之一[1]。
ModBus RTU通讯协议有两种传输模式,分为RTU模式和ASCII模式,其中RTU模式信息帧中的8位数据包括两个4位16进制字符,相对于ASCII模式,RTU模式表达相同的信息需要较少的位数,且在相同通讯速率下具有更大的数据流量。
因此通常情况下,一般工业智能仪器仪表都是采用RTU模式。
江阴长江斯菲尔公司生产的电力仪表大都采用MODBUS RTU通讯协议,允许一台主机和多台从机之间进行数据通信,在其生产的CD194E系列仪表通讯系统中,主机是微机(PC、工控机或PLC),从机是CD194E型仪表。
在该分散通讯系统中,允许总线挂接仪表多达128块,通讯距离可达到1千200米。
通讯方式采用主机请求,从机应答,即:主机提出命令请求,从机接收数据后作数据分析,如果数据满足通讯规约,从机作数据响应。
使用CD194E型网络电力仪表时,首先要进行通讯参数的设置:通过仪表上的编程键盘对仪表进行通讯参数设置:(1)仪表地址:设置通讯网络中从机(仪表)地址号,可以设置为1~247。
基于Modbus通讯协议的DCS与第三方控制系统通讯的实现郭旭周立仁(华能南通电厂江苏南通226003)摘要:本文介绍了华能玉环电厂#1机组(国内首台百万超超临界燃煤发电机组)DCS控制系统与第三方控制系统(DEH、MEH、等离子点火),实现在基于MO DBUS 通讯协议下的通信连接。
并结合具体设计方案及实施过程,对通信模件组态的点表信息及参数设定等方面进行了介绍。
关键词:DCS通讯MODBUS;第三方控制系统Abstract:The paper described communication, based on the Modbus protocol, b etween the DCS and third part control system such as DEH、MEH and plasma ignition control in Huaneng Yuhuan power plant, which is the first USC coal-fired 1000MW power plant. The system design, control system implementation, data list configuration and parameters setting of the communication modules o f each system is described detailedly in this paper.Key words:DCS Communication;MODBUS;The third part control system1 简介华能玉环电厂#1机组为国内首台1000MW超超临界燃煤发电机组,其DCS系统采用西屋公司OVATION控制系统,而机组的其他控制系统类型较多且分散独立,如数字电液控制系统(DEH)采用西门子公司刚推出的最新型的SPPA-T3000控制系统,MEH采用三菱重工DIASYS系列的最新 DIASYS Netmation控制系统,等离子点火采用SIEMENS S7系列PLC控制,远程金属壁温I/O 采用无锡贝尔I DAS分散式智能数据采集网络,吹灰采用Modicon quantum系列PLC控制等。
M2IGS工业自动化系统人机界面开发工具ModbusBridge通信机驱动使用案例Ver 2009.07.241 组态软件M2IGS与后台通信基本概念:此案例是利用组态软件M2IGS作为前台获取后台(由MODBUS协议提供链接)数据的典型过程。
组态软件:又称为监控组态软件,译自英文SCADA,即Supervision,Control and Data Acquisition,组态软件的应用领域很广,它可以应用于电力系统、给水系统、石油、化工等领域的数据采集与监视控制以及过程控制等诸多领域。
在电力系统以及电气化铁道上又称为远动系统。
组态软件是指一些数据采集与过程控制的专用软件,它们是在自动控制系统监控层一级的软件平台和开发环境,使用灵活的组态方式,为用户提供快速构建工业控制系统监控功能的、通用层次的软件工具。
MODBUS通讯协议:Modbus协议是应用于电子控制器上的一种通用语言,通过此协议,控制器互相之间、控制器经由网络(例如以太网)和其他设备之间可以通讯。
它已经成为一通用的工业标准。
有了它,不同厂商生产地控制设备可以连成工业网络,进行集中监控。
此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。
它描述了一控制器请求访问其他设备的过程,如果回应来自设备的请求,以及怎样侦测错误并记录。
它制定了消息域格局和内容的公共格式。
通信机: MB系列(我公司产品)Modus Bridge 是完成Modbus Slave集中管理的的通讯转换与接入装置,通过网络接口可以完成Modbus TCP RTU与串口Modbus Serial RTU 和 Modbus Serial ASCII 的通宵互交,也可以完成串口之间的的Modbus Serial RTU 和 Modbus Serial ASCII 的通信互交。
MB系列Modus Bridge 产品是专门为电磁环境恶劣的工业现场应用而设计,尤其适合于为电力系统、电气化铁路和军事工程构建高可靠性的自动化通信系统,也完全满足高速公路、城市交通、银行系统、工矿企业等多种领域。
j2mod 的案例j2mod是一个Java实现的Modbus协议库,用于在计算机网络中实现Modbus通信。
它提供了Modbus协议的主站和从站实现,以及与Modbus设备进行通信的API接口。
j2mod具有灵活、易用、可扩展的特点,被广泛应用于工业自动化、能源管理、楼宇自控等领域。
在以下的案例中,我将介绍j2mod在不同场景下的应用。
1. 工业自动化控制系统:以一个工业自动化控制系统为例,该系统包含多个从站设备,如温度传感器、压力传感器、阀门控制器等。
通过j2mod库,主站可以与这些从站设备建立连接,并实时获取温度、压力等数据。
主站可以通过j2mod库发送指令控制从站设备,如打开或关闭阀门,调节温度等。
2. 能源管理系统:j2mod可以应用于能源管理系统中,用于实时监测和控制能源设备,如发电机、变压器、电表等。
主站可以通过j2mod库与这些设备进行通信,获取电能消耗数据、电压数据等。
主站可以根据这些数据进行能源管理,如优化能源分配、降低能耗等。
3. 楼宇自控系统:在楼宇自控系统中,j2mod可以用于实现主站与从站设备之间的通信。
主站可以通过j2mod库与从站设备进行连接,实时获取温度、湿度、照明等数据。
主站可以根据这些数据进行楼宇自控,如调节空调温度、控制照明亮度等。
4. 数据采集系统:j2mod可以用于实现数据采集系统,主站可以通过j2mod库与多个从站设备进行连接,实时获取各个设备的数据。
主站可以将这些数据保存到数据库中,供后续分析和处理。
5. 远程监控系统:j2mod可以应用于远程监控系统中,主站可以通过j2mod库与远程设备进行通信。
主站可以实时获取设备的状态和数据,并对设备进行控制。
6. 智能家居系统:在智能家居系统中,j2mod可以用于实现主站与从站设备之间的通信。
主站可以通过j2mod库与从站设备进行连接,实时获取温度、湿度、照明等数据。
主站可以根据这些数据进行智能家居控制,如自动调节室内温度、控制照明等。
LB_■-■IT技术论坛TECHNOLOGY AND INFORMATIONDCS与PLC通信中M o dbus通信协议的应用探究李进保甘肃省酒泉市玉门油田分公司信息中心甘肃酒泉735000摘要Modbus属于能够同时支持实时控制、分布式控制的现场总线协议,优点颇多,应用广泛,逐渐成为工业标准,于各种网络体系结构中发挥着通讯的作用。
本文围绕DCS与PLC通讯中Modbus通信协议的应用展开研究。
关键词DCS;PLC;Modbus通信协议;应用以往单机控制的工业控制,逐渐发展为集中操作、分散控制。
而在网络时代下,更是便利了数据采集、工业控制,不仅性能显著,且成本更低。
具体应用中,各厂家需要将控制系统的数据共享,某集成系统难以将控制需要满足时也应当进行系统的额外增加,互联2种不同系统。
因此,本文立足于企业未来生产要求及成本降低方面,甄选不同系统共同支持的通讯集成协议,以期妥善解决上述问题。
1Modbus通信作为整个系统基础的Modbus,是外部数据的获取手段。
要想确保通信的正常,最关键的便是Modbus协议栈的实现。
Modbus协议有着详细的标准文档,属于通用工业标准。
根据Modbus协议栈,将一个Modbus客户端与主站分别实现。
两者有着类似的功能。
设定好的动作通过客户端/主站朝着Modbus命令转换,并朝着服务器/从站周期性地发送请求闪。
而在命令读取时,会以动作设定的类型为根据,以通信通道读数为目标转换返回的寄存器值;而在写命令时,则以动作设定类型为依据,以寄存器值为目标转换通道值,并写入服务器/主站。
Modbus协议实现了主设备查询格式的构建:设备(或广播)地址、功能代码、需传输的数据、错误检测域。
首先为设备(或广播)地址,提供从机地址是其主要责任,在以地址为根据的前提下,从机可对是否接收请求进行判断,用户应当妥善设置每台从机地址;其次,功能代码,表示指引从机将一系列动作完成,如功能代码3即是读取从机保持寄存器并返回的内容,从机寄存器地址及待读取的寄存器个数接应当包含在数据区内容内;最后,错误检测域,负责检验信息是否正确传输,依托循环冗长检测方法,于消息最末处附加CRC域,首先完成低字节的添加,随后添加高字节。
《工业控制计算机》2018年第31卷第5期在通信技术和计算机技术蓬勃发展的今天,各个通信台站都拥有了大量的通信设备,这些设备分布于不同的房间、大楼等。
传统的设备管理方法需要管理人员在不同地点、不同设备之间往返检查设备状态和设置参数等,这个过程耗费大量的人力、物力,严重影响效率。
随着通信设备的更新换代,在现有通信站点存在着老旧设备同时使用,某些核心站点换装最新型的通信设备等,新旧设备之间如何统一管理也是一个亟需解决的问题。
部队现代化、信息化的建设要求需要我们紧跟时代步伐,对于通信台站的具体要求是将分布在不同地点和不同台站之间的不同设备进行统一的高效的信息化管理。
本文研究现在主流的成熟的设备网管系统,提出基于Modbus和SNMP协议的网络管理系统来对各个通信台站的通信设备进行管理。
1网管系统的设备信息采集现有通信台站的设备非常多样化,大部分通信设备使用串口,少部分较新型设备使用的是以太网口,要将全部设备纳入网管系统的统一管理时,需要将不同接口设备分类处理,不同通信设备使用不用的通信协议。
1.1串口通信设备信息采集和Modbus协议对串口通信设备来说,不同厂家的通信设备采用的串行接口也是不一样的,大部分使用的有RS232、RS422、RS485等主流串行通信接口,三种通信接口的比较如表1所示[1]。
表1常用的通信接口比较由表1可见,不同通信接口相差较大,为了连接不同接口的通信设备,需要通过串口服务器将通信设备与网管服务器相连。
现在主流的串口服务器可以兼容RS232、RS422、RS485等串行接口。
单个串口服务器可以连接8路、16路等多路串口设备。
通过串口服务器的配置软件可以设置串口服务器的IP地址,可以对串口服务器的多路串口进行串口类型、工作模式、波特率等设置,并将串口映射成网络端口,网管服务器通过网口直接与串口服务器连接。
另外,网管服务器通过串口服务器与通信设备连接之后,还需要使用通信协议进行信息的交互。
作为工控人,Mod bus通讯协议想必都不陌生,Mod bus通讯协议可以说是工业自动化领域应用最为广泛的通讯协议,因为他的开放性、可扩充性和标准化使他成为通用工业标准。
1979年施耐德电气制定了一个用于工业现场的总线协议Mod bus协议,现在工业中使用RS 485通信场合很多都采用Mod bus协议,所以今天我们来了解下Mod bus通信协议。
Mod bus是Mod icon公司为其PIC通讯而开发的一种通讯协议。
也是全球第一个真正用于工业现场的总线协议。
Mod bus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。
其系统结构既包括硬件、亦包括软件。
它可应用于各种数据采集和过程监控。
Mod bus特点:(1)标准、开放,用户可以免费、放心地使用Mod bus协议,不需要交纳许可证费,也不会侵犯知识产权。
(2)Modbus可以支持多种电气接口,如RS-232、RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线等。
(3)Modbus的帧格式简单、紧凑,通俗易懂。
用户使用容易,厂商开发简单。
从1979年问世至今,已经成为工业通讯领域的业界标准,最初的Mod bus仅支持串口,分为Rtu和ACSII两种信号传输模式(一般基于RS 485串口通信媒介)。
而随着时代的变迁,Mod bus新增了TCP版本,可以通过以太网进行通讯,此外Mod bus还有一个Mod icon专用的Mod bus Plus版本。
Mod bus是一种单主站的主/从通讯模式,由1个子站和多个从站组成,允许多个设备连接在同一个网络上进行通讯。
Mod bus三种通信协议介绍:Mod bus TCP,以太网,RJ 45。
Mod bus RTU/ASCII,异步串行通讯,RS 232/485/422、光纤、无线Modbus Plus,高速令牌传递网络,同轴电缆或光缆。
其中Modbus RTU、ModbusTCP最为常用。
MODBUS协议详细讲解嘿,伙计们!今天咱们要聊的,是工业界那个神秘的“魔法棒”——MODBUS协议。
别小看这根棒子,它可是连接各种设备、实现数据通信的超级英雄哦!咱们得搞清楚什么是MODBUS协议。
简单来说,它就像个神奇的咒语,能让各种工业设备“说话”和“跳舞”。
想象一下,当你的设备需要告诉另一个设备:“嘿,我这边温度有点高,快帮我降降温!”而这个“魔法咒语”就是MODBUS协议。
那么,这个“魔法咒语”是怎么工作的呢?其实很简单。
想象一下你和你的朋友之间用文字聊天。
你们通过文字来传递信息,比如:“我今天吃了什么?”或者“天气怎么样?”这就是MODBUS协议的工作方式。
它就像是一个魔法棒,让不同的设备能够相互理解对方的需求,然后做出相应的动作。
举个例子,想象一下你的工厂里有很多机器,它们各自忙碌着。
这些机器就像是一个个小小的“魔法师”,它们通过MODBUS协议来交流信息。
比如,一个机器说:“我这边的零件库存不多了,快给我补充一些。
”而另一个机器回应:“好的,我这就去给你补充。
”这就是MODBUS协议让不同设备之间能够顺畅沟通的例子。
那么,这个“魔法棒”有什么特点呢?它的特点是简单易用、功能强大。
无论是小型的传感器还是大型的自动化系统,都能通过MODBUS协议来实现数据的传输和交换。
而且,它的兼容性也很好,可以在不同的操作系统和平台上使用。
但是,虽然MODBUS协议很神奇,但也有一些“小麻烦”。
比如说,有时候设备之间的通信可能会出现问题,这时候就需要我们去调试和优化。
但是,只要我们有耐心和细心,就一定能找到解决问题的方法。
总的来说,MODBUS协议就像一个神奇的魔法棒,让不同的设备能够相互理解和沟通。
虽然它会有一些小麻烦,但只要我们用心去学习和掌握,就能让它发挥出最大的作用。
让我们一起来探索这个神奇的“魔法棒”,让它在我们的工业领域中大放异彩吧!。
工业通信中的Modbus协议应用Modbus协议是一种在工业通信中广泛应用的通信协议。
它是一种简单、可靠且易于实施的协议,适用于连接不同类型设备、传输数据以及监控和控制工业系统。
本文将介绍Modbus协议的应用场景、工作原理以及如何实施。
一、Modbus协议简介Modbus协议是一种串行通信协议,最初由Modicon(现在的施耐德电气公司)于1979年开发。
它采用了主从结构,可以连接多个设备,包括传感器、执行器和控制器等。
Modbus协议基于简单、轻量级的通信机制,可以在不同的通信媒介上工作,例如串行线路(如RS-232、RS-485)和以太网。
二、Modbus协议的应用场景Modbus协议广泛应用于工业自动化领域,例如楼宇自动化、工厂自动化和电力监控等。
以下是一些常见的应用场景:1. 监控和控制:Modbus协议可以用于监测和控制设备,例如温度传感器、压力感应器和开关等。
通过使用Modbus协议,可以实现对设备状态的实时监控和对设备进行远程控制。
2. 数据采集和记录:Modbus协议可以用于从不同的设备中读取数据,并进行采集和记录。
这些数据可以用于分析、优化和预测设备性能,进而提高工业系统的效率和可靠性。
3. 系统集成:由于Modbus协议的广泛应用和易于实施的特点,它常被用于不同类型设备之间的数据交换和系统集成。
通过使用Modbus 协议,不同供应商的设备可以方便地进行通信和数据共享。
三、Modbus协议的工作原理Modbus协议基于主从结构,包括一个主站和多个从站。
主站负责发起通信请求,而从站则负责响应这些请求并执行相应的操作。
主站通过发送Modbus命令来请求数据或发送控制指令。
这些命令包括读取保持寄存器、读取输入寄存器、写入单个或多个保持寄存器等。
从站接收到命令后,根据命令的类型执行相应的操作,并将结果返回给主站。
Modbus协议采用了简单、紧凑的数据结构,使用16位寄存器来存储和传输数据。
修改稿收到日期:2009-02-12。
第一作者蒲靖荣,男,1973年生,1997年毕业于浙江大学电机系,获学士学位,工程师;主要从事自动化仪表、系统的建设、使用、维护和研究方面的工作。
基于网络和M o d b u s 协议的远程监控系统R e m o t e Mo n i t o r i n g a n dC o n t r o l S y s t e m B a s e d o n N e t w o r ka n dMo d b u s P r o t o c o l蒲靖荣杜开勋朱占清闫纪峰(吐哈油田销售事业部,新疆鄯善 838202)摘 要:当今的工业控制已从集中监控、集散控制进入网络时代,如何实现各种不同设备之间的通信已成为系统的关键所在。
对吐哈油田销售事业部远程监控系统进行了研究,重点分析了系统的通信结构、通信协议和软件的编程组态,并提出了利用已有的网络和M o d b u s 协议实现不同系统间远程实时监控的思路。
基于网络和M o d b u s 协议的远程监控系统为现有系统的互联提供了借鉴,具有广阔的推广应用前景。
关键词:M o d b u s 协议 R S -422串口设备网关流量计算机可编程控制器组态中图分类号:T P 273 文献标志码:AA b s t r a c t :A t p r e s e n t ,i n d u s t r i a l c o n t r o l h a s p a c e d f r o mc e n t r a l i z e d c o n t r o l a n d d i s t r i b u t e d c o n t r o l i n t o n e t w o r k e r a .I m p l e m e n t i n g c o m m u n i c a -t i o na m o n g v a r i o u s d i f f e r e n t d e v i c e s i s t h e c r i t i c a l i s s u e i n f o r m i n g a s y s t e m .T h e r e m o t e m o n i t o r i n g a n d c o n t r o l s y s t e mi n M a r k e t i n g D e p a r t m e n t o f T u h a O i l f i e l d i s r e s e a r c h e d ,a n d t h e c o m m u n i c a t i o n s t r u c t u r e ,c o m m u n i c a t i o n p r o t o c o l s a n d s o f t w a r e p r o g r a m m i n g a n d c o n f i g u r a t i o n a r e a n a -l y z e d e m p h a t i c a l l y .T h e c o n c e p t o f a d o p t i n g e x i s t i n g n e t w o r k a n d M o d b u s p r o t o c o l t o i m p l e m e n t r e a l -t i m e r e m o t e m o n i t o r i n g a m o n g d i f f e r e n t s y s -t e m s a r e p r o p o s e d .T h e r e m o t e m o n i t o r i n g a n d c o n t r o l s y s t e mb a s e d o n n e t w o r k a n d M o d b u s p r o t o c o l i s a g o o d r e f e r e n c e f o r i n t e r c o n n e c t i n g e x -i s t i n g s y s t e m s a n d p o s s e s s e s w i d e a p p l i c a t i v e p r o s p e c t s .K e y w o r d s :M o d b u s p r o t o c o l R S -422U n i v e r s a l s e r i a l d e v i c e g a t e w a y F l o wc o m p u t e r P L C C o n f i g u r a t i o n0 引言随着石油工业信息化的快速发展,许多油田开始建设统一的远程生产数据监控与管理系统。
Modbus通讯协议之阳早格格创做图片:图片:图片:Modbus协议最初由Modicon公司启垦出去,正在1979年终该公司成为施耐德自动化(Schneider Automation)部分的一部分,目前Modbus已经是工业范畴寰球最流通的协议.此协议支援保守的RS-232、RS-422、RS-485战以太网设备.许多工业设备,包罗PLC,DCS,智能仪容等皆正在使用Modbus协议动做他们之间的通讯尺度.有了它,分歧厂商死产的统造设备不妨连成工业搜集,举止集结监控. 当正在搜集上通疑时,Modbus协议决断了每个统造器须要知讲它们的设备天面,辨别按天面收去的消息,决断要爆收何种止径.如果需要回应,统造器将死成应问并使用Modbus协议收支给询问圆. Modbus协议包罗ASCII、RTU、TCP等,并不确定物理层.此协议定义了统造器不妨认识战使用的消息结构,而不管它们是通过何种搜集举止通疑的.尺度的Modicon统造器使用RS232C真止串止的Modbus.Modbus的ASCII、RTU协议确定了消息、数据的结构、下令战便问的办法,数据通讯采与Maser/Slave办法,Master端收出数据哀供消息,Slave端接支到粗确消息后便不妨收支数据到Master端以赞同哀供;Master端也不妨间接收消息建改Slave端的数据,真止单背读写. Modbus协议需要对付数据举止校验,串止协议中除有奇奇校验中,ASCII模式采与LRC校验,RTU模式采与16位CRC校验,然而TCP模式不特殊确定校验,果为TCP协议是一个里背对接的稳当协议.其余,Modbus采与主从办法定时支收数据,正在本质使用中如果某Slave站面断启后(如障碍大概关机),Master端不妨诊疗出去,而当障碍建复后,搜集又可自动接通.果此,Modbus协议的稳当性较佳. 底下尔去简朴的给大家介绍一下,对付于Modbus的ASCII、RTU战TCP协议去道,其中TCP战RTU协议非常类似,咱们只消把RTU协议的二个字节的校验码去掉,而后正在RTU协议的启初加上5个0战一个6并通过TCP/IP搜集协议收支进去即可.所以正在那里尔仅介绍一下Modbus的ASCII战RTU协议. 下表是ASCII协媾战RTU协议举止的比较:通过比较不妨瞅到,ASCII协媾战RTU协议相比拥有启初战中断标记表记标帜,果此正在举止步调处理时能越收便当,而且由于传输的皆是可睹的ASCII字符,所以举止调试时便越收的曲瞅,其余它的LRC校验也比较简单.然而是果为它传输的皆是可睹的ASCII字符,RTU传输的数据每一个字节ASCII皆要用二个字节去传输,比圆RTU传输一个十六进造数0xF9,ASCII 便需要传输’F’’9’的ASCII码0x39战0x46二个字节,那样它的传输的效用便比较矮.所以普遍去道,如果所需要传输的数据量较小不妨思量使用ASCII协议,如果所需传输的数据量比较大,最佳能使用RTU协议.底下对付二种协议的校验举止一下介绍.1、LRC校验LRC域是一个包罗一个8位二进造值的字节.LRC值由传输设备去估计并搁到消息帧中,接支设备正在接支消息的历程中估计LRC,并将它战接支到消息中LRC域中的值比较,如果二值不等,证明有过失.LRC校验比较简朴,它正在ASCII协议中使用,检测了消息域中除启初的冒号及中断的回车换止号中的真质.它只是是把每一个需要传输的数据按字节叠加后与反加1即可.底下是它的VC代码: BYTE GetCheckCode(const char *pSendBuf, int nEnd)//赢得校验码 { BYTE byLrc = 0; char pBuf[4]; intnData = 0; for(i=1; i<end; i+=2) //i初初为1,躲启“启初标记表记标帜”冒号 { //每二个需要收支的ASCII码转移为一个十六进造数 pBuf [0] = pSendBuf ; pBuf [1] = pSendBuf [i+1]; pBuf [2] = '\0';sscanf(pBuf,"%x",& nData); byLrc += nData; } byLrc = ~ byLrc; byLrc ++; return byLrc; } 2、CRC校验 CRC域是二个字节,包罗一16位的二进造值.它由传输设备估计后加进到消息中.接支设备沉新估计支到消息的CRC,并与接支到的CRC域中的值比较,如果二值分歧,则有误.CRC是先调进一值是齐“1”的16位寄存器,而后调用一历程将消息中连绝的8位字节各目前寄存器中的值举止处理.仅每个字符中的8Bit数据对付CRC灵验,起初位战停止位以及奇奇校验位均无效.CRC爆收历程中,每个8位字符皆单独战寄存器真质相大概(OR),截止背最矮灵验位目标移动,最下灵验位以0弥补.LSB被提与出去检测,如果LSB为1,寄存器单独战预置的值大概一下,如果LSB为0,则不举止.所有历程要沉复8次.正在终尾一位(第8位)完毕后,下一个8位字节又单独战寄存器的目前值相大概.最后寄存器中的值,是消息中所有的字节皆真止之后的CRC值.CRC增加到消息中时,矮字节先加进,而后下字节.底下是它的VC代码: WORDGetCheckCode(const char * pSendBuf, int nEnd)//赢得校验码 { WORD wCrc = WORD(0xFFFF);for(int i=0; i<nEnd; i++){wCrc ^=WORD(BYTE(pSendBuf));for(int j=0; j<8; j++)2、{if(wCrc & 1){3、wCrc >>= 1; wCrc ^= 0xA001; }else{wCrc >>= 1; }}}return wCrc;}对付于一条RTU协议的下令不妨简朴的通过以下的步调转移为ASCII协议的下令:1、把下令的CRC校验去掉,而且估计出LRC校验与代.2、把死成的下令串的每一个字节转移成对付应的二个字节的ASCII码,比圆0x03转移成0x30,0x33(0的ASCII码战3的ASCII码).3、正在下令的启头加上起初标记表记标帜“:”,它的ASCII码为0x3A.4、正在下令的尾部加上中断标记表记标帜CR,LF(0xD,0xA),此处的CR,LF表示回车战换止的ASCII 码.所以以下咱们仅介绍RTU协议即可,对付应的ASCII协议不妨使用以上的步调去死成.下表是Modbus支援的功能码:正在那些功能码中较少使用的是1、2、3、4、5、6号功能码,使用它们即可真止对付下位机的数字量战模拟量的读写支配. 1、读可读写数字量寄存器(线圈状态):估计机收支下令:[设备天面] [下令号01] [起初寄存器天面下8位] [矮8位] [读与的寄存器数下8位] [矮8位] [CRC校验的矮8位] [CRC校验的下8位] 例:[11][01][00][13][00][25][CRC矮][CRC下] 意思如下:<1>设备天面:正在一个485总线上不妨挂接多个设备,此处的设备天面表示念战哪一个设备通讯.例子中为念战17号(十进造的17是十六进造的11)通讯. <2>下令号01:读与数字量的下令号牢固为01.<3>起初天面下8位、矮8位:表示念读与的启关量的起初天面(起初天面为0).比圆例子中的起初天面为19.<4>寄存器数下8位、矮8位:表示从起初天面启初读几个启关量.例子中为37个启关量.<5>CRC校验:是从启头背去校验到此之前.正在此协议的终尾再做介绍.此处需要注意,CRC校验正在下令中的下矮字节的程序战其余的差同. 设备赞同:[设备天面] [下令号01] [返回的字节个数][数据1][数据2]...[数据n][CRC校验的矮8位] [CRC校验的下8位] 例:[11][01][05][CD][6B][B2][0E][1B][CRC矮][CRC下] 意思如下:<1>设备天面战下令号战上头的相共.<2>返回的字节个数:表示数据的字节个数,也便是数据1,2...n中的n的值.<3>数据1...n:由于每一个数据是一个8位的数,所以每一个数据表示8个启关量的值,每一位为0表示对付应的启关断启,为1表示关合.比圆例子中,表示20号(索引号为19)启关关合,21号断启,22关合,23关合,24断启,25断启,26关合,27关合...如果询问的启关量不是8的整倍数,那么终尾一个字节的下位部分奇尔思,置为0.<4>CRC校验共上. 2、读只可读数字量寄存器(输进状态):战读与线圈状态类似,不过第二个字节的下令号不再是1而是2. 3、写数字量(线圈状态):估计机收支下令:[设备天面] [下令号05] [需下置的寄存器天面下8位] [矮8位] [下置的数据下8位] [矮8位] [CRC校验的矮8位] [CRC校验的下8位] 例:[11][05][00][AC][FF][00][CRC矮][CRC下] 意思如下:<1>设备天面战上头的相共.<2>下令号:写数字量的下令号牢固为05.<3>需下置的寄存器天面下8位,矮8位:标明白需要下置的启关的天面.<4>下置的数据下8位,矮8位:标明需要下置的启关量的状态.例子中为把该启关关合.注意,此处只不妨是[FF][00]表示关合[00][00]表示断启,其余数值非法.<5>注意此下令一条只可下置一个启关量的状态. 设备赞同:如果乐成把估计机收支的下令本样返回,可则不赞同. 4、读可读写模拟量寄存器(脆持寄存器):估计机收支下令:[设备天面] [下令号03] [起初寄存器天面下8位] [矮8位] [读与的寄存器数下8位] [矮8位] [CRC校验的矮8位] [CRC 校验的下8位] 例:[11][03][00][6B][00][03][CRC矮][CRC下] 意思如下:<1>设备天面战上头的相共.<2>下令号:读模拟量的下令号牢固为03.<3>起初天面下8位、矮8位:表示念读与的模拟量的起初天面(起初天面为0).比圆例子中的起初天面为107.<4>寄存器数下8位、矮8位:表示从起初天面启初读几个模拟量.例子中为3个模拟量.注意,正在返回的疑息中一个模拟量需要返回二个字节. 设备赞同:[设备天面] [下令号03] [返回的字节个数][数据1][数据2]...[数据n][CRC校验的矮8位] [CRC校验的下8位] 例:[11][03][06][02][2B][00][00][00][64][CRC矮][CRC下] 意思如下:<1>设备天面战下令号战上头的相共.<2>返回的字节个数:表示数据的字节个数,也便是数据1,2...n中的n的值.例子中返回了3个模拟量的数据,果为一个模拟量需要2个字节所以共6个字节.<3>数据1...n:其中[数据1][数据2]分别是第1个模拟量的下8位战矮8位,[数据3][数据4]是第2个模拟量的下8位战矮8位,以此类推.例子中返回的值分别是555,0,100.<4>CRC校验共上. 5、读只可读模拟量寄存器(输进寄存器):战读与死存寄存器类似,不过第二个字节的下令号不再是2而是4. 6、写单个模拟量寄存器(脆持寄存器):估计机收支下令:[设备天面] [下令号06] [需下置的寄存器天面下8位] [矮8位] [下置的数据下8位] [矮8位] [CRC校验的矮8位] [CRC校验的下8位] 例:[11][06][00][01][00][03][CRC矮][CRC下] 意思如下:<1>设备天面战上头的相共.<2>下令号:写模拟量的下令号牢固为06.<3>需下置的寄存器天面下8位,矮8位:标明白需要下置的模拟量寄存器的天面.<4>下置的数据下8位,矮8位:标明需要下置的模拟量数据.比圆例子中便把1号寄存器的值设为3.<5>注意此下令一条mym级别: 总版主粗华: 41收帖: 3956威视: 9957 面款项: 9431 Gold孝敬值: 601 面伙伴圈: ifix技能群正在线时间:539(小时)备案时间:2005-02-02终尾登录:2008-01-25 Modbus通讯协议MODBUS通讯协议简介工业统造已从单机统造走背集结监控、集集统造,此刻已加进搜集时代,工业统造器连网也为搜集管造提供了便当.Modbus便是工业统造器的搜集协议中的一种.一、概括Modbus 协议是应用于电子统造器上的一种通用谈话.通过此协议,统造器相互之间、统造器经由搜集(比圆以太网)战其余设备之间不妨通疑.它已经成为一通用功业尺度.有了它,分歧厂商死产的统造设备不妨连成工业搜集,举止集结监控.此协议定义了一个统造器能认识使用的消息结构,而不管它们是通过何种搜集举止通疑的.它形貌了一统造器哀供考察其余设备的历程,如果回应去自其余设备的哀供,以及何如侦测过失并记录.它造定了消息域格局战真质的大众要收.当正在一Modbus搜集上通疑时,此协议决断了每个统造器须要知讲它们的设备天面,辨别按天面收去的消息,决断要爆收何种止径.如果需要回应,统造器将死成反馈疑息并用Modbus协议收出.正在其余搜集上,包罗了Modbus协议的消息变换为正在此搜集上使用的帧大概包结构.那种变换也扩展了根据简曲的搜集办理节天面、路由路径及过失检测的要收.1、正在Modbus搜集上转输尺度的Modbus心是使用一RS-232C兼容串止接心,它定义了对接心的针足、电缆、旗号位、传输波特率、奇奇校验.统造器能间接大概经由Modem组网.统造器通疑使用主—只可下置一个模拟量的状态. 设备赞同:如果乐成把估计机收支的下令本样返回,可则不赞同.从技能,即仅一设备(主设备)能初初化传输(查询).其余设备(从设备)根据主设备查询提供的数据做出相映反应.典型的主设备:主机战可编程仪容.典型的从设备:可编程统造器.主设备可单独战从设备通疑,也能以广播办法战所有从设备通疑.如果单独通疑,从设备返回一消息动做回应,如果是以广播办法查询的,则不做所有回应.Modbus协议建坐了主设备查询的要收:设备(大概广播)天面、功能代码、所有要收支的数据、一过失检测域.从设备回应消息也由Modbus协议形成,包罗确认要止径的域、所有要返回的数据、战一过失检测域.如果正在消息接支历程中爆收一过失,大概从设备不克不迭真止其下令,从设备将建坐一过失消息并把它动做回应收支进去.2、正在其余典型搜集上转输正在其余搜集上,统造器使用对付等技能通疑,故所有统造皆能初初战其余统造器的通疑.那样正在单独的通疑历程中,统造器既可动做主设备也可动做从设备.提供的多个里里通讲可允许共时爆收的传输进程.正在消息位,Modbus协议仍提供了主—从准则,纵然搜集通疑要收是“对付等”.如果一统造器收支一消息,它不过动做主设备,并憧憬从从设备得到回应.共样,当统造器接支到一消息,它将建坐一从设备回应要收并返回给收支的统造器.Modbus是Modicon 公司为其PLC与主机之间的通讯而收明的串止通讯协议.其物理层采与RS232、485等同步串止尺度.由于其启搁性而被洪量的PLC及RTU厂家采与.Modbus通讯办法采与主从办法的查询-相映体造,惟有主站收出查询时,从站才搞给出赞同,从站不克不迭主动收支数据.主站不妨背某一个从站收出查询,也不妨背所有从站广播疑息.从站只赞同单独收给它的查询,而不赞同广播消息.Modbus的串止心的通讯参数(如波特率、奇奇校验)可由用户采用.二、MODBUS协议传递办法MODBUS通讯协议有二种传递办法:RTU办法战ASCII办法,二种办法如下所示:名目 RTU办法 ASCII办法字节少度 8 BITS 7 BITS奇奇校验 1 BIT OR 0 BIT 1 BIT OR 0 BIT字节中止 1 BIT OR 2 BITS 1 BIT OR 2 BITS启初标记表记标帜不要 :(冒号)中断标记表记标帜不要 CR,LF数据隔断 < 24 BIT < 1S堕落考验办法 CRC-16 LRC统造器能树坐为二种传输模式(ASCII大概RTU)中的所有一种正在尺度的Modbus搜集通疑.用户采用念要的模式,包罗串心通疑参数(波特率、校验办法等),正在摆设每个统造器的时间,正在一个Modbus搜集上的所有设备皆必须采用相共的传输模式战串心参数.三、Modbus消息帧二种传输模式中(ASCII大概RTU),传输设备以将Modbus消息转为有起面战终面的帧,那便允许接支的设备正在消息起初处启初处事,读天面调配疑息,推断哪一个设备被选中(广播办法则传给所有设备),判知何时疑息已完毕.部分的消息也能侦测到而且过失能树坐为返回截止.1、ASCII帧使用ASCII模式,消息以冒号(:)字符(ASCII码 3AH)启初,以回车换止符中断(ASCII 码 0DH,0AH).其余域不妨使用的传输字符是十六进造的0...9,A...F.搜集上的设备不竭侦测“:”字符,当有一个冒号接支到时,每个设备皆解码下个域(天面域)去推断是可收给自己的.消息中字符间收支的时间隔断最少不克不迭超出1秒,可则接支的设备将认为传输过失.2、RTU帧使用RTU模式,消息收支起码要以3.5个字符时间的停顿隔断启初.正在搜集波特率下百般的字符时间,那是最简单真止的(如下图的T1-T2-T3-T4所示).传输的第一个域是设备天面.不妨使用的传输字符是十六进造的0...9,A...F.搜集设备不竭侦测搜集总线,包罗停顿隔断时间内.当第一个域(天面域)接支到,每个设备皆举止解码以推断是可收往自己的.正在终尾一个传输字符之后,一个起码3.5个字符时间的停顿标定了消息的中断.一个新的消息可正在此停顿后启初.所有消息帧必须动做一连绝的流转输.如果正在帧完毕之前有超出1.5个字符时间的停顿时间,接支设备将刷新不完备的消息并假定下一字节是一个新消息的天面域.共样天,如果一个新消息正在小于3.5个字符时间内接着前个消息启初,接支的设备将认为它是前一消息的延绝.那将引导一个过失,果为正在终尾的CRC域的值不可能是粗确的.3、天面域消息帧的天面域包罗二个字符(ASCII)大概8Bit(RTU).大概的从设备天面是0...247 (十进造).单个设备的天面范畴是1...247.主设备通过将要联结的从设备的天面搁进消息中的天面域去选通从设备.当从设备收支回应消息时,它把自己的天面搁进回应的天面域中,以便主设备知讲是哪一个设备做出回应.天面0是用做广播天面,以使所有的从设备皆能认识.当Modbus协议用于更下程度的搜集,广播大概不允许大概以其余办法代替.4、怎么样处理功能域消息帧中的功能代码域包罗了二个字符(ASCII)大概8Bits(RTU).大概的代码范畴是十进造的1...255.天然,有些代码是适用于所有统造器,有此是应用于某种统造器,另有些死存以备后用.当消息从主设备收往从设备时,功能代码域将告之从设备需要真止哪些止为.比圆去读与输进的启关状态,读一组寄存器的数据真质,读从设备的诊疗状态,允许调进、记录、校验正在从设备中的步调等.当从设备回当令,它使用功能代码域去指示是平常回应(无误)仍旧有某种过失爆收(称做同议回应).对付平常回应,从设备仅回应相映的功能代码.对付同议回应,从设备返回一等共于平常代码的代码,然而最要害的位子为逻辑1.比圆:一从主设备收往从设备的消息央供读一组脆持寄存器,将爆收如下功能代码:0 0 0 0 0 0 1 1 (十六进造03H)对付平常回应,从设备仅回应共样的功能代码.对付同议回应,它返回: 1 0 0 0 0 0 1 1 (十六进造83H)除功能代码果同议过失做了建改中,从设备将一特殊的代码搁到回应消息的数据域中,那能报告主设备爆收了什么过失. 主设备应用步调得到同议的回应后,典型的处理历程是沉收消息,大概者诊疗收给从设备的消息并报告给支配员. 5、数据域数据域是由二个十六进造数集中形成的,范畴00...FF.根据搜集传输模式,那不妨是由一对付ASCII字符组成大概由一RTU字符组成. 从主设备收给从设备消息的数据域包罗附加的疑息:从设备必须用于举止真止由功能代码所定义的所为.那包罗了象不连绝的寄存器天面,要处理项的数目,域中本质数据字节数. 比圆,如果主设备需要从设备读与一组脆持寄存器(功能代码03),数据域指定了起初寄存器以及要读的寄存器数量.如果主设备写一组从设备的寄存器(功能代码10十六进造),数据域则指明白要写的起初寄存器以及要写的寄存器数量,数据域的数据字节数,要写进寄存器的数据. 如果不过失爆收,从从设备返回的数据域包罗哀供的数据.如果有过失爆收,此域包罗一同议代码,主设备应用步调不妨用去推断采与下一步止径. 正在某种消息中数据域不妨是不存留的(0少度).比圆,主设备央供从设备回应通疑事变记录(功能代码0B十六进造),从设备不需所有附加的疑息. 6、过失检测域尺度的Modbus搜集有二种过失检测要收.过失检测域的真质视所选的检测要收而定. ASCII 当采用ASCII 模式做字符帧,过失检测域包罗二个ASCII字符.那是使用LRC (纵背冗少检测)要收对付消息真质估计得出的,不包罗启初的冒号符及回车换止符.LRC字符附加正在回车换止符前里. RTU 当采用RTU模式做字符帧,过失检测域包罗一16Bits值(用二个8位的字符去真止).过失检测域的真质是通过对付消息真质举止循环冗少检测要收得出的.CRC域附加正在消息的终尾,增加时先是矮字节而后是下字节.故CRC的下位字节是收支消息的终尾一个字节.7、字符的连绝传输当消息正在尺度的Modbus系列搜集传输时,每个字符大概字节以如下办法收支(从左到左):最矮灵验位...最下灵验位四、过失检测要收尺度的Modbus串止搜集采与二种过失检测要收.奇奇校验对付每个字符皆可用,帧检测(LRC大概CRC)应用于所有消息.它们皆是正在消息收支前由主设备爆收的,从设备正在接支历程中检测每个字符战所有消息帧. 用户要给主设备摆设一预先定义的超常常间隔断,那个时间隔断要足够少,以使所有从设备皆能动做平常反应.如果从设备测到一传输过失,消息将不会接支,也不会背主设备做出回应.那样超时事变将触收主设备去处理过失.收往不存留的从设备的天面也会爆收超时. 1、奇奇校验用户不妨摆设统造器是奇大概奇校验,大概无校验.那将决断了每个字符中的奇奇校验位是怎么样树坐的. 如果指定了奇大概奇校验,“1”的位数将算到每个字符的位数中(ASCII模式7个数据位,RTU中8个数据位).比圆RTU字符帧中包罗以下8个数据位: 1 1 0 0 0 1 0 1 所有“1”的数目是4个.如果便用了奇校验,帧的奇奇校验位将是0,便得所有“1”的个数仍是4个.如果便用了奇校验,帧的奇奇校验位将是1,便得所有“1”的个数是5个. 如果不指定奇奇校验位,传输时便不校验位,也不举止校验检测.代替一附加的停止位弥补至要传输的字符帧中.2、LRC检测使用ASCII模式,消息包罗了一鉴于LRC要收的过失检测域.LRC域检测了消息域中除启初的冒号及中断的回车换止号中的真质. LRC域是一个包罗一个8位二进造值的字节.LRC值由传输设备去估计并搁到消息帧中,接支设备正在接支消息的历程中估计LRC,并将它战接支到消息中LRC域中的值比较,如果二值不等,证明有过失. LRC要收是将消息中的8Bit的字节连绝乏加,拾弃了进位. LRC简朴函数如下: static unsigned char LRC(auchMsg,usDataLen) unsigned char *auchMsg ; /* 要举止估计的消息 */ unsigned short usDataLen ; /* LRC 要处理的字节的数量*/ { unsigned char uchLRC = 0 ; /* LRC 字节初初化 */ while (usDataLen--) /* 传递消息 */ uchLRC += *auchMsg++ ; /* 乏加*/ return ((unsigned char)(-((char_uchLRC))) ; } 3、CRC检测使用RTU模式,消息包罗了一鉴于CRC要收的过失检测域.CRC域检测了所有消息的真质. CRC域是二个字节,包罗一16位的二进造值.它由传输设备估计后加进到消息中.接支设备沉新估计支到消息的CRC,并与接支到的CRC域中的值比较,如果二值分歧,则有误. CRC是先调进一值是齐“1”的16位寄存器,而后调用一历程将消息中连绝的8位字节各目前寄存器中的值举止处理.仅每个字符中的8Bit数据对付CRC灵验,起初位战停止位以及奇奇校验位均无效. CRC爆收历程中,每个8位字符皆单独战寄存器真质相大概(OR),截止背最矮灵验位目标移动,最下灵验位以0弥补.LSB被提与出去检测,如果LSB为1,寄存器单独战预置的值大概一下,如果LSB为0,则不举止.所有历程要沉复8次.正在终尾一位(第8位)完毕后,下一个8位字节又单独战寄存器的目前值相大概.最后寄存器中的值,是消息中所有的字节皆真止之后的CRC值. CRC增加到消息中时,矮字节先加进,而后下字节.ModBus搜集是一个工业通疑系统,由戴智能终端的可编步调统造器战估计机通过公用线路大概局部博用线路对接而成.其系统结构既包罗硬件、亦包罗硬件.它可应用于百般数据支集战历程监控.ModBus搜集惟有一个主机,所有通疑皆由他收出.搜集可支援247个之多的近程从属统造器,然而本质所支援的从机数要由所用通疑设备决断.采与那个系统,各PC不妨战核心主机接换疑息而不做用各PC 真止自己的统造任务.(1)ModBus的传输办法正在ModBus 系统中有2种传输模式可采用.那2种传输模式与从机PC通疑的本收是共等的.采用时应视所用ModBus主机而定,每个ModBus系统只可使用一种模式,不允许2种模式混用.一种模式是ASCII(好国疑息接换码),另一种模式是RTU(近程终端设备).ASCII可挨印字符便于障碍检测,而且对付于用下档谈话(如Fortan)编程的主估计机及主PC很相宜.RTU则适用于呆板谈话编程的估计机战PC主机. 用RTU模式传输的数据是8位二进造字符.如欲变换为ASCII模式,则每个RTU字符最先应分为下位战矮位二部分,那二部分各含4位,而后变换成十六进造等量值.用以形成报文的ASCII字符皆是十六进造字符.ASCII模式使用的字符虽是RTU模式的二倍,然而ASCII数据的译玛战处理更为简单一些,别的,用RTU模式时报笔墨符必须以连绝数据流的形式传递,用ASCII模式,字符之间可爆收少达1s的隔断,以符合速度较快的呆板. (2)ModBus的数据校验办法 CRC-16(循环冗余过失校验) CRC-16过失校验步调如下:报文(此处只波及数据位,不指起初位、停止位战任选的奇奇校验位)被瞅做是一个连绝的二进造,其最下灵验位(MSB)尾选收支.报文先与X↑16相乘(左移16位),。
modbus通讯案例Modbus 通讯案例研究:一个光伏系统监控解决方案背景某光伏发电厂需要一个可靠的监控系统来远程监视和管理其光伏阵列。
该系统必须能够收集有关发电量、系统状态和环境条件的数据,并通过 Modbus RTU 协议将其传输到中央监控站。
系统架构监控系统由以下组件组成:Modbus 主站:负责轮询 Modbus 从站并收集数据。
Modbus 从站:连接到光伏逆变器,负责提供发电量、系统状态和环境条件数据。
通信网关:将 Modbus RTU 转换为以太网协议,以便远程访问。
中央监控站:运行监控软件,显示收集到的数据并在出现问题时发出警报。
Modbus 通信协议Modbus RTU 是一种半双工串行通信协议,用于在主站和从站之间交换数据。
它使用简单的请求-响应机制,其中主站发送请求,从站发送响应。
Modbus 请求由以下字段组成:设备地址(1-255)功能代码(01、02、03 等)起始地址数目数据(可选)Modbus 响应由以下字段组成:设备地址(1-255)功能代码(01、02、03 等)字节数数据系统实施系统实施涉及以下步骤:将 Modbus 从站连接到光伏逆变器。
配置 Modbus 主站和从站的设备地址。
将通信网关连接到 Modbus 主站和以太网。
在中央监控站上安装监控软件。
对系统进行配置和测试。
数据采集和监视系统运行后,Modbus 主站定期轮询 Modbus 从站并收集以下数据:实时发电量累计发电量系统电压系统电流环境温度错误代码这些数据通过通信网关传输到中央监控站,在那里显示在仪表板和图表上。
报警和通知如果检测到任何问题,例如系统故障或发电量下降,监控软件会发出警报并通过电子邮件或 SMS 通知相关人员。
这使操作员能够及时解决问题,最大限度地减少停机时间。
系统优势该 Modbus 通讯解决方案为光伏发电厂提供了以下优势:远程监视:允许操作员从任何地方远程监控系统。
实时数据:提供有关发电量、系统状态和环境条件的实时数据。
基于Modbus通信协议的建筑能耗监控系统作者:黄俊超王磊孔德秀来源:《电脑知识与技术》2014年第22期摘要: Modbus是应用于电子控制器上的一种通信协议。
该文主要介绍了以上位机PC 为核心的基于Modbus通信协议的建筑能耗监控系统的设计,详细阐述了基于Modbus RTU规约的电力参数采集显示系统的软硬件组成和实现。
VC++6.0 开发环境下编程实现了与下位机的通信,并利用ADO 访问SQL 数据库,实现了对采集来的数据进行存储、绘图等。
关键词:RS-485;Modbus通信协议;数据采集;监控系统中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2014)22-5182-03随着计算机技术和网络技术的迅速发展,监控系统出现了多种新的实现方式,与此同时,我国经济的迅速发展,能源需求不断增长与能源相对不足的矛盾日益严重,节能成为了全社会共同关注的话题。
利用RS-485将建筑物内的智能电表数据采集出来,以Modbus协议与上位机PC进行通讯,使得建筑物内不同位置的智能电表组成一个网络,构成一个监控系统,操作人员利用上位机PC监控软件即可对整个建筑物内的用电情况进行采集,处理,实现控制目的。
1 Modbus协议1.1 Modbus简介Modbus协议是应用于电子控制器上的一种通用语言。
通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。
它已经成为一通用工业标准。
不同厂商生产的控制设备可以通过该协议连接成一个工业网络,来完成集中监控。
这个协议定义了一个用来认识所使用的消息结构的控制器,不需要了解消息是经过何种网络进行通讯的。
Modbus协议描述了一控制器对其他设备的请求与回应过程,以及如何侦测错误并记录,Modbus协议制定了消息域格局和内容的公共格式。
Modbus协议在网络上进行通讯时,决定了每个控制器必须了解它们的设备地址,通过识别按地址发送来的消息,决定是否应答,控制器使用Modbus协议发送反馈信息,这个消息转换成其他网络所使用的数据帧或者包结构。
MODBUS通讯协议工业控制已从单机控制走向集中监控、集散控制,如今已进入网络时代,工业控制器连网也为网络管理提供了方便。
Modbus就是工业控制器的网络协议中的一种。
一、概述Modbus协议是应用于电子控制器上的一种通用语言。
通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。
它已经成为一通用工业标准。
有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。
Modbus协议最初由Modicon公司开发出来,在1979年末该公司成为施耐德自动化(SchneiderAutomation)部门的一部分,现在Modbus已经是工业领域全球最流行的协议。
此协议支持传统的RS-232、RS-422、RS-485和以太网设备。
许多工业设备,包括PLC,DCS,智能仪表等都在使用Modbus协议作为他们之间的通讯标准。
有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。
当在网络上通信时,Modbus协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。
如果需要回应,控制器将生成应答并使用Modbus协议发送给询问方。
Modbus协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。
它描述了控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。
它制定了消息域格局和内容的公共格式。
当在Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。
如果需要回应,控制器将生成反馈信息并用Modbus 协议发出。
在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。
这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。
1、在Modbus网络上转输标准的Modbus口是使用RS-232C兼容串行接口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。
Modbus通讯协议之南宫帮珍创作创作时间:二零二一年六月三十日图片:图片:图片:Modbus协议最初由Modicon公司开发出来, 在1979年末该公司成为施耐德自动化(Schneider Automation)部份的一部份, 现在Modbus已经是工业领域全球最流行的协议.此协议支持传统的RS-232、RS-422、RS-485和以太网设备.许多工业设备, 包括PLC, DCS, 智能仪表等都在使用Modbus协议作为他们之间的通讯标准.有了它, 分歧厂商生产的控制设备可以连成工业网络, 进行集中监控. 当在网络上通信时, Modbus协议决定了每个控制器须要知道它们的设备地址, 识别按地址发来的消息, 决定要发生何种行动.如果需要回应, 控制器将生成应答并使用Modbus协议发送给询问方. Modbus协议包括ASCII、RTU、TCP等, 并没有规定物理层.此协议界说了控制器能够认识和使用的消息结构, 而不论它们是经过何种网络进行通信的.标准的Modicon控制器使用RS232C实现串行的Modbus.Modbus的ASCII、RTU协议规定了消息、数据的结构、命令和就答的方式, 数据通讯采纳Maser/Slave方式, Master端发出数据请求消息, Slave端接收到正确消息后就可以发送数据到Master端以响应请求;Master端也可以直接发消息修改Slave真个数据, 实现双向读写. Modbus协议需要对数据进行校验, 串行协议中除有奇偶校验外, ASCII模式采纳LRC校验, RTU模式采纳16位CRC校验, 但TCP模式没有额外规定校验, 因为TCP协议是一个面向连接的可靠协议.另外, Modbus采纳主从方式按时收发数据, 在实际使用中如果某Slave站点断开后(如故障或关机), Master端可以诊断出来, 而当故障修复后, 网络又可自动接通.因此, Modbus协议的可靠性较好. 下面我来简单的给年夜家介绍一下, 对Modbus的ASCII、RTU和TCP协议来说, 其中TCP和RTU协议非常类似, 我们只要把RTU协议的两个字节的校验码去失落, 然后在RTU 协议的开始加上5个0和一个6并通过TCP/IP网络协议发送出去即可.所以在这里我仅介绍一下Modbus的ASCII和RTU协议. 下表是ASCII协议和RTU协议进行的比力:通过比力可以看到, ASCII协议和RTU协议相比拥有开始和结束标识表记标帜, 因此在进行法式处置时能更加方便, 而且由于传输的都是可见的ASCII字符, 所以进行调试时就更加的直观, 另外它的LRC校验也比力容易.可是因为它传输的都是可见的ASCII字符, RTU传输的数据每一个字节ASCII都要用两个字节来传输, 比如RTU传输一个十六进制数0xF9,ASCII就需要传输’F’’9’的ASCII码0x39和0x46两个字节, 这样它的传输的效率就比力低.所以一般来说, 如果所需要传输的数据量较小可以考虑使用ASCII协议, 如果所需传输的数据量比力年夜, 最好能使用RTU协议.下面对两种协议的校验进行一下介绍.1、LRC校验LRC域是一个包括一个8位二进制值的字节.LRC值由传输设备来计算并放到消息帧中, 接收设备在接收消息的过程中计算LRC, 并将它和接收到消息中LRC域中的值比力, 如果两值不等, 说明有毛病.LRC 校验比力简单, 它在ASCII协议中使用, 检测了消息域中除开始的冒号及结束的回车换行号外的内容.它仅仅是把每一个需要传输的数据按字节叠加后取反加1即可.下面是它的VC代码: BYTEGetCheckCode(const char * pSendBuf, int nEnd)//获得校验码{ BYTE byLrc = 0; char pBuf[4]; int nData = 0; for(i=1; i<end;i+=2) //i初始为1, 避开“开始标识表记标帜”冒号 { //每两个需要发送的ASCII码转化为一个十六进制数 pBuf [0] = pSendBuf ; pBuf [1] = pSendBuf [i+1]; pBuf [2] = '\0'; sscanf(pBuf,"%x",& nData);byLrc += nData; } byLrc = ~ byLrc; byLrc ++; return byLrc; } 2、CRC校验 CRC域是两个字节, 包括一16位的二进制值.它由传输设备计算后加入到消息中.接收设备重新计算收到消息的CRC, 并与接收到的CRC域中的值比力, 如果两值分歧, 则有误.CRC是先调入一值是全“1”的16位寄存器, 然后调用一过程将消息中连续的8位字节各以后寄存器中的值进行处置.仅每个字符中的8Bit数据对CRC有效, 起始位和停止位以及奇偶校验位均无效.CRC发生过程中, 每个8位字符都独自和寄存器内容相或(OR), 结果向最低有效位方向移动, 最高有效位以0填充.LSB被提取出来检测, 如果LSB为1, 寄存器独自和预置的值或一下, 如果LSB为0, 则不进行.整个过程要重复8次.在最后一位(第8位)完成后, 下一个8位字节又独自和寄存器的以后值相或.最终寄存器中的值, 是消息中所有的字节都执行之后的CRC值.CRC添加到消息中时, 低字节先加入, 然后高字节.下面是它的VC代码: WORDGetCheckCode(const char * pSendBuf, int nEnd)//获得校验码{ WORD wCrc = WORD(0xFFFF);for(int i=0; i<nEnd; i++){wCrc^= WORD(BYTE(pSendBuf));for(int j=0; j<8; j++)2、{if(wCrc & 1){3、wCrc >>= 1; wCrc ^= 0xA001; }else{wCrc >>= 1; }}}return wCrc;}对一条RTU协议的命令可以简单的通过以下的步伐转化为ASCII协议的命令:1、把命令的CRC校验去失落, 而且计算出LRC校验取代.2、把生成的命令串的每一个字节转化成对应的两个字节的ASCII码, 比如0x03转化成0x30,0x33(0的ASCII码和3的ASCII码).3、在命令的开头加上起始标识表记标帜“:”, 它的ASCII码为0x3A.4、在命令的尾部加上结束标识表记标帜CR,LF(0xD,0xA), 此处的CR,LF暗示回车和换行的ASCII码.所以以下我们仅介绍RTU协议即可, 对应的ASCII协议可以使用以上的步伐来生成.下表是Modbus支持的功能码:在这些功能码中较长使用的是1、2、3、4、5、6号功能码, 使用它们即可实现对下位机的数字量和模拟量的读写把持. 1、读可读写数字量寄存器(线圈状态):计算机发送命令:[设备地址] [命令号01] [起始寄存器地址高8位] [低8位] [读取的寄存器数高8位] [低8位] [CRC 校验的低8位] [CRC校验的高8位] 例:[11][01][00][13][00][25][CRC低][CRC高] 意义如下:<1>设备地址:在一个485总线上可以挂接多个设备, 此处的设备地址暗示想和哪一个设备通讯.例子中为想和17号(十进制的17是十六进制的11)通讯.<2>命令号01:读取数字量的命令号固定为01.<3>起始地址高8位、低8位:暗示想读取的开关量的起始地址(起始地址为0).比如例子中的起始地址为19.<4>寄存器数高8位、低8位:暗示从起始地址开始读几多个开关量.例子中为37个开关量.<5>CRC校验:是从开头一直校验到此之前.在此协议的最后再作介绍.此处需要注意, CRC校验在命令中的高低字节的顺序和其他的相反. 设备响应:[设备地址] [命令号01] [返回的字节个数][数据1][数据2]...[数据n][CRC校验的低8位] [CRC校验的高8位] 例:[11][01][05][CD][6B][B2][0E][1B][CRC 低][CRC高] 意义如下:<1>设备地址和命令号和上面的相同.<2>返回的字节个数:暗示数据的字节个数, 也就是数据1, 2...n中的n的值.<3>数据1...n:由于每一个数据是一个8位的数, 所以每一个数据暗示8个开关量的值, 每一位为0暗示对应的开关断开, 为1暗示闭合.比如例子中, 暗示20号(索引号为19)开关闭合, 21号断开, 22闭合, 23闭合, 24断开, 25断开, 26闭合, 27闭合...如果询问的开关量不是8的整倍数, 那么最后一个字节的高位部份无意义, 置为0.<4>CRC校验同上.2、读只可读数字量寄存器(输入状态):和读取线圈状态类似, 只是第二个字节的命令号不再是1而是2.3、写数字量(线圈状态):计算机发送命令:[设备地址] [命令号05] [需下置的寄存器地址高8位] [低8位] [下置的数据高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位] 例:[11][05][00][AC][FF][00][CRC低][CRC高] 意义如下:<1>设备地址和上面的相同.<2>命令号:写数字量的命令号固定为05.<3>需下置的寄存器地址高8位, 低8位:标明了需要下置的开关的地址.<4>下置的数据高8位, 低8位:标明需要下置的开关量的状态.例子中为把该开关闭合.注意, 此处只可以是[FF][00]暗示闭合[00][00]暗示断开, 其他数值非法.<5>注意此命令一条只能下置一个开关量的状态. 设备响应:如果胜利把计算机发送的命令原样返回, 否则不响应. 4、读可读写模拟量寄存器(坚持寄存器):计算机发送命令:[设备地址] [命令号03] [起始寄存器地址高8位] [低8位] [读取的寄存器数高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位] 例:[11][03][00][6B][00][03][CRC低][CRC高] 意义如下:<1>设备地址和上面的相同.<2>命令号:读模拟量的命令号固定为03.<3>起始地址高8位、低8位:暗示想读取的模拟量的起始地址(起始地址为0).比如例子中的起始地址为107.<4>寄存器数高8位、低8位:暗示从起始地址开始读几多个模拟量.例子中为3个模拟量.注意, 在返回的信息中一个模拟量需要返回两个字节. 设备响应:[设备地址] [命令号03] [返回的字节个数][数据1][数据2]...[数据n][CRC校验的低8位] [CRC校验的高8位] 例:[11][03][06][02][2B][00][00][00][64][CRC低][CRC高] 意义如下:<1>设备地址和命令号和上面的相同.<2>返回的字节个数:暗示数据的字节个数, 也就是数据1, 2...n中的n的值.例子中返回了3个模拟量的数据, 因为一个模拟量需要2个字节所以共6个字节.<3>数据1...n:其中[数据1][数据2]分别是第1个模拟量的高8位和低8位, [数据3][数据4]是第2个模拟量的高8位和低8位, 以此类推.例子中返回的值分别是555, 0, 100.<4>CRC校验同上. 5、读只可读模拟量寄存器(输入寄存器):和读取保管寄存器类似, 只是第二个字节的命令号不再是2而是4. 6、写单个模拟量寄存器(坚持寄存器):计算机发送命令:[设备地址] [命令号06] [需下置的寄存器地址mym级别: 总版主精华: 41发帖: 3956威望: 9957 点金钱: 9431 Gold贡献值: 601 点朋友圈: ifix技术群在线时间:539(小时)注册时间:2005-02-02最后登录:2008-01-25 Modbus通讯协议MODBUS通讯协议简介工业控制已从单机控制走向集中监控、集散控制, 如今已进入网络时代, 工业控制器连网也为网络管理提供了方便.Modbus就是工业控制器的网络协议中的一种.一、概述Modbus 协议是应用于电子控制器上的一种通用语言.通过此协议, 控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信.它已经成为一通用工业标准.有了它, 分歧厂商生产的控制设备可以连成工业网络, 进行集中监控.此协议界说了一个控制器能认识使用的消息结构,而不论它们是经过何种网络进行通信的.它描述了一控制器请求访问其它设备的过程, 如果回应来自其它设备的请求, 以及怎样侦测毛病并记录.它制定了消息高8位] [低8位] [下置的数据高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位] 例:[11][06][00][01][00][03][CRC低][CRC高] 意义如下:<1>设备地址和上面的相同.<2>命令号:写模拟量的命令号固定为06.<3>需下置的寄存器地址高8位, 低8位:标明了需要下置的模拟量寄存器的地址.<4>下置的数据高8位, 低8位:标明需要下置的模拟量数据.比如例子中就把1号寄存器的值设为3.<5>注意此命令一条只能下置一个模拟量的状态. 设备响应:如果胜利把计算机发送的命令原样返回, 否则不响应.域格局和内容的公共格式.当在一Modbus网络上通信时, 此协议决定了每个控制器须要知道它们的设备地址, 识别按地址发来的消息, 决定要发生何种行动.如果需要回应, 控制器将生成反馈信息并用Modbus协议发出.在其它网络上, 包括了Modbus协议的消息转换为在此网络上使用的帧或包结构.这种转换也扩展了根据具体的网络解决节地址、路由路径及毛病检测的方法.1、在Modbus网络上转输标准的Modbus口是使用一RS-232C兼容串行接口, 它界说了连接口的针脚、电缆、信号位、传输波特率、奇偶校验.控制器能直接或经由Modem组网.控制器通信使用主—从技术, 即仅一设备(主设备)能初始化传输(查询).其它设备(从设备)根据主设备查询提供的数据作出相应反应.典范的主设备:主机和可编程仪表.典范的从设备:可编程控制器.主设备可独自和从设备通信, 也能以广播方式和所有从设备通信.如果独自通信, 从设备返回一消息作为回应, 如果是以广播方式查询的, 则不作任何回应.Modbus协议建立了主设备查询的格式:设备(或广播)地址、功能代码、所有要发送的数据、一毛病检测域.从设备回应消息也由Modbus协议构成, 包括确认要行动的域、任何要返回的数据、和一毛病检测域.如果在消息接收过程中发生一毛病, 或从设备不能执行其命令, 从设备将建立一毛病消息并把它作为回应发送出去.2、在其它类型网络上转输在其它网络上, 控制器使用对等技术通信, 故任何控制都能初始和其它控制器的通信.这样在独自的通信过程中, 控制器既可作为主设备也可作为从设备.提供的多个内部通道可允许同时发生的传输进程.在消息位, Modbus协议仍提供了主—从原则, 尽管网络通信方法是“对等”.如果一控制器发送一消息, 它只是作为主设备, 并期望从从设备获得回应.同样, 当控制器接收到一消息, 它将建立一从设备回应格式并返回给发送的控制器.Modbus是Modicon公司为其PLC与主机之间的通讯而发明的串行通讯协议.其物理层采纳RS232、485等异步串行标准.由于其开放性而被年夜量的PLC及RTU厂家采纳.Modbus通讯方式采纳主从方式的查询-相应机制, 只有主站发出查询时, 从站才华给出响应, 从站不能主动发送数据.主站可以向某一个从站发出查询, 也可以向所有从站广播信息.从站只响应独自发给它的查询, 而不响应广播消息.Modbus的串行口的通讯参数(如波特率、奇偶校验)可由用户选择.二、MODBUS协议传送方式MODBUS通讯协议有两种传送方式:RTU方式和ASCII方式,两种方式如下所示:项目 RTU方式 ASCII方式字节长度 8 BITS 7 BITS奇偶校验 1 BIT OR 0 BIT1 BIT OR 0 BIT字节中止 1 BIT OR2 BITS 1 BIT OR 2 BITS开始标识表记标帜不要 :(冒号)结束标识表记标帜不要 CR,LF数据间隔 < 24 BIT < 1S犯错检验方式 CRC-16 LRC控制器能设置为两种传输模式(ASCII或RTU)中的任何一种在标准的Modbus网络通信.用户选择想要的模式, 包括串口通信参数(波特率、校验方式等), 在配置每个控制器的时候, 在一个Modbus网络上的所有设备都必需选择相同的传输模式和串口参数.三、Modbus消息帧两种传输模式中(ASCII或RTU), 传输设备以将Modbus消息转为有起点和终点的帧, 这就允许接收的设备在消息起始处开始工作, 读地址分配信息, 判断哪一个设备被选中(广播方式则传给所有设备), 判知何时信息已完成.部份的消息也能侦测到而且毛病能设置为返回结果.1、ASCII帧使用ASCII模式, 消息以冒号(:)字符(ASCII码 3AH)开始, 以回车换行符结束(ASCII码 0DH,0AH).其它域可以使用的传输字符是十六进制的0...9,A...F.网络上的设备不竭侦测“:”字符, 当有一个冒号接收到时, 每个设备都解码下个域(地址域)来判断是否发给自己的.消息中字符间发送的时间间隔最长不能超越1秒, 否则接收的设备将认为传输毛病.2、RTU帧使用RTU模式, 消息发送至少要以3.5个字符时间的停顿间隔开始.在网络波特率下多样的字符时间, 这是最容易实现的(如下图的T1-T2-T3-T4所示).传输的第一个域是设备地址.可以使用的传输字符是十六进制的0...9,A...F.网络设备不竭侦测网络总线, 包括停顿间隔时间内.当第一个域(地址域)接收到, 每个设备都进行解码以判断是否发往自己的.在最后一个传输字符之后, 一个至少3.5个字符时间的停顿标定了消息的结束.一个新的消息可在此停顿后开始.整个消息帧必需作为一连续的流转输.如果在帧完成之前有超越1.5个字符时间的停登时间, 接收设备将刷新不完整的消息并假定下一字节是一个新消息的地址域.同样地, 如果一个新消息在小于3.5个字符时间内接着前个消息开始, 接收的设备将认为它是前一消息的延续.这将招致一个毛病, 因为在最后的CRC域的值不成能是正确的.3、地址域消息帧的地址域包括两个字符(ASCII)或8Bit(RTU).可能的从设备地址是0...247 (十进制).单个设备的地址范围是1...247.主设备通过将要联络的从设备的地址放入消息中的地址域来选通从设备.当从设备发送回应消息时, 它把自己的地址放入回应的地址域中, 以便主设备知道是哪一个设备作出回应.地址0是用作广播地址, 以使所有的从设备都能认识.当Modbus协议用于更高水准的网络, 广播可能不允许或以其它方式取代.4、如何处置功能域消息帧中的功能代码域包括了两个字符(ASCII)或8Bits(RTU).可能的代码范围是十进制的1...255.固然, 有些代码是适用于所有控制器, 有此是应用于某种控制器, 还有些保管以备后用.当消息从主设备发往从设备时, 功能代码域将告之从设备需要执行哪些行为.例如去读取输入的开关状态, 读一组寄存器的数据内容, 读从设备的诊断状态, 允许调入、记录、校验在从设备中的法式等.当从设备回应时, 它使用功能代码域来指示是正常回应(无误)还是有某种毛病发生(称作异议回应).对正常回应, 从设备仅回应相应的功能代码.对异议回应, 从设备返回一同等于正常代码的代码, 但最重要的位置为逻辑1.例如:一从主设备发往从设备的消息要求读一组坚持寄存器, 将发生如下功能代码:0 0 0 0 0 0 1 1 (十六进制03H)对正常回应, 从设备仅回应同样的功能代码.对异议回应, 它返回: 1 0 0 0 0 0 1 1 (十六进制83H)除功能代码因异议毛病作了修改外, 从设备将一共同的代码放到回应消息的数据域中, 这能告诉主设备发生了什么毛病. 主设备应用法式获得异议的回应后, 典范的处置过程是重发消息, 或者诊断发给从设备的消息并陈说给把持员. 5、数据域数据域是由两个十六进制数集合构成的, 范围00...FF.根据网络传输模式, 这可以是由一对ASCII字符组成或由一RTU字符组成. 从主设备发给从设备消息的数据域包括附加的信息:从设备必需用于进行执行由功能代码所界说的所为.这包括了象不连续的寄存器地址, 要处置项的数目, 域中实际数据字节数. 例如, 如果主设备需要从设备读取一组坚持寄存器(功能代码03), 数据域指定了起始寄存器以及要读的寄存器数量.如果主设备写一组从设备的寄存器(功能代码10十六进制), 数据域则指明了要写的起始寄存器以及要写的寄存器数量, 数据域的数据字节数, 要写入寄存器的数据. 如果没有毛病发生, 从从设备返回的数据域包括请求的数据.如果有毛病发生, 此域包括一异议代码, 主设备应用法式可以用来判断采用下一步行动. 在某种消息中数据域可以是不存在的(0长度).例如, 主设备要求从设备回应通信事件记录(功能代码0B十六进制), 从设备不需任何附加的信息. 6、毛病检测域标准的Modbus网络有两种毛病检测方法.毛病检测域的内容视所选的检测方法而定. ASCII 被选用ASCII模式作字符帧, 毛病检测域包括两个ASCII字符.这是使用LRC(纵向冗长检测)方法抵消息内容计算得出的, 不包括开始的冒号符及回车换行符.LRC字符附加在回车换行符前面. RTU 被选用RTU模式作字符帧, 毛病检测域包括一16Bits值(用两个8位的字符来实现).毛病检测域的内容是通过抵消息内容进行循环冗长检测方法得出的.CRC域附加在消息的最后, 添加时先是低字节然后是高字节.故CRC的高位字节是发送消息的最后一个字节.7、字符的连续传输当消息在标准的Modbus系列网络传输时, 每个字符或字节以如下方式发送(从左到右):最低有效位...最高有效位四、毛病检测方法标准的Modbus 串行网络采纳两种毛病检测方法.奇偶校验对每个字符都可用, 帧检测(LRC或CRC)应用于整个消息.它们都是在消息发送前由主设备发生的, 从设备在接收过程中检测每个字符和整个消息帧. 用户要给主设备配置一预先界说的超时时间间隔, 这个时间间隔要足够长, 以使任何从设备都能作为正常反应.如果从设备测到一传输毛病, 消息将不会接收, 也不会向主设备作出回应.这样超时事件将触发主设备来处置毛病.发往不存在的从设备的地址也会发生超时. 1、奇偶校验用户可以配置控制器是奇或偶校验, 或无校验.这将决定了每个字符中的奇偶校验位是如何设置的. 如果指定了奇或偶校验, “1”的位数将算到每个字符的位数中(ASCII模式7个数据位, RTU中8个数据位).例如RTU 字符帧中包括以下8个数据位: 1 1 0 0 0 1 0 1 整个“1”的数目是4个.如果便用了偶校验, 帧的奇偶校验位将是0, 便得整个“1”的个数仍是4个.如果便用了奇校验, 帧的奇偶校验位将是1, 便得整个“1”的个数是5个. 如果没有指定奇偶校验位, 传输时就没有校验位, 也不进行校验检测.取代一附加的停止位填充至要传输的字符帧中. 2、LRC检测使用ASCII模式, 消息包括了一基于LRC方法的毛病检测域.LRC域检测了消息域中除开始的冒号及结束的回车换行号外的内容. LRC域是一个包括一个8位二进制值的字节.LRC值由传输设备来计算并放到消息帧中, 接收设备在接收消息的过程中计算LRC, 并将它和接收到消息中LRC域中的值比力, 如果两值不等, 说明有毛病. LRC方法是将消息中的8Bit的字节连续累加, 抛弃了进位. LRC简单函数如下: static unsigned char LRC(auchMsg,usDataLen) unsigned char *auchMsg ; /* 要进行计算的消息 */ unsigned short usDataLen ; /* LRC 要处置的字节的数量*/ { unsigned char uchLRC = 0 ; /* LRC 字节初始化 */ while (usDataLen--) /* 传送消息 */ uchLRC += *auchMsg++ ; /* 累加*/ return ((unsigned char)(-((char_uchLRC))) ; } 3、CRC检测使用RTU模式, 消息包括了一基于CRC方法的毛病检测域.CRC域检测了整个消息的内容. CRC域是两个字节, 包括一16位的二进制值.它由传输设备计算后加入到消息中.接收设备重新计算收到消息的CRC, 并与接收到的CRC域中的值比力, 如果两值分歧, 则有误. CRC是先调入一值是全“1”的16位寄存器, 然后调用一过程将消息中连续的8位字节各以后寄存器中的值进行处置.仅每个字符中的8Bit数据对CRC有效, 起始位和停止位以及奇偶校验位均无效. CRC发生过程中, 每个8位字符都独自和寄存器内容相或(OR), 结果向最低有效位方向移动, 最高有效位以0填充.LSB被提取出来检测, 如果LSB为1, 寄存器独自和预置的值或一下, 如果LSB为0, 则不进行.整个过程要重复8次.在最后一位(第8位)完成后, 下一个8位字节又独自和寄存器的以后值相或.最终寄存器中的值, 是消息中所有的字节都执行之后的CRC值. CRC添加到消息中时, 低字节先加入, 然后高字节.ModBus网络是一个工业通信系统, 由带智能终真个可编法式控制器和计算机通过公用线路或局部专用线路连接而成.其系统结构既包括硬件、亦包括软件.它可应用于各种数据收集和过程监控.ModBus网络只有一个主机, 所有通信都由他发出.网络可支持247个之多的远程附属控制器, 但实际所支持的从机数要由所用通信设备决定.采纳这个系统, 各PC可以和中心主机交换信息而不影响各PC执行自己的控制任务.(1)ModBus的传输方式在ModBus系统中有2种传输模式可选择.这2种传输模式与从机PC通信的能力是。
工业控制已从单机控制走向集中监控、集散控制,如今已进入网络时代,工业控制器连网也为网络管理提供了方便。
Modbus就是工业控制器的网络协议中的一种。
1.协议概述
物理层:传输方式:RS485
通讯地址:0-247
通讯波特率:可设定
通讯介质:屏蔽双绞线
传输方式:主从半双工方式
协议在一根通讯线上使用应答式连接(半双工),这意味着在一根单独的通讯线上信号沿着相反的两个方向传输。
首先,主计算机的信号寻址到一台唯一的终端设备(从机),然后,在相反的方向上终端设备发出的应答信号传输给主机。
协议只允许在主计算机和终端设备之间,而不允许独立的设备之间的数据交换,这就不会在它们初始化时占据通讯线路,而仅限于响应到达本机的查询信号。
一个数据帧格式:
1位起始位,8位数据,1位或者无奇偶检验位、1位或者2位停止位。
一个数据包格式:
协议详细定义了校验码、数据格式、功能码等,这些都是特定数据交换的必要内容。
当数据帧到达终端设备时,它通过一个简单的“口”进入寻址到的设备,该设备去掉数据帧的“信封”(数据头),读取数据,如果没有错误,就执行数据所请求的任务,然后,它将自己生成的数据加入到取得的“信封”中,把数据帧返回给发送者。
返回的响应数据中包含了以下内容:终端从机地址(Address)、被执行了的命令(Function)、执行命令生成的被请求数据(Data)和一个校验码(Check)。
发生任何错误都不会有成功的响应。
地址(Address)域
地址域在帧的开始部分,由8位(0 ~ 255)组成,这些位标明了用户指定的终端设备的地址,该设备将接收来自与之相连的主机数据。
每个终端设备的地址必须是唯一的,仅仅被寻址到的终端会响应包含了该地址的查询。
当终端发送回一个响应,响应中的从机地址数据便告诉了主机哪台终端正与之进行通信。
功能(Function)域
功能域代码告诉了被寻址到的终端执行何种功能。
表1 – 1列出了部分常用的功能码、它们的意义及它们的初始功能。
表 1 – 1 功能码
数据域
数据域包含了终端执行特定功能所需要的数据或者终端响应查询时采集到的数据。
这
些数据的内容可能是数值、参考地址或者极限值。
例如:功能域代码告诉终端读取一个寄存器,数据域则需要指明从哪个寄存器开始及读取多少个数据,内嵌的地址和数据依照类型和从机之间的不同能力而有所不同。
校验域
该域允许主机和终端检查传输过程中的错误。
有时,由于电噪声和其它干扰,一组数据在从一个设备传输到另一个设备时在线路上可能会发生一些改变,出错校验能够保证主机或者终端不去响应那些传输过程中发生了改变的数据,这就提高了系统的安全性和效率,出错校验使用了16位循环冗余的方法。
[注] 发送序列总是相同的–地址、功能码、数据和与方向相关的出错校验。
错误检测
循环冗余校验(CRC)域占用两个字节,包含了一个16位的二进制值。
CRC值由传送设备计算出来,然后附加到数据帧上,接收设备在接收数据时重新计算CRC值,然后与接收到的CRC域中的值进行比较,如果这两个值不相等,就发生了错误。
CRC运算时,首先将一个16位的寄存器预置为全1,然后连续把数据帧中的8位字节与该寄存器的当前值进行运算,仅仅每个字节的8个数据位参与生成CRC,起始位和停止位以及可能使用的奇偶位都不影响CRC。
在生成CRC时,每个8位字节与寄存器中的内容进行异或,然后将结果向低位移位,高位则用“0”补充,最低位(LSB)移出并检测,如果是1,该寄存器就与一个预设的固定值进行一次异或运算,如果最低位为0,不作任何处理。
上述处理重复进行,直到执行完了8次移位操作,当最后一位(第8位)移完以后,下一个8位字节与寄存器的当前值进行异或运算,同样进行上述的另一个8次移位异或操作,当数据帧中的所有字节都作了处理,生成的最终值就是CRC值。
生成一个CRC的流程为:
1.预置一个16位寄存器为0FFFFH(全1),称之为CRC寄存器。
2.把数据帧中的第一个8位字节与CRC寄存器中的低字节进行异或运算,结果
存回CRC寄存器。
将CRC寄存器向右移一位,最高位填以0,最低位移出并
检测。
3.如果最低位为0:重复第2步(下一次移位)。
如果最低位为1:将CRC寄存器与一个预设的固定值(0A001H)进行异或运算。
1.重复第2步和第3步直到8次移位。
这样处理完了一个完整的八位。
2.重复第2步到第4步来处理下一个八位,直到所有的字节处理结束。
3.最终CRC寄存器的值就是CRC的值。
2.应用层功能详解
2.1 读保持寄存器(功能码03)
查询
功能码03H允许用户读取多个保持寄存器的内容。
主站设备可设从保持寄存器的任何起始地址读取多个寄存器的值。
表2 – 1 的例子是从03号从机读3个数据U1,U2,U3, 其中U1的地址为0001H, U2的地址为0002H, U3的地址为0003H,即寄存器起始地址为0001H,数据个数为0003H。
表2 – 1 读U1、U2、U3的查询数据帧
响应
响应包含从机地址、功能码、数据的数量和CRC错误校验。
表2 – 2的例子是读取U1,U2,U3的响应。
表 2 – 2读U1,U2,U3 的响应数据帧
2.2 预置多个寄存器(功能码10)
查询
功能码10H允许用户改变多个寄存器的内容,设备可从任何地址开始设置多个变量的值。
表2-3的例子是修改3号从站设备的负载监控1和负载监控2的动作及延时时间的设定值,其中负载监控1的动作设定值地址为2AH,延时时间的设定值为2BH,负载监控2的动作设定值地址为2CH,延时时间的设定值为2DH。
表2-3 修改负载监控1和负载监控2的动作值及延时时间的设定值
响应
响应包含从机地址、功能码、数据的数量和CRC错误校验。
表2 – 4的例子是修改负载监控1和负载监控2的动作值及延时时间的设定值的响应。
表2-4修改负载监控1和负载监控2的动作值及延时时间的设定值的响应
2.3 预置单个寄存器(功能码06)
查询
功能码06允许用户改变单个寄存器的内容。
表2-5的例子是修改03号从机过载动作设定值Ir1,其中Ir1地址是002EH.
表2-5修改过载动作设定值Ir1
响应
对于预置单个寄存器请求的正常响应是在寄存器值改变以后将接收到的数据传送回去。
表2-6修改过载动作设定值Ir1响应。