工业控制系统通讯协议的描述方法.doc_第1页
工业控制系统通讯协议的描述方法.doc_第2页
工业控制系统通讯协议的描述方法.doc_第3页
工业控制系统通讯协议的描述方法.doc_第4页
工业控制系统通讯协议的描述方法.doc_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

工业控制系统通讯协议的描述方法 (1)2008-08-06 10:07:09来源:互联网 针对工业控制系统实际问题,使用列表的方法总结了通讯协议所涉及的内容,讨论了由阻塞和干扰引起的异常情况以及处理办法,给出了工业控制系统通讯协议的基本规范和纵向描述表。 关键字:工业控制38篇 通信协议1篇 描述表1篇 引言 通讯协议在工业控制系统中十分重要1。一般来说网络协议有7层。其中第1部分由硬件完成,称为物理层。第2部分由操作系统完成,包括链路层、网络层、传输层。第3部分包括会话层、表示层和应用层,一般在应用软件里实现2。所谓在工业控制系统中的通讯协议均指会话协议。合理的会话协议能够大幅度提高硬件的操作效率,准确的描述能提高程序员之间的协作效率。如何设计出高效的通讯协议并使用准确的语言描述,对每个系统分析者以及软件设计者来说必不可少。笔者通过总结多年的设计工业控制系统的经验,得到了关于工业控制系统通讯协议的一些描述方法。希望能够给广大设计工业控制系统的同行予以借鉴。1.工业控制系统的基本模型图1工业控制系统的信号传送过程一般情况下,工业控制系统涉及上位机、控制柜、传感器与控制器四大部分。如图1所示上位机主要指的是计算机,控制系统在这里安装。控制柜是连接计算机、PLC(可编程控制器)、传感器与控制器的设备,PLC是其中的主要部件。其实PLC也是计算机,在测量时,它的作用是把传感器送来的电流或电压信号转化为数字信号,称为A/D转换,并将这些数字信号送给计算机。在控制时,它的作用是把计算机送来的数字信号转化为电流或电压信号,称为D/A转换,并将这些数字信号送给控制器。一般来说,PLC是计算机与传感器和控制器之间的桥梁。PLC的功能在不断完善,现代的PLC完全可以替代计算机。在绝大多数情况下,人们仍需要在计算机上运行控制系统,这时便需要在PLC和计算机之间进行通讯。我们所说的通讯协议主要是指计算机与PLC的通讯协议34。2.客户与服务器网络通讯总是以客户(Client)与服务器(Server)方式进行的。所谓服务器是指,它总是处于被动状态,等待客户的询问,负责应答。而 客户总是处于主动地位,在启动时客户总是首先向服务器发出联络信号,然后等待服务器的回答。在设计程序时,到底谁作客户,谁作服务器要看具体的情况而定。 一般来说,上位机是客户,PLC是服务器,为上位机提供各种测量数据并负责向控制器传送控制信号5。工业控制数据可分为目标值(Target)、设定值(Setpoint)、测量值(Measure)、操作状态(Status)、阀门位置(Valvevalue)等,这是按照纵向控制界面来划分的。如果要按照网络传输方式来划分,可分为:一般运行数据(Data)、参数(Parameter)、命令(Command)、出错信息(Error)、消息(Message),如表1。表1工业控制数据通讯读写分类表3.网络通讯的数据一般来说,网络通讯协议主要描述客户如何与服务器进行对话,所以下面的描述总是以客户身份表现的。对于客户来说有:请求运行数据、请求参 数、写参数、写命令,服务器应答后便相应的有:读数据、读参数、读错误信息、读消息。这些操作之间的对应关系与它们的具体含义请看表2。数据传送过程必须由发送方和接收方共同完成。发送方收集数据并打包然后发送,接收方则在收到数据后按照协议(protocol)进行解包后分发到各个位置上。所谓的协议就是一种描述规范,首先必须使得接收方明确:哪一路的数据,读还是写,具体内容是什么。如果要让接收方准确无误的接收,还必须考虑到工业控制的具体情况,如阻塞和干扰。表2工业控制数据通讯读写关系说明表4.阻塞与干扰传送数据的方式一般有两种格式,即2进制模式或文本字符模式。对于这两种截然不同的格式来说,编写协议的方法也大不相同。2进制模式下整数和浮 点数所占用的空间与数值的大小没有关系,文本字符模式下则大不相同,必须充分考虑数值的取值范围与小数点的位置。一般来说,2进制模式传送数据的效率要高 的多,而文本字符模式下的纠错能力更强,而且所得到的数据可以直接显示。在工业控制条件下,由于考虑到纠错方法的容易实现,采用文本字符模式的居多。在不考虑阻塞(block)的情况下,接收方所得到的数据块与发送方所发送的数据块完全一样,这时不必考虑起始符与结束符。但是在工业控制环 境下,连续不断地、大批量地传送数据阻塞是不可避免的,于是像图2所示的情况常常会发生。接收方某次所读到的并不是发送方某一次所送来的,而是发送方第 n-1块数据的后半部分与发送方第n块数据的前半部分,这样如果简单的以顺序解读就必然会造成误会。如表3中的起始符与结束符就是为了克服受阻塞条件下的 接收数据的起始位值的偏移。应该说明的是,起始符中使用过的字符不应该在其它地方再使用。图2受阻塞条件下的数据接收情况另外,在工业现场,许多金属设备及电动机的高速运转,强烈电磁干扰也是不可避免。本来在实验室里能正常传送的网络数据,到了工业现场却不能正常 运行。本来的正常的数据会变得不可思议。排除那些因受现场干扰(interfere)而变得不可使用的数据是非常有必要的。对付这些异常数据的办法就是丢 弃它们。这时,如何辨别它们是错误的就变得非常重要。校验码(verifycode)的作用就是让接收方知道自己所接收到的数据是否受过干扰。所谓校验码就是在数据块的固定位置放置若干字符,如 表3。这些字符可以是固定字符、求和(sum)或异或(Xor)求和。固定字符容易实现,但是难以知道其它位置的数据是否受到干扰。求和或异或求和是常用 的校验方法,这种方法通常把求和结果转换成两位16进制的文本字符码,这两位16进值符号就能表示出一个字节的数据。5.协议描述方法表3是笔者在设计网络会话通讯协议时常用的描述方法,称为纵向描述方法。这种方法的优点是能够将所要传送的每个字段进行详细的描述。在这里将每个所要描述的字段分为:起始位置、名称、字节数、数据类型、数据内容等5项说明。表3工业控制数据通讯协议的格式显然这是一种适用于文本字符描述的协议,2进制协议也可以参照这种方法。由于2进制协议的任意位置可以取任何值,所以在2进制协议中无法起始符与结束符。6.结束语上述的表3中描述的主要是针对串口通讯,在以太网环境下当然也是可以的。一般来说,纠错功能在传输层进行,但是由于在以太网环境下,传输层协议是由操作系统完成的,如TCP协议3,纠错功能自然包含在内,所以表3中的校验码可以不予考虑。在串口通讯模式下,操作系统(Windows)仅仅为串口通讯建立了缓冲区,大部分传输层功能需要由编程者来完成,所以表3中的校验码是绝对不可以缺少的。以上的通讯协议设计方法笔者已在许多地方,如山东临清、广西荔浦、内蒙河套等的抄纸过程控制系统中广泛使用,效果良好。参考文献1纪玉波.造纸系统计算机控制系统J.微计算机信息,2000.16(2):26-27,702鲁士文编著.计算机网络原理与网络技术M,机械工业出版社,1996.2-6,296-3163王志坚,陈松乔,蔡自兴,彭世铎,周昊,ABB工业控制系统与外部计算机通讯软件设计J,微计算机信息1998.14(2)54-574杨武,田伟,可编程控制器与工业控制计算机通讯方法的研究J,包装工程1999.20(4),44-455王存,用串行通讯构成工业控制小型集散系统J,内蒙古大学学报(自然科学版)2000.31(4),385-3876王思明,S5-115UPLC与工业控制计算机的通信J,兰州铁道学院学报,1998.17(4),92-97ModBus通讯协议软件包ModBus通讯协议简介 Modbus协议是一种已广泛应用于当今工业控制领域的通用通讯协议。通过此协议,控制器相互之间、或控制器经由网络(如以太网)可以和其它设备之间进行 通信。Modbus协议使用的是主从通讯技术,即由主设备主动查询和操作从设备。一般将主控设备方所使用的协议称为Modbus Master,从设备方使用的协议称为Modbus Slave。典型的主设备包括工控机和工业控制器等;典型的从设备如PLC可编程控制器等。Modbus通讯物理接口可以选用串口(包括RS232和 RS485),也可以选择以太网口。其通信遵循以下的过程: 主设备向从设备发送请求; 从设备分析并处理主设备的请求,然后向主设备发送结果; 如果出现任何差错,从设备将返回一个异常功能码。英创ModBus通讯协议软件产品简介 英创公司推出的ModBus通讯协议软件产品主要应用于英创ARM9嵌入式主板环境,英创工控主板均带有丰富的串口、网络资源、通用GPIO接口等,同时 具有强大的处理能力。结合ModBus通讯协议软件,就可非常方便地构成符合ModBus通讯规范的主控(Master)及设备(Slave)的应用平 台。针对ModBus通讯的主从方式这一特点,英创公司的ModBus通讯协议软件包分为两个可独立使用的部分,即“ModBus主控协议软件”(简称 modbus_Master)以及“ModBus设备方协议软件”(简称modbus_Slave)。目前英创ModBus通许协议软件运行于WinCE 环境下,均以C函数加静态LIB库的形式提供给客户。其主要特征如下: 非常适用于实时的工业应用。 可以支持基于串口的ModBus通讯协议应用或TCP的ModBus通讯协议应用。 RTU传输模式。 支持大多数的Modbus功能码操作,包括对线圈、离散开关输入的位操作,以及对寄存器的字节操作。 支持广播地址。 可以灵活设置ModBus通讯的超时时间。 可以获取通讯中传输协议的错误代码的详细信息。英创ModBus协议软件通讯关系图英创ModBus协议软件支持的功能码功能码描述1读单个线圈2读离散量输入3读多个寄存器4读输入寄存器5写单个线圈6写单个寄存器15写多个线圈16写多个寄存器22屏蔽写寄存器23读/写寄存器软件基本使用方法 为了方便应用程序的使用,对不同的通讯介质保持一致的代码形式,英创所提供的ModBus协议软件(包括modbus_Master和 modbus_Slave)中的API函数可以同时支持基于串口和TCP的Modbus协议,应用程序只需要在调用初始化函数时,用不同参数区分即可,有 关参数的说明请参见相应的头文件:modbus_Master.h和modbus_Slave.h 1、modbus_Master 的应用 作为Modbus客户端模式的应用,主要是准备请求并向服务器设备发送请求,并等待服务器的响应。在做此类应用开发时,用户可参考Modbus标准文献以 及被控设备的通讯接口数据手册,直接调用英创提供的modbus_Master软件包提供了相应的操作API函数,来完成对服务器设备的访问和控制。在进 行此类应用开发时,用户只需要包含modbus_master.h/ modbus_master.lib 即可。 2、modbus_Slave 的应用 作为ModBus服务器模式的应用,主要需要实现了对于ModBus应用报文的分析与响应,但这还只是ModBus整个通讯的一部分,另一部分是还需要有 对应用数据的访问,这部分的内容则需要用户自己来进行定义。为了方便客户的使用,在modbus_Slave软件包中通过函数指针的形式,实现了这些用户 接口函数的自动加载,将用户应用数据处理和ModBus应用报文响应关联起来。用户只需根据需求定义这些接口函数来实现相应的功能,各个函数具体的定义是 通过专门的一个CPP文件:DataProvider.cpp来实现。 由此可见在这类的开发应用时,需包含两个部分的内容,一部分是 modbus_slave.h/ modbus_slave.lib定义的API函数;另一部分是DataProvider.h /DataProvider.cpp定义的用户数据接口函数,其中接口函数需要用户在DataProvider.cpp中具体实现。 为了及时地响应ModBus应用报文,需要注意的是在程序设计时应设计一个线程反复调用modbus_Slave执行函数,该函数为阻塞模式。 举例如下: ()启动modbus设备方协议 hPort = mbusSlave_StartupServer( _T(*), 1, 10000, mbusSlave_Interface ); 或者 hPort=mbusSlave_StartupServer( _T(COM3:9600-8-1-0),1,10000, mbusSlave_Interface ); ()线程中调用执行函数Serverloop 响应请求 while( 1 ) / 调用执行函数,用于对ModBus报文的分析和响应。 result = mbusSlave_ServerLoop( hPort ); if( result!=0 ) / 检查是否返回错误 / 出错处理:本例为获取并打印错误代码的文本信息 wcscpy( szText, mbusSlave_GetErrorText( result ) ); i1 = wcslen( szText ); if( i10 ) wcstombs( strText, szText, i1 ); printf( error code: %s!n, strText ); Modbus通讯协议详解工业控制已从单机控制走向集中监控、集散控制,如今已进入网络时代,工业控制器连网也为网络管理提供了方便。Modbus就是工业控制器的网络协议中的一种。一、Modbus协议简介Modbus协 议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。 有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它 描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。当在一 Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈 信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地 址、路由路径及错误检测的方法。1、在Modbus网络上转输标准的Modbus口是使用一RS-232C兼容串行接口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。控制器能直接或经由Modem组网。控制器通信使用主从技术,即仅一设备(主设备)能初始化传输(查询)。其它设备(从设备)根据主设备查询提供的数据作出相应反应。典型的主设备:主机和可编程仪表。典型的从设备:可编程控制器。主设备可单独和从设备通信,也能以广播方式和所有从设备通信。如果单独通信,从设备返回一消息作为回应,如果是以广播方式查询的,则不作任何回应。Modbus协议建立了主设备查询的格式:设备(或广播)地址、功能代码、所有要发送的数据、一错误检测域。从设备回应消息也由Modbus协议构成,包括确认要行动的域、任何要返回的数据、和一错误检测域。如果在消息接收过程中发生一错误,或从设备不能执行其命令,从设备将建立一错误消息并把它作为回应发送出去。2、在其它类型网络上转输在其它网络上,控制器使用对等技术通信,故任何控制都能初始和其它控制器的通信。这样在单独的通信过程中,控制器既可作为主设备也可作为从设备。提供的多个内部通道可允许同时发生的传输进程。在消息位,Modbus协议仍提供了主从原则,尽管网络通信方法是“对等”。如果一控制器发送一消息,它只是作为主设备,并期望从从设备得到回应。同样,当控制器接收到一消息,它将建立一从设备回应格式并返回给发送的控制器。3、查询回应周期(1)查询查 询消息中的功能代码告之被选中的从设备要执行何种功能。数据段包含了从设备要执行功能的任何附加信息。例如功能代码03是要求从设备读保持寄存器并返回它 们的内容。数据段必须包含要告之从设备的信息:从何寄存器开始读及要读的寄存器数量。错误检测域为从设备提供了一种验证消息内容是否正确的方法。(2)回应如 果从设备产生一正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应。数据段包括了从设备收集的数据:象寄存器值或状态。如果有错误发生, 功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。错误检测域允许主设备确认消息内容是否可用。二、两种传输方式控制器能设置为两种传输模式(ASCII或RTU)中的任何一种在标准的Modbus网络通信。用户选择想要的模式,包括串口通信参数(波特率、校验方式等),在配置每个控制器的时候,在一个Modbus网络上的所有设备都必须选择相同的传输模式和串口参数。所选的ASCII或RTU方式仅适用于标准的Modbus网络,它定义了在这些网络上连续传输的消息段的每一位,以及决定怎样将信息打包成消息域和如何解码。在其它网络上(象MAP和ModbusPlus)Modbus消息被转成与串行传输无关的帧。1、ASCII模式当控制器设为在Modbus网络上以ASCII(美国标准信息交换代码)模式通信,在消息中的每个8Bit字节都作为两个ASCII字符发送。这种方式的主要优点是字符发送的时间间隔可达到1秒而不产生错误。代码系统十六进制,ASCII字符0.9,A.F消息中的每个ASCII字符都是一个十六进制字符组成每个字节的位1个起始位7个数据位,最小的有效位先发送1个奇偶校验位,无校验则无CRC域是两个字节,包含一16位的二进制值。它由传输设备计算后加入到消息中。接收设备重新计算收到消息的CRC,并与接收到的CRC域中的值比较,如果两值不同,则有误。CRC是先调入一值是全“1”的16位寄存器,然后调用一过程将消息中连续的8位字节各当前寄存器中的值进行处理。仅每个字符中的8Bit数据对CRC有效,起始位和停止位以及奇偶校验位均无效。CRC 产生过程中,每个8位字符都单独和寄存器内容相或(OR),结果向最低有效位方向移动,最高有效位以0填充。LSB被提取出来检测,如果LSB为1,寄存 器单独和预置的值或一下,如果LSB为0,则不进行。整个过程要重复8次。在最后一位(第8位)完成后,下一个8位字节又单独和寄存器的当前值相或。最终 寄存器中的值,是消息中所有的字节都执行之后的CRC值。CRC添加到消息中时,低字节先加入,然后高字节。CRC简单函数如下:unsignedshortCRC16(puchMsg,usDataLen)unsignedchar*puchMsg;/*要进行CRC校验的消息*/unsignedshortusDataLen;/*消息中字节数*/unsignedcharuchCRCHi=0xFF;/*高CRC字节初始化*/unsignedcharuchCRCLo=0xFF;/*低CRC字节初始化*/unsigneduIndex;/*CRC循环中的索引*/while(usDataLen-)/*传输消息缓冲区*/uIndex=uchCRCHi*puchMsgg+;/*计算CRC*/uchCRCHi=uchCRCLoauchCRCHiuIndex;uchCRCLo=auchCRCLouIndex;return(uchCRCHiquitconnetion closed.在执行上面一条telnet命令的同时,用tcpdump进行监听:d2server:/home/kerberos# tcpdump -e dst host 211.161.17.21tcpdump: listening on eth0我们将会听到很多包,我们取与我们arp协议相关的2个包:10.0 00:D0:F8:0A:FB:83 FF:FF:FF:FF:FF:FFarp60who has 211.161.17.21 tell d2server20.002344(0.0021)00:E0:3C:43:0D:24 00:D0:F8:0A:FB:83arp60arp reply 211.161.17.21 is at 00:E0:3C:43:0D:24在第1行中,源端主机(d2server)的硬件地址是00:D0:F8:0A:FB:83。目的端主机的硬件地址是FF:FF:FF:FF:FF:FF,这是一个以太网广播地址。电缆上的每个以太网接口都要接收这个数据帧并对它进行处理。第1行中紧接着的一个输出字段是arp,表明帧类型字段的值是0x0806,说明此数据帧是一个ARP请求或回答。在每行中,单词后面的值60指的是以太网数据帧的长度。由于ARP请求或回答的数据帧长都是42字节(28字节的ARP数据,14字节的以太网帧头),因此,每一帧都必须加入填充字符以达到以太网的最小长度要求:60字节。第1行中的下一个输出字段arp who-has表示作为ARP请求的这个数据帧中,目的I P地址是211.161.17.21的地址,发送端的I P地址是d2server的地址。tcpdump打印出主机名对应的默认I P地址。从 第2行中可以看到,尽管ARP请求是广播的,但是ARP应答的目的地址却是211.161.17.21(00:E0:3C:43:0D:24)。ARP应 答是直接送到请求端主机的,而是广播的。tcpdump打印出arp reply的字样,同时打印出响应者的主机ip和硬件地址。在每一行中,行号后面的数字表示tcpdump收到分组的时间(以秒为单位)。除第1行外,每行在括号中还包含了与上一行的时间差异(以秒为单位)。这个时候我们再看看机器中的arp缓存:d2server:/home/kerberos# arp -a(211.161.17.254) at00:04:9A:AD:1C:0A ether on eth0(211.161.17.21) at00:E0:3C:43:0D:24 ether on eth0arp高速缓存中已经增加了一条有关211.161.17.21的映射。再看看其他的arp相关的命令:d2server:/home/kerberos# arp -s 211.161.17.21 00:00:00:00:00:00d2server:/home/kerberos# arpAddressHWtypeHWaddressFlags Mask Iface211.161.17.254 ether 00:04:9A:AD:1C:0A Ceth0211.161.17.21ether 00:00:00:00:00:00CM eth0d2server:/home/kerberos# arp -a(211.161.17.254) at 00:04:9A:AD:1C:0A ether on eth0(211.161.17.21) at 00:00:00:00:00:00 ether PERM on eth0可 以看到我们用arp -s选项设置了211.161.17.21对应的硬件地址为00:00:00:00:00:00,而且这条映射的标志字段为CM,也就是说我们手工设置的 arp选项为静态arp选项,它保持不变没有超时,不像高速缓存中的条目要在一定的时间间隔后更新。如果想让手工设置的arp选项有超时时间的话,可以加上temp选项d2server:/home/kerberos# arp -s 211.161.17.21 00:00:00:00:00:00 tempd2server:/home/kerberos# arp -a(211.161.17.254) at 00:04:9A:AD:1C:0A ether on eth0(211.161.17.21) at 00:00:00:00:00:00 ether on eth0d2server:/home/kerberos# arpAddressHWtypeHWaddress Flags MaskIface211.161.17.254 ether 00:04:9A:AD:1C:0A Ceth0211.161.17.21ether 00:00:00:00:00:00 Ceth0可以看到标志字段的静态arp标志M已经去掉了,我们手工加上的是一条动态条目。请大家注意arp静态条目与动态条目的区别。在不同的系统中,手工设置的arp静态条目是有区别的。在linux和win2000中,静态条目不会因为伪造的arp响应包而改变,而动态条目会改变。而在w

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论