modbus通信协议实现范文

更新时间:2023-08-19 06:50:01 阅读量: 高中教育 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

此文档仅供参考,文中涉及学校、人名等纯属虚构,本人不承担任何责任!

******************* 题 目:

毕业设计说明书

MODBUS通信协议在TCP/IP上的实现

专 业:电子信息工程 学 号:********* 姓 名:******** 指导教师:****

完成日期:2010年5月14日

此文档仅供参考,文中涉及学校、人名等纯属虚构,本人不承担任何责任!

*************

毕业论文(设计)任务书

论文(设计)题目:

学号: 姓名: 专业: 指导教师: 系主任:

一、主要内容及基本要求

二、重点研究的问题

此文档仅供参考,文中涉及学校、人名等纯属虚构,本人不承担任何责任!

三、进度安排

四、应收集的资料及主要参考文献

此文档仅供参考,文中涉及学校、人名等纯属虚构,本人不承担任何责任!

*********

毕业论文(设计)评阅表

学号 姓名 专业

毕业论文(设计)题目:

此文档仅供参考,文中涉及学校、人名等纯属虚构,本人不承担任何责任!

********

毕业论文(设计)鉴定意见

学号: 姓名: 专业: 毕业论文(设计说明书) 页 图 表 张

此文档仅供参考,文中涉及学校、人名等纯属虚构,本人不承担任何责任!

指导教师评语

指导教师: 年 月 日

答辩简要情况及评语

答辩小组组长: 年 月 日

答辩委员会意见

答辩委员会主任: 年 月 日

此文档仅供参考,文中涉及学校、人名等纯属虚构,本人不承担任何责任!

目 录

第一章 引言 ............................................................................................11

1.1 研究背景..................................................................................................................11 1.2 国内外发展现状..................................................................... 错误!未定义书签。 1.3 主要技术路线......................................................................... 错误!未定义书签。 1.4 本文的工作............................................................................. 错误!未定义书签。 1.5 论文的结构安排..................................................................... 错误!未定义书签。

第二章 MODBUS通信模型的构建 ................................... 错误!未定义书签。

2.1 一台设备上的MODBUS模型构建 ..................................... 错误!未定义书签。 2.1.1 用户应用层.................................................................. 错误!未定义书签。

2.1.2 通信应用层.................................................................. 错误!未定义书签。 2.1.3 TCP管理层 ................................................................. 错误!未定义书签。 2.1.4 TCP/IP栈层................................................................. 错误!未定义书签。 2.3 两台设备间通信模型构建..................................................... 错误!未定义书签。 2.3 多台设备总体通信模型构建................................................. 错误!未定义书签。

第三章 MODBUS在TCP/IP上的实现与分析 ..........错误!未定义书签。

3.1 应用层MODBUS协议描述 ................................................. 错误!未定义书签。

3.1.1 TCP/IP上的MODBUS应用数据单元 ..................... 错误!未定义书签。 3.1.2 MBAP报文头描述 ..................................................... 错误!未定义书签。 3.2 套接字简介............................................................................. 错误!未定义书签。 3.3 应用程序与套接字关系......................................................... 错误!未定义书签。

第四章 课题的具体实现流程 ......................................错误!未定义书签。

4.1 编程环境............................................................................... 错误!未定义书签。

4.1.1 Visual C++ 与面向对象 ........................................... 错误!未定义书签。 4.1.2 利用Visual C++ /MFC开发程序 ............................ 错误!未定义书签。 4.2 编程语言............................................................................. 错误!未定义书签。 4.3 套接字实现流程................................................................. 错误!未定义书签。 4.4 MODBUS协议编程体现 .................................................. 错误!未定义书签。

此文档仅供参考,文中涉及学校、人名等纯属虚构,本人不承担任何责任!

第五章 对程序实现结果的分析 ..................................错误!未定义书签。

5.1 程序实现结果演示 ............................................................. 错误!未定义书签。 5.2 对MODBUS TCP/IP报文的分析 ................................... 错误!未定义书签。

第六章 总结与展望 .....................................................错误!未定义书签。

6.1 总结......................................................................................... 错误!未定义书签。 6.2 展望......................................................................................... 错误!未定义书签。

注释 ...............................................................................错误!未定义书签。 参考文献........................................................................错误!未定义书签。 附录 ...............................................................................错误!未定义书签。

此文档仅供参考,文中涉及学校、人名等纯属虚构,本人不承担任何责任!

MODBUS通信协议在TCP/IP上的实现

摘要: 伴随着批评家的鄙夷和使用者的称赞, MODBUS/TCP 的确已不再是新生事物。

更何况对于自 1979 年就开始使用的 MODBUS协议,为其增加基于以太网 TCP/IP 的传输技术是绝对由必要的。MODBUS协议本身的 MODBUS 服务和对象模式在MODBUS /TCP 中都没有改变,并简单地采用 TCP/IP 作为数据传输协议。这使得MODBUS拥有了一系列协议,目前包括传统的MODBUS -RTU 、 MODBUS -Plus 和MODBUS -TCP 。所有这些协议都使用相同的应用层协议-规定了统一的用户数据和通讯服务。分析MODBUS/TCP协议构成,通过采用套接字与多线程技术,设计出基于MODBUS /TCP协议的工业以太网通信网络,分析出客户端/服务器的通信模式的主要特性,并给出其具体实现过程。所构建的基于MODBUS /TCP与MODBUS的工业以太网可实现工业现场数据采集、处理及通信等功能,为工业自动化领域的实时网络化通信提供了一种有效的解决方案。

关键词:MODBUS/TCP 、以太网 、 套接字、 工业 、 TCP/IP

此文档仅供参考,文中涉及学校、人名等纯属虚构,本人不承担任何责任!

MODBUS protocol implementate in the TCP/IP

Abstract: With the contempt of 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 changed, 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. Analysis 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 process. 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

此文档仅供参考,文中涉及学校、人名等纯属虚构,本人不承担任何责任!

第1章 引言

1.1 研究背景

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

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

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

此文档仅供参考,文中涉及学校、人名等纯属虚构,本人不承担任何责任!

1.2 国内外发展现状

目前在全球范围内已经安装了8,000,000套MODBUS串行链路设备和800,000套MODBUS TCP/IP设备,基于MODBUS TCP/IP和Web技术的“透明就绪”的广泛应用可以被归类到三大市场:能源与基础设施,工业,以及建筑行业。

◆ 在能源与基础设施市场,机场、隧道、数字通讯、电信、水处理、油气、能源等行业大大得益于“透明就绪”的远程控制能力

◆ 在工业市场,食品与饮料、微电子、制药、汽车等行业则高度的受益于“透明就绪”中从IT系统贯通到车间层TCP/IP以太网的统一全局网络架构 ◆ 在建筑市场,医疗机构、公用建筑、民用住宅、船舶等行业在“透明就绪”中使用他们原有的TCP/IP以太网网络,从而大大的降低了实施费用

1.3 主要技术路线

MODBUS/TCP协议是在MODBUS协议的基础上发展而来的。为了尽量地使用已有成果,MODBUS / TCP协议的实现是在不改变原有MODBUS协议的基础上,只是将它的传输层协议简单的移植到TCP/IP上。因此在TCP/IP网络中MODBUS /TCP使用传输控制协议(TCP)进行MODBUS应用协议的数据传输。参数和数据使用封装的方法嵌入到TCP报文的用户数据容器中进行传送。另外地址和校验在MODBUS /TCP中也由底层的TCP协议来完成。由于传输层以上遵循MODBUS协议,所以采用C/S结构,在数据传输前进行之前,需要在客户和服务器之间建立一个TCP/IP连接。服务器使用端口502作为MODBUS /TCP连接的端口。连接的建立通常由TCP/IP的Socket接口的软件协议自动实现的,因此对应用完全透明。

一旦客户和服务器之间的TCP/IP连接建立,同样的连接可以根据要求的方向用来传输任意数量的用户数据。客户和服务器还可以同时建立多个TCP/IP连接,最大的连接数量取决于TCP/IP接口的规范。在输入输出数据循环传输的情况下,永久的连接通常维持在客户和服务器之间,只有在发生特殊事件而有必要传送参数和诊断报文时,连接才能在每一次数据传送后被关闭,需要时再次建立。

此文档仅供参考,文中涉及学校、人名等纯属虚构,本人不承担任何责任!

这也是MODBUS /TCP在工业以太网中采用TCP作为为传输层协议而不采用速度更快的UDP协议的原因所在。

虽然MODBUS /TCP由于在传输层采用TCP协议,而使其不得不在传输层协议以下的诸层采取更有效的实时性策略。但与IDA方案相比,MODBUS /TCP在其开放性、简单和稳定的性能上具有优势,是一个具有较高的性能价格比的工业以太网方案。

1.4 本文的工作

本文主要告诉读者该课题的实现过程。在看到一个用软件编程实现的课题时,应该有的一些思路,需要掌握的一些知识。在拿到一个课题时,首先需要为课题的实现构建一个模型,对于该课题而言,应想到怎样在一台设备上实现MODBUS协议,同时,该课题是实现通信,那么就必然不只一台设备,继而想到两台设备间的通信模型,最后到多台设备的通信结构。建构好模型后,就应该查找相关的理论知识。本文涉及到的理论知识主要包括MODBUS协议结构以及套接字的原理。掌握原理后,接下来就应该设计实现流程。对于软件开发而言,编程环境和编程语言很重要,这会对工作的复杂程度带来很大的影响。选择好编程工具后,就要想着怎样实现课题,应构思一个流程。本文首先需要将TCP/IP应用层以下作为一个整体,而这个整体和上层的接口即是套接字接口。再将套接字接口与应用层MODBUS协议联系,即可实现该课题的要求。摘取程序中最重要的部分进行分析。能够让读者清楚的认识到整个编程实例的精髓。最后对整个课题的实现进行一个总结,带给读者一个实现该课题的基本框架,以及在实现该课题过程中自己的一些见解以、疑问及学到的知识和技术。提出自己对该项技术的展望,以及这项技术的发展前景。

1.5 论文的结构安排

本论文共分五章,各章主要内容如下:

第一章: 介绍本论文所研究的背景,即该课题的实际应用价值。 第二章: 构建了实现课题的模型,从一台设备上实现MODBUS协议,到两

台设备通信,最后构建多台设备的整体通信结构。

第三章:为该课题建立理论基础。该课题涉及到的理论主要包括MODBUS

协议结构及套接字,分析它们之间的关系所在。

此文档仅供参考,文中涉及学校、人名等纯属虚构,本人不承担任何责任!

第四章: 提出实现该课题的主要流程,分为几个步骤,每个步骤应做的工

作,以及用到的编程环境和编程语言。

第五章:程序实验结果演示,并对MODBUS TCP/IP报文进行分析,通

过分析体现MODBUS协议的数据交换过程。

第六章: 总结与展望。

此文档仅供参考,文中涉及学校、人名等纯属虚构,本人不承担任何责任!

第二章 基于TCP/IP模型的MODBUS通信协议

2.1 一台设备上的MODBUS模型构建 2.1.1 用户应用层

它和设备应用相对应,与设备完全无关。

2.1.2 通信应用层

一个MODBUS设备可提供一个客户机或服务器的MODBUS接口。可提

供一个MODBUS后端接口,间接地允许对用户应用对象的访问。此接口由四个区域组成:离散量输入、离散量输出(线圈)、输入寄存器和输出寄存器。必须进行这个接口与用户应用数据直接的映射。可将MODBUS通信应用层分为四个小模块,如下:

1、MODBUS客户机

MODBUS客户机允许用户应用显式控制与远程设备的信息交换。MODBUS客户机根据用户应用向MODBUS客户机接口发送的要求中所包含的参数来建立一个MODBUS请求。

2、MODBUS客户机接口

MODBUS客户机接口提供一个接口,使得用户应用能够生成各类MODBUS服务的请求,该服务包括对MODBUS应用对象的访问。

3、MODBUS服务器

收到一个MODBUS请求以后,模块激活一个本地操作进行读、写、或完成其他操作。这些操作的处理对应用程序开发员来说都是透明的。MODBUS服务器的主要功能是等待来自TCP502口的MODBUS请求,处理这一请求,根据设备的现状生成MODBUS应答。

4、MODBUS后端接口

MODBUS后端接口是一个从MODBUS服务器到定义应用对象的用户应用之间的接口。

2.1.3 TCP管理层

报文传输服务的主要功能之一是管理通信的建立和结束,及管理在所建立的TCP连接上的数据流。TCP管理层进行两方面的管理:

1、连接管理

此文档仅供参考,文中涉及学校、人名等纯属虚构,本人不承担任何责任!

在客户机和服务器的MODBUS模块之间的通信需要TCP管理模块。它负责全面管理报文传输TCP连接。TCP502端口的监听是为MODBUS通信保留的。客户机和服务器均应向用户提供对TCP端口号进行MODBUS参数配置的可能性。

2、访问控制模块管理

在某些至关重要的场合,必须禁止无关的主机对设备内部数据的访问。这既是需要的安全模式,也是在需要时实现安全处理的原因。

2.1.4 TCP/IP栈层

TCP/IP栈提供了一个接口,用来管理连接、发送和接收某些参数配置。TCP连接管理模块采用栈接口,即BSD套接字接口来与TCP/IP栈进行通信。可以对TCP/IP栈进行参数配置,以适用对不同产品或系统的不同特定约束进行数据流控制、地址管理和连接管理。

2.2 两台设备间的通信模型构建

在TCP/IP网络应用中,通信的两个进程相互作用的主要模式是客户机/服务器模式,即客户端向服务器发出请求,服务器接收到请求后提供相应的服务。客户机/服务器模式在操作过程中采取的是主动请求方式。

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

· 客户方:a.打开一通信通道,并连接到服务器所在的主机的特定端口;b.向服务器发出服务请求报文,等待并接收应答;继续提出请求;C,请求结束后关闭通信通道并终止。

从以上描述过程可以看出:客户机与服务器进程的作用是非对称的,因此编码不同,而且服务进程要先于客户请求启动。这个客户机/服务器模型基于4种报

此文档仅供参考,文中涉及学校、人名等纯属虚构,本人不承担任何责任!

文类型:

2.3 总体通信模型构建

此文档仅供参考,文中涉及学校、人名等纯属虚构,本人不承担任何责任!

第三章 MODBUS在TCP/IP上的实现与分析

3.1 应用层MODBUS协议描述

3.1.1 TCP/IP上的MODBUS数据应用单元

MODBUS TCP/IP 是在TCP/IP 网络协议加上MODBUS 应用层协议, 形成五层开放式体系结构, 其中MODBUS TCP 数据帧包括报文头、功能代码和数据三个部分, 其结构如图1 所示。

MODBUS TCP/IP ADU

PDU

MODBUS TCP 数据帧格式

3.1.2 MBAP报文头描述

此文档仅供参考,文中涉及学校、人名等纯属虚构,本人不承担任何责任!

3.2 套接字简介

套接字的概念与文件句柄类似,一个套接字就是一个通信标识,由一个短整数表示,实际上就是一个句柄,代表网络协议中的一组数据,该数据包含了通信双方的IP地址和当前的连接状态等信息。我们知道,如果一个文件被打开,可以通过文件句柄对文件进行读写操作,套接字也一样,只不过套接字提供的函数更多一些。

套接字存在于通信区域中,由协议、地址、端口来描述并惟一确定,根据传输协议的不同,套接字可分为3种类型:流式套接字、数据报套接字和原始套接字。流式套接字提供了一个面向连接的、可靠的、数据无错且按顺序接收的服务,这种套接字对应的是面向连接的传输协议,如TCP/IP协议簇中的TCP。数据报套接字提供了一个无连接服务,不提供无错保证,数据可能丢失或重复,且接受顺序混乱,该套接字所对应的是无连接传输协议,如TCP/IP协议簇中的UDP。原始套接字允许直接访问低层的协议,如IP、ICMP协议,该套接字常用于访问服务器中配置的新设备。

WinSock提供了许多套接字函数,它们并不代表协议的某一个层次,其实质

此文档仅供参考,文中涉及学校、人名等纯属虚构,本人不承担任何责任!

就是一组编程接口,用户利用这些函数可以很容易地进行编程。该程序设计中用到的套接字如下所示:

(1)socket()函数

Socket()函数用于创建一个套接字。返回的一个套接字号被创建者用来访问该套接字。套接字创建时没有地址(IP地址和端口号)。直到一个端口被绑定到该套接字时,方可接受数据。socket函数用于创建一个套接字。

语法: SOCKET socket ( Int af , 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:是一个套接字。

name:是一个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; //内部网络协议TCP\UDP等 addr.sin_port = htons(port); //端口号 addr.sin_addr.s_addr = 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函数用于将套接字置入监听模式。 语法: int listen (

本文来源:https://www.bwwdw.com/article/urgj.html

Top