基于CP430的MODBUS通讯程序设计.docx
《基于CP430的MODBUS通讯程序设计.docx》由会员分享,可在线阅读,更多相关《基于CP430的MODBUS通讯程序设计.docx(28页珍藏版)》请在冰豆网上搜索。
![基于CP430的MODBUS通讯程序设计.docx](https://file1.bdocx.com/fileroot1/2023-2/21/17359c5d-cbdd-4ba4-a9ca-a465a79f0d0a/17359c5d-cbdd-4ba4-a9ca-a465a79f0d0a1.gif)
基于CP430的MODBUS通讯程序设计
江苏科技大学
本科毕业设计(论文)
学院电子信息学院
专业电气工程及其自动化
学生姓名于进
班级学号0745533140
指导教师袁文华
二零一一年五月
江苏科技大学毕业论文
基于CP430的MODBUS通讯程序设计
BasedontheCP430MODBUScommunicationprogramdesign
江苏科技大学
毕业设计(论文)任务书
学院名称:
电子信息学院专业:
电气工程及其自动化
学生姓名:
于进学号:
0745533140
指导教师:
袁文华职称:
讲师
2011年2月28日
毕业设计(论文)题目:
基于CP340的MODBUS通讯程序设计
一、毕业设计(论文)内容及要求(包括原始数据、技术要求、
达到的指标和应做的实验等)
1提供条件:
PLC软件及相关MODBUS通讯的资料。
2设计内容与要求:
(1)学习、理解S7-300PLC软件的使用;
(2)学习、理解MODBUS通讯的原理;
(3)结合MODBUS通讯的原理,利用S7-300PLC软件编写出程序;
(4)撰写论文,通过答辩。
二、完成后应交的作业(包括各种说明书、图纸等)
1.毕业设计论文一份(不少于1.5万字);
2.外文译文一篇(不少于5000英文单词);
3.包含任务书、开题报告、中期检查和前三项内容的光盘一张。
三、完成日期及进度
2011年3月21日至2011年6月17日,共13周。
进度安排:
3.14-3.28,熟悉任务要求,查阅资料,翻译外文资料;
3.28-4.18,学习、理解MODBUS通讯的原理;
4.18-4.30,学习、理解S7-300PLC软件的使用;
5.1-5.30,利用S7-300PLC软件,编写程序;
5.31-6.29,撰写毕业论文、答辩。
五.主要参考资料(包括书刊名称、出版年月等):
1.MODBUS国标参考资料。
2.西门子S7-300/400PLC编程与应用,刘华波,何文雪,王雪编著.
3.西门子S7-300/400PLC控制系统设计与应用,陈章平等编著
系(教研室)主任:
(签章)年月日
学院主管领导:
(签章)年月日
摘要
计算机技术的飞速发展,使得现代工业生产和控制系统变得越来越复杂性,同时骑可靠性、实时性、精确性要求也越来越高。
现场总线技术为控制系统性能提高提供了新的思路,发展现场总线技术的初衷是建立开放的控制通信网络。
由于历史原因,不同系统的现场总线协议差异很大。
不同总线协议应用范围也有所差异。
MODBUS协议定义了控制器能识别和使用的信息结构。
广泛用于工业通信领域,其优点是实时性好,可靠性高,适用于小到中等规模的数据传输,如典型应用于的可编程控制器(PLC)。
协议采用主机轮询机制,主设备发出查询请求,要求从设备执行某种动作;从设备收到查询请求后,识别是否本地数据执行相应的动作,组织应答,将执行的状况或相关数据反馈到主设备。
本文在研究Modbus协议规则,详细分析Modbus协议的原理,然后通过西门子STEP7软件,运用CP430做Modbus从站程序,实现Modbus从站接受检验功能。
关键字:
Modbus,CP430,从站,协议
Abstract
Therapiddevelopmentofcomputertechnology,makesthemodernindustrialproductionandcontrolsystemisbecomingmoreandmorecomplexitywhileridingareliability,real-time,andmoreandmoreisalsohighprecisionrequirements.TheModbustechnologyforcontrolsystemperformanceprovidesnewideas,improvethedevelopmentoftheModbustechnologyintendedtoestablishanopencontrolcommunicationnetwork.Owingtohistoricalreasons,thedifferentsystemsModbusagreementdifferenceisverybig.Differentbusagreementapplicationalsodifferent.
MODBUSagreementdefinesthecontrollercanidentifyanduseofinformationstructure.Widelyusedinindustrialcommunicationfield,itsadvantageisgoodreal-time,highreliability,applicabletosmalltomediumsizeofdatatransmission,suchasthetypicalapplicationinprogrammablecontroller(PLC).TheprotocolUSEShostpollingmechanism,themainequipmentandissuequeriesrequest,demandfromequipmentperformanaction;Afterreceivedfromthedevicequeries,identifywhethersomeactionlocaldataexecution,theorganizationresponse,willimplementationstatusorrelateddatafeedbacktothemainequipment.
Basedonthestudy,detailedanalysisModbusagreementrulestheprincipleofModbusagreementbySiemens,andthenCP430STEP7software,usingModbus,slavestationprogramdorealizeModbusfunctionsslavestationacceptinspection。
Keyword:
Modbus,CP430,slavestation,theagreement
第一章绪论
1.1课题研究
在现代化工业中,由于被控对象、测控装置等物理设备的地域分散性,以及控制与监控任务对实时性的要求,不同设别之间现场交互性息的传递越来越多。
但传统的工业控制系统软件存在一些问题。
不具备开放性,各个部分的联系过于紧密,使系统过于复杂,使系统的更新、扩展和升级变的非常困难,对系统任何一部分的修改都有可能对其他部分造成影响,从而导致大量且繁琐的软件和硬件的修改。
传统的工业控制软件开发中出现的另一个主要问题是软件的重复开打,软件不能够复用,资源不能共享,造成大量的人力和物理资源的浪费。
即使可以使用高级语言函数库使我们可以利用面向对象的继承等方法大量的重用源代码,但是这些复用只是对源代码级的复用而不是对可执行文件级的复用。
传统工业控制系统带来的不便,造成形成了大量的“孤岛信息”,但是,对于工业控制而言,各站点之间不是孤立的,它们必须可以相互配合、协调才能保证产品质量和实现连续生产。
另外,上级管理网业需要与子站交互数据,以实现全局的监控和优化。
然而,子站使采用不同开发平台和不用通讯协议组成的异构系统,可能由于不同的厂家和个位开发。
要为每种协议写一个转换接口或驱动是比较繁琐的,特别是在站点和协议较多的时候。
因此,怎样有效集成数据,避免信息孤岛的出现,是工业控制领域中常遇到的难点问题。
较为好的方法就是各站点都采用标准协议进行数据通讯,而不必为每一种协议开发一个通讯接口。
目前这方面的协议比较多,MODBUS就是其中一种。
ModBus协议定义了一个控制器能认识使用的消息结构,而不管它们是通过何种网络进行通信的,它制定了消息域的格局和内容的公共格式,描述了一个控制器请求访问其它设备的过程,回应来自其它设备的请求,以及如何侦测并记录错误信息。
通过此协议,控制器相互之间、控制器经由网络和其它设备之间可以完成信息和数据的交换与传送,使各种不同的公司和厂家的可编程顺序控制器(PLC)、RTU、SCADA系统、DCS或与兼容ModBus协议的第三方设备之间可以连成工业网络,构建各种复杂的监控系统,并利于系统的维护和扩展,这个通讯协议已广泛被国内外各行业作为系统集成的一种通用工业标准协议。
1.2国内外对于实现ModBus的现状
目前Modbus协议实现方式多为单片机和PLC。
1.2.1通过FPGA实现Modbus
有用FPGA实现的,ModBus协议的FPGA功能设计采用自顶向下的设计方法,根据功能要求先设计出由若干个功能模块组成的顶层原理框图,再把各个功能模块细化为子模块,对较复杂的把子模块继续划分成下级子模块,但是FPGA是门级编程,编写速度不快,它是基于SRAM编程的,其编程信息需要存放在外部存储器盛,需外部存储器芯片,使用方法复杂,保密性差。
1.2.2通过51单片机实现Modbus
通过51单片机实现的,有单片机实现设计简单,程序编写简单,成本低,但单片机主要在仪表和简单的控制电路上应用,相对于PLC,单片机控制速度慢,功能不强,精度低,不适合工业上的运用。
1.2.3用过PLC实现Modbus
用PLC来实现ModBus的程序设计,CP340针对MODBUS协议自由组织程序代码与从站进行通讯,根据需要支持功能码1,2,3,4,5,6,15,16,CRC校验,灵活应用,减少PLC内存资源;针对MODBUS协议自由组织程序代码与主站进行通讯,根据需要支持功能码1,2,3,4,5,6,15,16,主站可查询DI/DO,MVV区,AIVV区,DB区(生成标准MODBUS寄存器地址),灵活应用,减少PLC内存资源。
用CP340实现MODBUS简便,费用低廉,且复制性强。
1.3本文的组织结构
本文介绍了Modbus协议原理,STEP7软件如何实现CP430做Modbus从站,并得出仿真结果。
第1章、绪论。
接受Modbus协议的产生和国内外发展趋势。
第2章、Modbus协议简介。
介绍Modbus协议规范,协议报文结构、两种传输模式的消息帧结构,功能定义,纠错方法。
第3章、PLC软件介绍。
介绍STEP7软件的使用,各参数配置方法,主要功能函数实现方法。
第4章、程序运行流程图。
绘制出整个程序运行的流程图。
第5章、总结。
总结本课题所工作,及通过本课题的收获、讨论如何进行下一步工作。
第二章Modbus协议简介
2.1协议简介
Modbus协议是应用于电子控制器上的一种通用语言。
通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。
它已经成为一通用工业标准。
有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。
此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。
它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。
它制定了消息域格局和内容的公共格式。
当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。
如果需要回应,控制器将生成反馈信息并用Modbus协议发出。
在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。
这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。
2.1.1在Modbus网络上转输
标准的Modbus口是使用一RS-232C兼容串行接口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。
控制器能直接或经由Modem组网。
控制器通信使用主—从技术,即仅一设备(主设备)能初始化传输(查询)。
其它设备(从设备)根据主设备查询提供的数据作出相应反应。
典型的主设备:
主机和可编程仪表。
典型的从设备:
可编程控制器。
主设备可单独和从设备通信,也能以广播方式和所有从设备通信。
如果单独通信,从设备返回一消息作为回应,如果是以广播方式查询的,则不作任何回应。
Modbus协议建立了主设备查询的格式:
设备(或广播)地址、功能代码、所有要发送的数据、一错误检测域。
从设备回应消息也由Modbus协议构成,包括确认要行动的域、任何要返回的数据、和一错误检测域。
如果在消息接收过程中发生一错误,或从设备不能执行其命令,从设备将建立一错误消息并把它作为回应发送出去。
2.1.2在其它类型网络上转输
在其它网络上,控制器使用对等技术通信,故任何控制都能初始和其它控制器的通信。
这样在单独的通信过程中,控制器既可作为主设备也可作为从设备。
提供的多个内部通道可允许同时发生的传输进程。
在消息位,Modbus协议仍提供了主—从原则,尽管网络通信方法是“对等”。
如果一控制器发送一消息,它只是作为主设备,并期望从从设备得到回应。
同样,当控制器接收到一消息,它将建立一从设备回应格式并返回给发送的控制器
2.1.3查询—回应周期
图2-1主-从查询-回应周期表
(1)查询
查询消息中的功能代码告之被选中的从设备要执行何种功能。
数据段包含了从设备要执行功能的任何附加信息。
例如功能代码03是要求从设备读保持寄存器并返回它们的内容。
数据段必须包含要告之从设备的信息:
从何寄存器开始读及要读的寄存器数量。
错误检测域为从设备提供了一种验证消息内容是否正确的方法。
(2)回应
如果从设备产生一正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应。
数据段包括了从设备收集的数据:
象寄存器值或状态。
如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。
错误检测域允许主设备确认消息内容是否可用。
2.1.4主站/从站通信时序图
图2-2主站/从站通讯时序
2.1.5从站状态图
图2-3从站状态图
对上面的状态图的一些解释:
●状态“空闲”=没有等待的请求。
这是电源上电后的初始状态。
●当收到一个请求时,子节点在处理请求中要求的动作前检验报文包。
不同的错误可以发生于:
请求的格式错,非法动作,……当检测到错误时,必须向主节点发送应答。
●当要求的动作完成后,单播报文要求必须格式化一个应答并发往主节点。
●如果子节点在接收到的帧中检测到错误,则没有响应返回到主节点。
●任何子节点均应该定义并管理Modbus诊断计数器以提供诊断信息。
通过使用Modbus诊断功能码,可以得到这些计数值。
2.2总体描述
MODBUS协议定义了一个与基础通信层无关的简单协议数据单元(PDU)。
特定总线或网络上的MODBUS协议映射能够在应用数据单元(ADU)上引入一些附加域。
图2-4通用MODBUS帧
启动MODBUS事务处理的客户机创建MODBUS应用数据单元。
功能码向服务器指示将执行哪种操作。
MODBUS协议建立了客户机启动的请求格式。
用一个字节编码MODBUS数据单元的功能码域。
有效的码字范围是十进制1-255(128-255为异常响应保留)。
当从客户机向服务器设备发送报文时,功能码域通知服务器执行哪种操作。
向一些功能码加入子功能码来定义多项操作。
从客户机向服务器设备发送的报文数据域包括附加信息,服务器使用这个信息执行功能码定义的操作。
这个域还包括离散项目和寄存器地址、处理的项目数量以及域中的实际数据字节数。
在某种请求中,数据域可以是不存在的(0长度),在此情况下服务器不需要任何附加信息。
功能码仅说明操作。
如果在一个正确接收的MODBUSADU中,不出现与请求MODBUS功能有关的差错,那么服务器至客户机的响应数据域包括请求数据。
如果出现与请求MODBUS功能有关的差错,那么域包括一个异常码,服务器应用能够使用这个域确定下一个执行的操作。
例如,客户机能够读一组离散量输出或输入的开/关状态,或者客户机能够读/写一组寄存器的数据内容。
当服务器对客户机响应时,它使用功能码域来指示正常(无差错)响应或者出现某种差错(称为异常响应)。
对于一个正常响应来说,服务器仅对原始功能码响应。
图2-5Modbus事物处理(无差错)
图2-6Modbus事物处理(异常响应)
2.3两种传输方式
控制器能设置为两种传输模式(ASCII或RTU)中的任何一种在标准的Modbus网络通信。
用户选择想要的模式,包括串口通信参数(波特率、校验方式等),在配置每个控制器的时候,在一个Modbus网络上的所有设备都必须选择相同的传输模式和串口参数。
2.3.1RTU模式
当控制器设为在Modbus网络上以RTU(远程终端单元)模式通信,在消息中的每个8Bit字节包含两个4Bit的十六进制字符。
这种方式的主要优点是:
在同样的波特率下,可比ASCII方式传送更多的数据。
代码系统
•8位二进制,十六进制数0...9,A...F
•消息中的每个8位域都是一个两个十六进制字符组成
每个字节的位
•1个起始位
•8个数据位,最小的有效位先发送
•1个奇偶校验位,无校验则无
•1个停止位(有校验时),2个Bit(无校验时)
错误检测域
•CRC(循环冗长检测)
2.3.2ASCII传输模式
当控制器设为在Modbus网络上以ASCII(美国标准信息交换代码)模式通信,在消息中的每个8Bit字节都作为两个ASCII字符发送。
这种方式的主要优点是字符发送的时间间隔可达到1秒而不产生错误。
代码系统
•十六进制,ASCII字符0...9,A...F
•消息中的每个ASCII字符都是一个十六进制字符组成
每个字节的位
•1个起始位
•7个数据位,最小的有效位先发送
•1个奇偶校验位,无校验则无
•1个停止位(有校验时),2个Bit(无校验时)
错误检测域
•LRC(纵向冗长检测)
2.3.2.1ASCII报文帧
由发送设备将Modbus报文构造为带有已知起始和结束标记的帧。
这使设备可以在报文的开始接收新帧,并且知道何时报文结束。
不完整的报文必须能够被检测到而错误标志必须作为结果被设置。
报文帧的地址域含有两个字符。
在ASCII模式,报文用特殊的字符区分帧起始和帧结束。
一个报文必须以一个‘冒号’(:
)(ASCII十六进制3A)起始,以‘回车-换行’(CRLF)对(ASCII十六进制0D和0A)结束。
对于所有的域,允许传送的字符为十六进制0–9,A–F(ASCII编码)。
设备连续的监视总线上的‘冒号’字符。
当收到这个字符后,每个设备解码后续的字符一直到帧结束。
报文中字符间的时间间隔可以达一秒。
如果有更大的间隔,则接受设备认为发生了错误。
下图显示了一个典型的报文帧
必然的,ModbusASCII帧的最大尺寸为513个字符
图2-7ASCII报文帧
2.3.2.2ASCII传输模式状态图
图2-8ASCII传输状态图
上面状态图的一些解释:
●“空闲”态是没有发送和接收报文要处理的正常状态。
●每次接收到":
"字符表示新的报文的开始。
如果在一个报文的接收过程中收到该字符,则当前地报文被认为不完整并被丢弃。
而一个新的接收缓冲区被重新分配。
●检测到帧结束后,完成LRC计算和检验。
然后,分析地址域以确定帧是否发往此设备,如果不是,则丢弃此帧。
为了减少接收处理时间,地址域可以在一接到就分析,而不需要等到整个帧结束。
2.4LRC校验
使用ASCII模式,消息包括了一基于LRC方法的错误检测域。
LRC域检测了消息域中除开始的冒号及结束的回车换行号外的内容。
LRC域是一个包含一个8位二进制值的字节。
LRC值由传输设备来计算并放到消息帧中,接收设备在接收消息的过程中计算LRC,并将它和接收到消息中LRC域中的值比较,如果两值不等,说明有错误。
LRC方法是将消息中的8Bit的字节连续累加,丢弃了进位。
LRC简单函数如下:
staticunsignedcharLRC(auchMsg,usDataLen)
unsignedchar*auchMsg;/*要进行计算的消息*/
unsignedshortusDataLen;/*LRC要处理的字节的数量*/
{unsignedcharuchLRC=0;/*LRC字节初始化*/
while(usDataLen--)/*传送消息*/
uchLRC+=*auchMsg++;/*累加*/
return((unsignedchar)(-((char_uchLRC)));
}
2.5功能码定义
2.5.1功能码分类
有三类MODBUS功能码。
它们是:
(1)公共功能码
●是较好地被定义的功能码,
●保证是唯一的,
●MODBUS组织可改变的,
●公开证明的,
●具有可用的一致性测试,
●MBIETFRFC中证明的,
●包含已被定义的公共指配功能码和未来使用的未指配保留供功能码。
(2)用户定义功能码
●有两个用户定义功能码的定义范围,即65至72和十进制100至110。
●用户没有MODBUS组织的任何批准就可以选择和实现一个功能码
●不能保证被选功能码的使用是唯一的。
●如果用户要重新设置功能作为一个公共功能码,那么用户必须启动RFC,以便将改变引入公共分类中,并且指配一个新的公共功能码。
(3)保留功能码
一些公司对传统产品通常使用的功能码,并且对公共使用是无效的功能
2.5.2功能码定义表
ModBus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。
其系统结构既包括硬件、亦包括软件。
它可应用于各种数据采集和过程监控。
下表2-1是ModBus的功能码定义。
表2-1功能码定义表
功能码
名称
作用
01
读取线圈状态
取得一组逻辑线圈的当前状态(ON/OFF)
02
读取输入状态
取得一组开关输入的当前状态(ON/OFF)
03
读取保存寄存器
在一个或多个保持寄存器中取得当前的二进制符
04
读取输入寄存器
在一个或多个输入寄存器中取得当前的二进制值
05
设置单线圈
强制一个逻辑线圈的通断状态
06
预设单寄存器
把具体二进制值装入一个保持寄存器
07
读取异常状态
取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定,用户逻辑可以将这些线圈定义,以说明