ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:188.66KB ,
资源ID:25056615      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25056615.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(modbus通信协议在tcp ip上的实现本科学位论文.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

modbus通信协议在tcp ip上的实现本科学位论文.docx

1、modbus通信协议在tcp ip上的实现本科学位论文MODBUS通信协议在TCP/IP上的实现摘要: 伴随着批评家的鄙夷和使用者的称赞, MODBUS/TCP 的确已不再是新生事物。更何况对于自 1979 年就开始使用的 MODBUS协议,为其增加基于以太网 TCP/IP 的传输技术是绝对由必要的。MODBUS协议本身的 MODBUS 服务和对象模式在MODBUS /TCP 中都没有改变,并简单地采用 TCP/IP 作为数据传输协议。这使得MODBUS拥有了一系列协议,目前包括传统的MODBUS -RTU 、 MODBUS -Plus 和MODBUS -TCP 。所有这些协议都使用相同的应用

2、层协议规定了统一的用户数据和通讯服务。分析MODBUS/TCP协议构成,通过采用套接字与多线程技术,设计出基于MODBUS /TCP协议的工业以太网通信网络,分析出客户端/服务器的通信模式的主要特性,并给出其具体实现过程。所构建的基于MODBUS /TCP与MODBUS的工业以太网可实现工业现场数据采集、处理及通信等功能,为工业自动化领域的实时网络化通信提供了一种有效的解决方案。关键词:MODBUS/TCP 、以太网 、 套接字、 工业 、 TCP/IPMODBUS protocol implementate in the TCP/IPAbstract: With the contempt o

3、f critics and users praise, MODBUS / TCP is indeed no longer a novelty. Moreover, since 1979 began to use the MODBUS protocol, for increase in Ethernet-based TCP / IP transmission technology is absolutely the necessary. MODBUS protocol itself and the object model service MODBUS / TCP were not change

4、d, and simply use TCP / IP as a data transfer protocol. This makes the MODBUS have a series of agreements, currently including traditional MODBUS-RTU, MODBUS-Plus and MODBUS-TCP. All these protocols use the same application layer protocol - provides a unified user data and communication services. An

5、alysis of MODBUS / TCP protocol composition, through the use of socket and multi-threading technology, designed based on MODBUS / TCP protocol Ethernet communications network, analyze the client / server model of the main characteristics of the communication, and gives specific implementation proces

6、s. Constructed based on MODBUS / TCP and MODBUS industrial Ethernet can achieve industrial data acquisition, processing and communications functions for industrial automation, real-time communication network provides an effective solution.Keywords: MODBUS / TCP、 Ethernet 、sockets 、industry 、TCP / IP

7、 第1章 引言1.1 研究背景在现代化工业控制中, 由于被控对象、测控装置等物理设备的地域分散性, 以及控制与监控等任务对实时性的要求, 不同设备之间现场交互性信息的传递越来越多。但传统的工业控制系统软件存在着一些问题。不具备开放性,各个部分的联系过于紧密,使系统过于复杂。这样使系统的更新、扩展和升级变得非常困难,对系统任何一部分的修改都有可能对其它部分造成影响,从而导致大量且烦琐的软件和硬件的修改。传统的工业控制软件开发中出现的另一个主要问题是软件的重复开发,软件不能够复用,资源不能共享,造成大量的人力与物力资源的浪费。虽然使用高级语言函数库让我们可以利用面向对象的继承等方法大量重用源代码,

8、但这些复用只是对源代码级的复用而不是对可执行文件级的复用。由于传统工业控制系统的带来的不便, 造成形成了大量的“信息孤岛”,但是,对于工业控制而言,各站点之间不是孤立的,它们必须互相配合、协调才能保证产品质量和实现连续生产,这就需要各站点能互通讯息。另外,上级管理网也需要与子站交互数据,以实现全局的监控和优化。然而,子站是采用不同开发平台、不同通讯协议组成的异构系统,可能由不同的厂家和个为开发。要为每种协议写一个转换接口或驱动是比较繁琐的,特别是在站点和协议较多的时候。因此,怎样有效集成数据,避免信息孤岛的出现,是工业控制领域中常遇到难点问题之一。比较好的方法是各站点都采用标准协议进行数据通讯

9、,而不必为每一种协议开发一个通讯接口。目前这方面的协议比较多,MODBUS 就是其中的一种。MODBUS是一种全开放, 免费提供,非常容易理解和实施的协议, 从70 年代诞生以来,在制造业、电力、水电、冶金、矿山、交通、基础设施的工业领域中的数据采集和过程控制得到了广泛应用, 形成了一种事实上的工业标准。同时, 随着计算机网络技术的迅速发展, 信息技术已逐步进入工业自动化领域, 以太网技术以高速率、低成本、应用广泛等优势, 促进了它在工控领域的应用, 形成了当前的工业以太网技术。它允许MODBUS协议与以太网TCP/IP 结合, 在TCP 帖中嵌MODBUS信息帧, 成为MODBUS TCP/

10、IP, 在工业自动化领域中, 具有很高的性能价格比, 是一种真正开放的理想解决方案。1.2 国内外发展现状目前在全球范围内已经安装了8,000,000套MODBUS串行链路设备和800,000套MODBUS TCP/IP设备,基于MODBUS TCP/IP和Web技术的“透明就绪”的广泛应用可以被归类到三大市场:能源与基础设施,工业,以及建筑行业。 在能源与基础设施市场,机场、隧道、数字通讯、电信、水处理、油气、能源等行业大大得益于“透明就绪”的远程控制能力 在工业市场,食品与饮料、微电子、制药、汽车等行业则高度的受益于“透明就绪”中从IT系统贯通到车间层TCP/IP以太网的统一全局网络架构

11、在建筑市场,医疗机构、公用建筑、民用住宅、船舶等行业在“透明就绪”中使用他们原有的TCP/IP以太网网络,从而大大的降低了实施费用1.3 主要技术路线MODBUS/TCP协议是在MODBUS协议的基础上发展而来的。为了尽量地使用已有成果,MODBUS / TCP协议的实现是在不改变原有MODBUS协议的基础上,只是将它的传输层协议简单的移植到TCP/IP上。因此在TCP/IP网络中MODBUS /TCP使用传输控制协议(TCP)进行MODBUS应用协议的数据传输。参数和数据使用封装的方法嵌入到TCP报文的用户数据容器中进行传送。另外地址和校验在MODBUS /TCP中也由底层的TCP协议来完成

12、。由于传输层以上遵循MODBUS协议,所以采用C/S结构,在数据传输前进行之前,需要在客户和服务器之间建立一个TCP/IP连接。服务器使用端口502作为MODBUS /TCP连接的端口。连接的建立通常由TCP/IP的Socket接口的软件协议自动实现的,因此对应用完全透明。一旦客户和服务器之间的TCP/IP连接建立,同样的连接可以根据要求的方向用来传输任意数量的用户数据。客户和服务器还可以同时建立多个TCP/IP连接,最大的连接数量取决于TCP/IP接口的规范。在输入输出数据循环传输的情况下,永久的连接通常维持在客户和服务器之间,只有在发生特殊事件而有必要传送参数和诊断报文时,连接才能在每一次

13、数据传送后被关闭,需要时再次建立。这也是MODBUS /TCP在工业以太网中采用TCP作为为传输层协议而不采用速度更快的UDP协议的原因所在。虽然MODBUS /TCP由于在传输层采用TCP协议,而使其不得不在传输层协议以下的诸层采取更有效的实时性策略。但与IDA方案相比,MODBUS /TCP在其开放性、简单和稳定的性能上具有优势,是一个具有较高的性能价格比的工业以太网方案。1.4 本文的工作本文主要告诉读者该课题的实现过程。在看到一个用软件编程实现的课题时,应该有的一些思路,需要掌握的一些知识。在拿到一个课题时,首先需要为课题的实现构建一个模型,对于该课题而言,应想到怎样在一台设备上实现M

14、ODBUS协议,同时,该课题是实现通信,那么就必然不只一台设备,继而想到两台设备间的通信模型,最后到多台设备的通信结构。建构好模型后,就应该查找相关的理论知识。本文涉及到的理论知识主要包括MODBUS协议结构以及套接字的原理。掌握原理后,接下来就应该设计实现流程。对于软件开发而言,编程环境和编程语言很重要,这会对工作的复杂程度带来很大的影响。选择好编程工具后,就要想着怎样实现课题,应构思一个流程。本文首先需要将TCP/IP应用层以下作为一个整体,而这个整体和上层的接口即是套接字接口。再将套接字接口与应用层MODBUS协议联系,即可实现该课题的要求。摘取程序中最重要的部分进行分析。能够让读者清楚

15、的认识到整个编程实例的精髓。最后对整个课题的实现进行一个总结,带给读者一个实现该课题的基本框架,以及在实现该课题过程中自己的一些见解以、疑问及学到的知识和技术。提出自己对该项技术的展望,以及这项技术的发展前景。1.5 论文的结构安排本论文共分五章,各章主要内容如下:第一章: 介绍本论文所研究的背景,即该课题的实际应用价值。第二章: 构建了实现课题的模型,从一台设备上实现MODBUS协议,到两台设备通信,最后构建多台设备的整体通信结构。第三章:为该课题建立理论基础。该课题涉及到的理论主要包括MODBUS协议结构及套接字,分析它们之间的关系所在。第四章: 提出实现该课题的主要流程,分为几个步骤,每

16、个步骤应做的工作,以及用到的编程环境和编程语言。第五章:程序实验结果演示,并对MODBUS TCP/IP报文进行分析,通过分析体现MODBUS协议的数据交换过程。第六章: 总结与展望。第二章 基于TCP/IP模型的MODBUS通信协议2.1 一台设备上的MODBUS模型构建2.1.1 用户应用层它和设备应用相对应,与设备完全无关。2.1.2 通信应用层一个MODBUS设备可提供一个客户机或服务器的MODBUS接口。可提供一个MODBUS后端接口,间接地允许对用户应用对象的访问。此接口由四个区域组成:离散量输入、离散量输出(线圈)、输入寄存器和输出寄存器。必须进行这个接口与用户应用数据直接的映射

17、。可将MODBUS通信应用层分为四个小模块,如下:1、MODBUS客户机MODBUS客户机允许用户应用显式控制与远程设备的信息交换。MODBUS客户机根据用户应用向MODBUS客户机接口发送的要求中所包含的参数来建立一个MODBUS请求。2、MODBUS客户机接口MODBUS客户机接口提供一个接口,使得用户应用能够生成各类MODBUS服务的请求,该服务包括对MODBUS应用对象的访问。3、MODBUS服务器收到一个MODBUS请求以后,模块激活一个本地操作进行读、写、或完成其他操作。这些操作的处理对应用程序开发员来说都是透明的。MODBUS服务器的主要功能是等待来自TCP502口的MODBUS

18、请求,处理这一请求,根据设备的现状生成MODBUS应答。4、MODBUS后端接口MODBUS后端接口是一个从MODBUS服务器到定义应用对象的用户应用之间的接口。2.1.3 TCP管理层报文传输服务的主要功能之一是管理通信的建立和结束,及管理在所建立的TCP连接上的数据流。TCP管理层进行两方面的管理:1、连接管理在客户机和服务器的MODBUS模块之间的通信需要TCP管理模块。它负责全面管理报文传输TCP连接。TCP502端口的监听是为MODBUS通信保留的。客户机和服务器均应向用户提供对TCP端口号进行MODBUS参数配置的可能性。2、访问控制模块管理在某些至关重要的场合,必须禁止无关的主机

19、对设备内部数据的访问。这既是需要的安全模式,也是在需要时实现安全处理的原因。2.1.4 TCP/IP栈层TCP/IP栈提供了一个接口,用来管理连接、发送和接收某些参数配置。TCP连接管理模块采用栈接口,即BSD套接字接口来与TCP/IP栈进行通信。可以对TCP/IP栈进行参数配置,以适用对不同产品或系统的不同特定约束进行数据流控制、地址管理和连接管理。2.2 两台设备间的通信模型构建在TCPIP网络应用中,通信的两个进程相互作用的主要模式是客户机服务器模式,即客户端向服务器发出请求,服务器接收到请求后提供相应的服务。客户机/服务器模式在操作过程中采取的是主动请求方式。 服务器方:首先服务器方要

20、启动,侦听客户方是否有连接请求,并根据请求提供相应服务:a打开一通信通道并告知本地主机,它愿意在某一公认地址端口上接受客户请求,或者由开发人员自己指定端的地址,此时端口地址应大于1 024B,一般不超过5 000B;b等待客户请求到达该端口;c接收到重复服务请求时,处理该请求并发送应答信号。接收并发服务请求,需要激活一个新进程来处理这个客户请求,并不需要对其他请求作出应答。服务完成后,关闭此新进程与客户的通信链路,并终止;d返回第二步,等待另外的客户请求;e关闭服务器。 客户方:a打开一通信通道,并连接到服务器所在的主机的特定端口;b向服务器发出服务请求报文,等待并接收应答;继续提出请求;C,

21、请求结束后关闭通信通道并终止。从以上描述过程可以看出:客户机与服务器进程的作用是非对称的,因此编码不同,而且服务进程要先于客户请求启动。这个客户机/服务器模型基于4种报文类型:MODBUS请求:MODBUS请求是客户机在网络上发送用来启动事务处理的报文。MODBUS证实:MODBUS证实是在客户机侧接收的响应报文。MODBUS指示:MODBUS指示是服务器侧接受的请求报文。MODBUS响应:MODBUS响应时服务器发送的响应报文。具体模型如下图所示:2.3 总体通信模型构建如下图2、3所示,MODBUS TCP/IP 的通信系统可以包括不同类型的设备:1、连接至TCP/IP网络的MODBUS

22、TCP/IP客户机和服务器设备。2、互联设备。第三章 MODBUS在TCP/IP上的实现与分析3.1 应用层MODBUS协议描述3.1.1 TCP/IP上的MODBUS数据应用单元MODBUS TCP/IP 是在TCP/IP 网络协议加上MODBUS 应用层协议, 形成五层开放式体系结构, 其中MODBUS TCP 数据帧包括报文头、功能代码和数据三个部分, 其结构如图1 所示。3.1.2 MBAP报文头描述MBAP Header 由7 个字节组成,是MODBUS TCP 协议的头部。四个域如图2 所示,Transaction Identifier 为传输标志,Protocol Identif

23、ier 为协议标志,Length 是长度域,Unit Identifier 是单元标志。MBAP报文结构如下所示:MBAP报文头包括的各个域的功能描述如下表:域长度描述客户机服务器事务处理标识符2 byteMODBUS请求/响应事务处理的识别码客户机启动服务器从接受的请求中重新复制协议标识符2 byte0=MODBUS协议客户机启动服务器从接受的请求中重新复制长度2 byte随后字节的数量客户机启动服务器启动(响应)单元标识符1 byte串行链路或其他总线上连接的远程从站的识别客户机启动服务器从接受的请求中重新复制3.2 套接字简介套接字的概念与文件句柄类似,一个套接字就是一个通信标识,由一个

24、短整数表示,实际上就是一个句柄,代表网络协议中的一组数据,该数据包含了通信双方的IP地址和当前的连接状态等信息。我们知道,如果一个文件被打开,可以通过文件句柄对文件进行读写操作,套接字也一样,只不过套接字提供的函数更多一些。套接字存在于通信区域中,由协议、地址、端口来描述并惟一确定,根据传输协议的不同,套接字可分为3种类型:流式套接字、数据报套接字和原始套接字。流式套接字提供了一个面向连接的、可靠的、数据无错且按顺序接收的服务,这种套接字对应的是面向连接的传输协议,如TCP/IP协议簇中的TCP。数据报套接字提供了一个无连接服务,不提供无错保证,数据可能丢失或重复,且接受顺序混乱,该套接字所对

25、应的是无连接传输协议,如TCP/IP协议簇中的UDP。原始套接字允许直接访问低层的协议,如IP、ICMP协议,该套接字常用于访问服务器中配置的新设备。WinSock提供了许多套接字函数,它们并不代表协议的某一个层次,其实质就是一组编程接口,用户利用这些函数可以很容易地进行编程。该程序设计中用到的套接字如下所示:(1)socket()函数Socket()函数用于创建一个套接字。返回的一个套接字号被创建者用来访问该套接字。套接字创建时没有地址(IP地址和端口号)。直到一个端口被绑定到该套接字时,方可接受数据。socket函数用于创建一个套接字。语法:SOCKET socket ( Int af ,

26、 Int type, Int protocol );af:标识一个地址家族,通常为AF_INET。type:标识套接字类型,如果为SOCK_STREAM,表示流式套接字;如果为SOCK_DGRAM,表示数据报套接字。protocol:标识一个特殊的协议被用于这个套接字,通常为0,表示采用默认的TCP/IP协议。(2)bind()函数Bind()函数用于将套接字绑定到一个已知的地址上。bind()函数在套接字与所指定的端口间建立连接。语法:int bind ( SOCKET s, const struct sockaddr FAR* name, int namelen );s:是一个套接字。na

27、me:是一个sockaddr结构指针,该结构中包含了要绑定的地址和端口号。namelen:确定name缓冲区的长度。在定义一个套接字后,需要调用bind函数为其指定本机地址、协议和端口号。例如,创建一个套接字s,将其绑定到502端口上,其代码如下:int port = 502;SOCKET s = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);sockaddr_in addr;addr.sin_family = AF_INET;/内部网络协议TCPUDP等addr.sin_port = htons(port); /端口号addr.sin_addr.s_addr

28、= htonl(INADDR_ANY);if (bind(s,(LPSOCKADDR)&addr,sizeof(addr)=0) MessageBox(成功);(3)connect()函数为了初始化一个连接,客户机必须发送connect()函数来制定套接字号、远程IP地址和远程监听端口号。语法:int connect (SOCKET s,const struct sockaddr FAR* name, int namelen);s:标识一个套接字。name:套接字s想要连接的主机地址和端口号。namelen:name缓冲区的长度。(4)listen函数listen函数用于将套接字置入监听模式。

29、语法:int listen ( SOCKET s, int backlog );s:套接字。backlog:表示等待连接的最大队列长度。例如,如果backlog被设置为3,此时有4个客户端同时发出连接请求,那么前3个客户端连接会放置在等待队列中,第4个客户端会得到错误信息。(5)accept函数 为了完成连接,服务器必须发送accept()函数来指定先前在listen()调用中所指定的套接字号。一个新的套接字被创建,并具有与初始套接字相同的特性。这个新的套接字连接到客户机的套接字,而将套接字号返回到服务器。于是,释放出示套接字,以便为其他欲与该服务器连接的客户机使用。语法:SOCKET acc

30、ept ( SOCKET s, struct sockaddr FAR* addr, int FAR* addrlen);s:是一个套接字,它应处于监听状态。addr:是一个sockaddr_in结构指针,包含一组客户端的端口号、IP地址等信息。addrlen:用于接收参数addr的长度。(6)send()和recv()函数TCP连接建立以后,数据即可被传送。将send()和recv()函数专门设计成和已经连接的套接字一起使用。(7)close()函数 一旦不使用,通过该函数关闭套接字。3.3 应用程序与套接字关系1、系统调用 大多数操作系统使用系统调用(system call)的机制在应用程

31、序和操作系统之间传递控制权。对程序员来说,每一个系统调用和一般程序设计中的函数调用非常相似,只是系统调用是将控制权传递给了操作系统。如下图所示: 2、应用编程接口 API (Application Programming Interface) 如上图所示,当某个应用进程启动系统调用时,控制权就从应用进程传递给了系统调用接口。操作系统将此接口再将控制权传递给计算机的操作系统。此调用转给某个内部过程,并执行所请求的操作。内部过程一旦执行完毕,控制权就又通过系统调用接口返回给应用进程。 由上可知,系统调用接口实际上就是应用进程的控制权和操作系统的控制权进行转换的一个接口,即应用编程接口 API。套接字(Socket)就是由操作系统提供的一组有关TCP/IP的API。3、套接字(Socket)的作用 如下图所示,应用进程通过套接字接入到网络。第四章 课题的具体实现流程4.1 编程环境4.1.1 VC+与面向对象Windows编程采用的是面向对象的方法(Object O

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1