2024西门子通信协议S7COMM_第1页
2024西门子通信协议S7COMM_第2页
2024西门子通信协议S7COMM_第3页
2024西门子通信协议S7COMM_第4页
2024西门子通信协议S7COMM_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

PAGEPAGE10/19西门子通信协议S7COMM工控安全|西门子通信协议S7COMM(Part1)随着网络强国工业4.0,工控安全市场今年明显有相当大的改善,无论从政策还是客户需求,都在逐步扩大中但是,搞工控安全研究的人员却寥寥无几,一方面,没有可以研究和学习的便利的环境;另一方面工控安全是个跨学课的技术,需要了解多方面的知识,有比较高的技术上的门槛特别是工控系统中通信协议,在工控系统中通信协议存在众多标准,也存在众多私有协议,如果你有过使用组态软件的经历,你便会发现,在第一步连接设备时除连接设备的方式有以太网/串行等方式外,各家基本上都存在自己的私有通信议比如:西门子的是S7Comm协议所以,本文主要介绍西门子的S7Comm协议(适用于S7-300S7-400S7-1200)本文中S7Comm协议结构都是逆向而来,如有错误之处,请拍砖一西门子PLC系统构成在介绍西门子S7Comm协议,首先得明白西门子PLC的大概构造虽然我们不必像专写PLC程序员那样下图1就是一个组态完毕的西门子S7300的模型:图1西门子S7-300根据标号,各模块分别是:电源模块(PS),供电专用CPU模块(CPU),负责处理信息通信模块(IM)数字量输入模块(DI)数字量输出模块(DO)模拟量输入模块(AI)模拟量输出模块(AO)想具体了解的,请阅读\h西门子S7-300教程第2章二S7协议结构S7Comm(S7Communication)是西门子专有的协议,是西门子S7通讯协议簇里的一种种S7协议的TCP/IP实现依赖于面向块的ISO传输服务S7协议被封装在TPKT和ISO-COTP协议中,这使得PDU(协议数据单元)能够通过TCP传送它用于PLC编程,在PLC之间交换数据,从SCADA(监控和数据采集)系统访问PLC数据以及诊断目的S7Comm以太网协议基于OSI模型:7ApplicationLayerS7communication6PresentationLayerS7communication5SessionLayer S7communication(TPKT)4TransportLayerISO-on-TCP(RFC1006)3NetworkLayer IP2DataLinkLayer 1PhysicalLayer 其中,第1-4层会由计算机自己完成(底层驱动程序),关于这些神马的定义,上网查一下;第5层TPKT,应用程数据传输协议,介于TCP和COTP协议之间这是一个议,主要用来在COTP和TCP之间建立桥梁;第6层COTP,按照维基百科的解释,COTPOSI7层协议定义的位于TCP之上的协议COTP以“Packet”为基本单位来传输数据,这样接收方会得到与发送方具有相同边界的数据;第7层,S7communication,这一层和用户数据相关,对PLC成可能会对TPKT和COPT迷惑,其实在具体的报文中,TPKT的作用是包含用户协议(5~7层)的数据长度(字节数);COTP的作用是定义了数据传输的基本单位(在S7Comm中PDUTYPE:DTdata)图2S7Comm协议OSI模型三TPKT协议TPKT协议是应用程数据传输协议,介于TCP和COTP协议之间这是一个议,主要用来在COTP和TCP之间建立桥梁其英文介绍如下:TPKTisan“encapsulation”protocol.ItcarriestheOSIpacketinitsownpacket’sdatapayloadandthenpassestheresultingstructuretoTCP,fromthenon,thepacketisprocessedasaTCP/IPpacket.TheOSIprogramspassingdatatoTPKTareunawarethattheirdatawillbecarriedoverTCP/IPbecauseTPKTemulatestheOSIprotocolTransportServiceAccessPoint(TSAP).TPKT结构如图3:图3TPKT协议结构其中,TPKT的结构为:(Unsignedinteger1byteVersion,版本信息(Unsignedinteger1byteReserved,保留(值为0×00)2-3(Unsignedinteger,2bytes):Length,TPKTCOTPS7三层协议的总长度,也就是TCP的payload的长度,如图4所示:图4一个TPKT的例子从图4中可知,其version=3,length=25(0×0019)四COTP协议COTP(\hISO8073/X.224COTPConnection-OrientedTransportProtocol)是OSI7层协议定义的位于TCP之上的协议COTP以“Packet”为基本单位来传输数据,得到与发送方具有相同边界的数据COTP协议分为两种形态,分别是COTP连接包(COTPConnectionPacket)和COTP功能包(COTPFuctionPacket)COTPConnectionPacketCOTP连接包(COTPConnectionPacket)也就是S7Comm的握手包,其格式如图5所示示图5COTP连接包的结构其中,COTP连接包的头结构为:(Unsignedinteger1byteLength,COTP后续数据的长度(注意:长度不包含length的长度),一般为17bytes(Unsignedinteger,1byte):PDUtyp,类型有:0×1:EDExpeditedData,加急数据0×2:EAExpeditedDataAcknowledgement0×4:UD,用户数据0×5:RJReject,拒绝0×6:AKDataAcknowledgement0×7:ERTPDUError,TPDU错误0×8:DRDisconnectRequest0xC:DCDisconnectConfirm,断开确认0xD:CCConnectConfirm,连接确认0xECRConnectRequest,连接请求0xFDTData,数据传输2~3(Unsignedinteger,2bytes):Destinationreference.4~5(Unsignedinteger,2bytes):Sourcereference.型6(1byte):opt,其中包括ExtendedformatsNoexplicitflowcontrol,值都是Boolean类型7~?(length-7bytes,一般为bytesParameter,参数一般参数包含Parametercode(Unsignedinteger1byte)Parameterlength(Unsignedinteger1byte)Parameterdata三部分算了,还是来个例子,更加明了:图6连接请求包图6中,PDU类型为连接请求(0x0e),表示该数据包是一个连接请求包比,图7为图6的连接请求的响应包:图7连接确认包COTPFuctionPacket相对而言,COTPFuctionPacket比COTPConnectionPacket简单多了,其结构如图8示:图8COTP功能包的格式其中,COTPP功能包的头结构为:(Unsignedinteger1byteLength,COTP后续数据的长度(注意:长度不包含length的长度),一般为2bytes(Unsignedinteger,1byte):PDUtype,类型有:0×1:EDExpeditedData,加急数据0×2:EAExpeditedDataAcknowledgement0×4:UD,用户数据0×5:RJReject,拒绝0×6:AKDataAcknowledgement0×7:ERTPDUError,TPDU错误0×8:DRDisconnectRequest0xC:DCDisconnectConfirm,断开确认0xD:CCConnectConfirm,连接确认0xECRConnectRequest,连接请求0xFDTData,数据传输型(1byte):opt,其中包括ExtendedformatsNoexplicitflowcontrol,值都是Boolean类型举个例子,如图9所示:图9数据传输包上图中,PDU类型为连接请求(0x0f),表示该数据包是一个数据传输的包OK,COTP的两中结构介绍完了,接下来的S7Comm协议才是本文的重点五S7Comm协议上面,介绍了TPKT和COTP协议,现在开始介绍S7Comm协议,Areuready?S7Comm数据作为COTP数据包的有效载荷,第一个字节总是0×32作为协议标识符S7Comm协议包含三部分:HeaderParameterData图10S7Comm协议结构根据实现的功能不同,S7comm协议的结构会有所不同S7CommHeaderS7Comm的头,定义了该包的类型参数长度数据长度等,其结构如图11所示:图11S7CommHeader结构所以,S7CommHeader的格式为:(unsignedinteger,1byte):ProtocolId,协议ID,通常为0×32;(unsignedinteger,1byte):ROSCTR,PDUtype,PDU的类型,一般有以下值:0×01–JOB(Request:jobwithacknowledgement):作业请求。由主设备发送的请求(例如,读/写存储器,读/写块,启动/停止设备,设置通信);0×02ACK(acknowledgementwithoutadditionalfield单确认(未遇到过由S7300/400设备发送得);0×03–ACK_DATA(Response:acknowledgementwithadditionalfield):确认数据响应,这个一般都是响应JOB的请求;0×07–USERDATA:原始协议的扩展,参数字段包含请求/响应ID(用于编程/调试,读取SZL,安全功能,时间设置,循环读取⋯)。2~3(unsignedinteger2bytes):RedundancyIdentification(Reserved),冗余数据,为0×0000;4~5(unsignedinteger2bytes):ProtocolDataUnitReference,it’sincreasedbyrequestevent协议数据单元参考,通过请求事件增加;6~7(unsignedinteger2bytes):Parameterlength,thetotallength(bytes)ofpart参数的总长度;8~9(unsignedinteger,2bytes):Datalength,数据长度如果读取PLC内部数据,此处为0×0000;对于其他功能,则为Data部分的数据长度;来看一个例子解释一下,如图12所示:图12一个S7Comm头结构的例子其中最重要的字段就是ROSCTR,它决定了后续参数的结构,这个介绍在响应数据包中,还有可能存在错误信息就拿图12为例,如果出错了,其响应包如图13所示:图13带有错误信息的响应包其错误信息结构为:(unsignedinteger,1bytes):Errorclass,错误类型:其详细的Errorclass,参考\h6.1.1头结构的错误类型;(unsignedinteger,1bytes):Errorcode,错误代码;由此,可见图13的错误类型是Noerror,至于错误代码,啥含义我也母知道为了更好理解,接下来就不按照ParameterData的顺序介绍,而是按照PDU绍,尿急的赶紧上厕所哈!作业请求(Job)和确认数据响应(Ack_Data)上面介绍了S7CommPDU的结构和通用协议头其头部结构\hS7Comm中Job和Ack_Data中的Parameter项的第一个字段是function(功能码),\h为Unsignedinteger,大小为1byte,其详细的功能码,请参考6.2.1Job和Ack_Data\h所以接下来,将进一步介绍各功能码对应的结构和作用建立通信(Setupcommunication[0xF0])建立通信在每个会话开始时被发送,然后可以交换任何其他消息它用于协商ACK队列的大小和最大PDU长度,双方声明它们的支持值ACK队列的长度决定了可以同时启动而需要确认的并行作业的数量PDU和队列长度字段都是大端先说Job吧!当PDU类型为Job时,建立通信功能中Parameter的结构,如下图:图14S7comm的结构(建立通信的作业请求)具体的Parameter结构,如下:(Unsignedinteger,1byte):Parameterpart:Reservedbyteincommunicationpdu,保留字节;(Unsignedinteger,2bytes):MaxAmQ(paralleljobswithack)calling;(Unsignedinteger,2bytes):MaxAmQ(paralleljobswithack)called;(Unsignedinteger,2bytes):Parameterpart:NegotiatePDUlength协商PDU长度举个例子:图15建立通信的请求那么其确认响应的结构如何呢?跟请求时一样的,如图14所示那么图16为图15的确认响应:图16建立通信的确认响应如图1516所示,其协商结果为:ACK队列的大小为1;最大PDU长度为240读取值(Read[0x04])数据读写操作通过指定变量的存储区域(参考\h6.3区域(Areanames)),地址(偏移量)及其大小或类型(参考\h6.4.1Transportsizesinitemdata)来执行先说Job吧!当PDU类型为Job时,那么其S7Comm结构,如图17所示:图17S7comm的结构(读取值的作业请求)所以,接下来的Parameter字段是itemcount(项目个数),其类型为Unsigned大小为1byte那么一个item的结构是咋样的呢?如下(图17中item1):(Unsignedinteger1bytespecification,确定项目结构的主要类型,通常为0×12,代表变量规范;(Unsignedinteger,1byte):Lengthoffollowingaddressspecification,本Item其余部分的长度;(Unsignedinteger1byteSyntaxIdsofvariablespecification,确定寻址模式和其余项目结构的格式;其详细的SyntaxId,参考\h6.5SyntaxIdsofvariablespecification;3(Unsignedinteger,1byte):Transportsizesinitemdata,确定变量的类型和长度:其详细的Transportsize,参考\h6.4.1transportsizesinitemdata;4~5(Unsignedinteger,2byte):Requestdatalength,请求的数据长度;6~7(Unsignedinteger2byte):DBnumber,DB模块的编号,如果访问的不是DB区域此处为0×0000;8(Unsignedinteger,1byte)::Area,区域类型:其详细的区域类型,参考\h6.3区域(Areanames);9~11(Unsignedinteger,3byte):Address,地址头晕了吧?哈哈哈~~先举个例子:图18读值操作的作业请求图17中item1是读取DB1的0×000010(DB1.DBX2.0BIT1)值,并且类型为BIT的请求PDU类型为Job时,S7Comm结构介绍完了,那PDU类型为Ack_Data时,其S7Comm结构如何呢?图19S7comm的结构(读取值的确认数据响应)是的,其Parameter只有functionitemcount两个字段继续,那么接下来的是Data啦!其结构如下:(Unsignedinteger,1byte):Returncode,返回代码:详细的Returncode,请参考\h6.6.1Returnvaluesofanitemresponse;(Unsignedinteger1byteTransportsize,数据的传输尺寸:其详细的Transportsize,参考\h6.4.2Transportsizesindata;2~3(Unsignedinteger,2bytes):Length,数据的长度;4~4+length(?):Data,数据;(Unsignedinteger1byteFillbyte,填充字节继续看图18响应的数据包,如图20所示:图20读值操作的确认数据响应图20中,item1是读取DB1的0×000010(DB1.DBX2.0BIT1)值,并且类型为BIT应,其响应的数据为01写入值(Write[0x05])Write中Parameter的结构跟\h5.2.2读取值(ReadVar[0x04])一样,但是Write写入值,所以Write比Read多Data项结构如下:图21S7comm的结构(写入值的作业请求)由此,Data的结构为:(Unsignedinteger1byteReturncode,返回代码,这里是未定义,所以为Reserved(0×00);(unsignedinteger1byte):Transportsize,确定变量的类型和长度:详细的Transportsize,参考\h6.4.2Transportsizesindata;2-3(unsignedinteger,2bytes):Length,写入值的数据长度;(1byte):Data,写入的值;(unsignedinteger1byte):Fillbyte,填充字节,如果数据的长度不足Length的话,充;举个例子:图22向地址为0×000008的Flags(M)写入0×00的作业请求图22中,是一个向地址为0×000008的Flags(M)写入0×00的作业请求那PDU类型为Ack_Data时,其S7Comm的结构如何呢?图23S7comm的结构(写入值的确认数据响应)对的,Parameter也只有functionitemcount两个字段而Data中也只有一个Returncode字段,其结构如下:0(Unsignedinteger,1byte):Returncode,返回代码:详细的Returncode,请参考\h6.6.1Returnvaluesofanitemresponse;继续看图22的响应数据包,如图24所示:图24向地址为0×000008的Flags(M)写入0×00的确认响应图24中的item1,说明向地址为0×000008的Flags(M)写入0×00成功未完待续PAGEPAGE1/26|西门子通信协议S7COMM(Part2)-工控安全|西门子通信协议S7COMM(Part2)前言随着网络强国工业4.0,工控安全市场今年明显有相当大的改善,无论从政策还是客户需求,都在逐步扩大中但是,搞工控安全研究的人员却寥寥无几,一方面,没有可以研究和学习的便利的环境;另一方面工控安全是个跨学课的技术,需要了解多方面的知识,有比较高的技术上的门槛特别是工控系统中通信协议,在工控系统中通信协议存在众多标准,也存在众多私有协议,如果你有过使用组态软件的经历,你便会发现,在第一步连接设备时除连接设备的方式有以太网/串行等方式外,各家基本上都存在自己的私有通信议比如:西门子的是S7Comm协议上一篇文章\h|西门子通信协议S7COMM(Part1)》带来了西门子PLC系统构S7协议结构、TPKT协议、COTP协议、S7Comm协议五大块内容,本文紧接着上文中的S7Comm协议章节继续开展,没看过上一篇的小伙伴需要补补课哦,不然会不知所云~下载下载是Step7发送块数据给PLC(图25)。在西门子设备上,程序代码和(大部分)程序数据存储在块中,这些块有自己的头和编码格式。在西门子设备中有8种不同类型的功能块,具体的请参考\h6.7。这些块在上/下载请求中用特殊的ASCII文件名寻址。这个文件名的结构如下:(1byte):Fileidentifier(ASCII),文件标识符。其有_(CompleteModule)、(Moduleheaderforup-loading)两种文件标识符;(2bytes):Blocktype,块类型。具体类型,请参考\h6.7;(5bytes):Blocknumber,块编号;(1byte):Destinationfilesystem(ASCII),目标的文件系统。其有三种文件系统P(Passive(copied,butnotchained)module):被动文件系统(Activeembeddedmodule):主动文件系统(Activeaswellaspassivemodule):既主既被文件系统工控安全工控安全|西门子通信协议S7COMM(Part2)PAGEPAGE10/26例如:文件名为_0A00001P(文件标识是_,块类型为DB,块的编号为00001,目标块的文件系统是P。),用于将DB1复制到被动文件系统或从被动文件系统复制。下载有3中不同的功能类型:请求下载(Requestdownload[0x1A])下载块(Downloadblock[0x1B])下载结束(Downloadended[0x1C])在下载过程中,先是Step7向PLC发送一个请求下载的Job,PLC收到后则回复一个Ack_Data。在发送完所有字节后,Step7向PLC发送一个下载结束的Job来关闭下载会话。时序图如下:图25下载时序图(图片来源:互联网)好了,开始介绍下载的结构啦!如图26所示,即为一个完整的下载过程:图26一个完整的下载过程例子请求下载(Requestdownload[0x1A])先来介绍,当PDU类型为Job时,Requestdownload[0x1A]没有Data,其Parameter构,如下:(1byte):FunctionStatus,功能码状态;(2bytes):forallunknownbytesinblockcontrol;3(4bytes):无意义,一般为0x00000000;(1byte):filenamelength,文件名长度;(?bytes):filename,defaultis9byte,文件名,长度一般为9个字节;(1byte):Fileidentifier(ASCII),文件标识符。其有_(CompleteModule)、(Moduleheaderforup-loading)两种文件标识符;(2bytes):Blocktype,块类型。具体类型,请参考\h6.7;(5bytes):Blocknumber,块编号;(1byte):Destinationfilesystem(ASCII),目标的文件系统。其有P(Passive(copied,butnotchained)module)、A(Activeembeddedmodule)、B(Activeasaspassivemodule)三种文件系统;(1byteLengthpart2inbytes,参数的第二部分长度,也就是接下来的字段长度;(1byte):Unknownchar(ASCII);(6bytes):Lengthloadmemoryinbytes(ASCII);(6bytes):LengthofMC7codeinbytes(ASCII)。其实就是告诉PLC要下载块。举个例子:图27请求下载_0800001P的作业请求如图27所示,文件标识是_(CompleteModule),块类型为OB,块的编号为00001,目标块的文件系统是P(Passive(copied,butnotchained)module),所以文件名为_0800001P。那PDU类型为Ack_Data时,Requestdownload[0x1A]的Parameter中只有一个function。下图即为图27的响应:图28请求下载_0800001P的确认数据响应OK,请求下载完成后,接下来就可以Downloadblock了!下载块(Downloadblock[0x1B])上面说了,下载是Step7发送块数据给PLC。当PDU类型为Job时,Downloadblock[0x1B]也没有Data,其Parameter的结构,如下:(1byte):FunctionStatus,功能码状态;(2bytes):forallunknownbytesinblockcontrol;3(4bytes):无意义,一般为0x00000000;(1byte):filenamelength,文件名长度;(?bytes):filename,defaultis9byte,文件名,长度一般为9个字节;(1byte):Fileidentifier(ASCII),文件标识符。其有_(CompleteModule)、$(Moduleheaderforup-loading)两种文件标识符;(2bytes):Blocktype,块类型。具体类型,请参考\h6.7;(5bytes):Blocknumber,块编号;(1byte):Destinationfilesystem(ASCII),目标的文件系统。其有P(Passive(copied,butnotchained)module)、A(Activeembeddedmodule)、B(Activeaswellaspassivemodule)三种文件系统;是的,Downloadblock[0x1B]的Parameter比Requestdownload[0x1A]的Parameter的第一部分相同!为了更好比较,举个例子:图29下载块_0800001P的作业请求上图是下载_0800001P的作业请求。那PDU类型为Ack_Data时,Downloadblock[0x1B]有Parameter和Data,其Parameter的结构,如下:1(1byte):FunctionStatus,功能码状态;而其Data的结构,如下:(Unsignedinteger,2bytes):Length,数据长度;(Unsignedinteger,2bytes):Unknownbyte(s)inblockcontrol,未知字节;(Label,data_length-4bytes):Data,数据;下图即为图29的响应:图30下载块_0800001P的响应下载结束(Downloadended[0x1C])当PDU类型为Job时,Downloadended[0x1C]也没有Data,其Parameter的结构,如下:(1byte):FunctionStatus,功能码状态;(2bytes):forallunknownbytesin3(4bytes):无意义,一般为0x00000000;(1byte):filenamelength,文件名长度;(?bytes):filename,defaultis9byte,文件名,长度一般为9个字节;(1byte):Fileidentifier(ASCII),文件标识符。其有_(CompleteModule)、(Moduleheaderforup-loading)两种文件标识符;(2bytes):Blocktype,块类型。具体类型,请参考\h6.7;(5bytes):Blocknumber,块编号;(1byte):Destinationfilesystem(ASCII),目标的文件系统。其有P(Passive(copied,butnotchained)module)、A(Activeembeddedmodule)、B(Activeasaspassivemodule)三种文件系统;是的,Downloadended[0x1C]跟Downloadblock[0x1B]的Parameter和Requestdownload[0x1A]的Parameter的第一部分相同!举个例子:图31结束下载_0800001P的作业请求那PDU类型为Ack_Data时,Downloadended[0x1C]的Parameter中只有一个function。下图即为图31的响应:图32结束下载_0800001P的响应这样,整个下载过程就完成了!下载到这就介绍完了,接着就介绍上传啦!上传上传是PLC发送块数据给Step7(如图33)。上传有3中不同的功能类型:开始上传(Startupload[0x1D])上传(Upload[0x1E])上传结束(Endupload[0x1F])在上传过程中,先是Step7向PLC发送一个开始上传的Job,PLC收到后则回复一个Ack_Data,并告诉Step7块的长度、上传会话ID。然后PLC继续上传块数据到Step7,直到Step7收到所有字节。最后,Step7发送结束上传的作业请求来关闭上传会话。时序图如下:图33上传的时序图(图片来源:互联网好了,开始介绍上传的结构啦!如图34所示,即为一个完整的下载过程:图34一个完整的上传过程例子开始上传(Startupload[0x1D])先来介绍,当PDU类型为Job时,Startupload[0x1D]没有Data,其Parameter的结构,下:(1byte):FunctionStatus,功能码状态;(2bytes):forallunknownbytesinblockcontrol;(4bytes):上传的会话ID,此时为0x00000000;(1byte):filenamelength,文件名长度;(?bytes):filename,defaultis9byte,文件名,长度一般为9个字节;(1byte):Fileidentifier(ASCII),文件标识符。其有_(CompleteModule)、(Moduleheaderforup-loading)两种文件标识符;(2bytes):Blocktype,块类型。具体类型,请参考\h6.7功能块;(5bytes):Blocknumber,块编号;(1byte):Destinationfilesystem(ASCII),目标的文件系统。其有P(Passive(copied,butnotchained)module)、A(Activeembeddedmodule)、B(Activeaswellaspassivemodule)三种文件系统;其实就是告诉PLC你上传的位置。举个例子:图35开始上传的作业请求如图35所示,文件标识是_CompleteModule),块类型为0B(SDB),块的编号为00000,目标块的文件系统是A(Activeembeddedmodule),所以文件名为_0B00000A那PDU类型为Ack_Data时,Startupload[0x1D]的Parameter的结构,如下:(1byte):FunctionStatus,功能码状态;(2bytes):forallunknownbytesinblockcontrol;(4bytes):上传的会话ID,告诉Step7上传会话ID;(Unsignedinteger,1byte):BlocklengthstringLength;(Characterstring):Blocklength,块的长度;下图即为图35的响应:图36开始上传的响应图36中,其上传会话ID为0×00000007。上传(Upload[0x1E])上面说了,上传是PLC发送块数据给Step7。当PDU类型为Job时,Upload[0x1E]也没有Data,其Parameter的结构,如下:(1byte):FunctionStatus,功能码状态;(2bytes):forallunknownbytesinblockcontrol;(4bytes):上传的会话ID,告诉Step7上传会话ID;为了更好比较,举个例子:图37上传的作业请求那PDU类型为Ack_Data时,Upload[0x1E]有Parameter和Data,其Parameter的结构,下:1(1byte):FunctionStatus,功能码状态;而其Data的结构,如下:(Unsignedinteger,2bytes):Length,数据长度;(Unsignedinteger,2bytes):Unknownbyte(s)inblockcontrol,未知字节;(Label,data_length-4bytes):Data,数据;下图即为图37的响应:图38上传的确认数据响应上传结束(Endupload[0x1F])上传结束的过程,即为所有数据上传完成后,Step7发送结束上传的作业请求,PLC后就关闭会话,然后返回一个响应。当PDU类型为Job时,Endupload[0x1F]也没有Data,其Parameter的结构,如下:(1byte):FunctionStatus,功能码状态;(2bytes):Errorcode,错误代码:详细的Errorcode,参考\h6.1.2Errorcodeinparameterpart;(4bytes):上传的会话ID,告诉Step7上传会话ID;举个例子:图39上传结束的作业请求那PDU类型为Ack_Data时,Endupload[0x1F]的Parameter中只有一个function。图40所示,即为图39的响应:图40上传结束的响应这样,整个上传过程就完成了!程序调用服务(PIservice[0x28])程序调用是用于在PLC执行修改执行/内存状态的日常工作。这些命令可以用于启动或停止PLC控制程序、激活或删除程序块。当PDU类型为Job时,PIservice[0x28]没有Data,只有Parameter,那Parameter的结构,如下:(7bytes):Unknown;(Unsignedinteger,2bytes):Parameterblocklength;(?bytes):Parameterblock,参数;(Unsignedinteger,1byte):Stringlength,PIservice的字符串长度;(Characterstring,ASCII):PI(programinvocation)Servicename,程序调用服务名,参考\h6.8程序调用服务名(PIservicenames)。Parameter包含两个主要部分:服务名称参数:取决于方法类型,可以将它们看作是它的参数服务名称及其相关参数的示例:_INSE:激活设备上下载的块,参数是块的名称(比如:OB1)。_DELE:从设备的文件系统中删除一个块,该参数也是该块的名称。P_PROGRAM:设置设备的运行状态(启动、停止、复位)。_GARB:压缩PLC内存。_MODU:将ram复制到ROM,参数包含文件系统标识符(A/E/P)。如果服务调用的参数是块的话,那么Parameterblock的结构如下:(1byte):Numberofblock;(1byte):Unknown,默认为0x00;bytes):filename,文件名:(2bytes,ASCII):Blocktype,块类型。具体类型,请参考\h6.7功能块;(5bytes,ASCII):Blocknumber,块编号;(1byte,ASCII):Destinationfilesystem(ASCII),目标的文件系统。其有P(Passive(copied,butnotchained)module)、A(Activeembeddedmodule)、B(Activeaswellaspassivemodule)三种文件系统;举个例子,如图41所示:图41_INSE(激活PLC模块)的作业请求上图可知服务名称是_INSE,参数是0B0004P(SDB4),那么它的作业请求是激活PLC中SDB4,那么它的请求响应又是如何呢?如图42所示:图42_INSE(激活PLC模块)的响应而另一种情况,如图43所示:图43_MODU(复制RAM到ROM)的作业请求上图中,其Parameterblock中只有ArgumentPLCSTOP[0x29]PLCSTOP基本上跟\h5.2.6程序调用服务(PIservice0x28])一致,唯一有Parameterblock,而它的PIservice为P_PROGRAM。搞不明白为啥单独占用一个功能码~~~看个例子吧,如图44所示:图44PLCSTOP的作业请求到此为此JOB和ACK_DATA类型下的功能码都介绍完了,接下来介绍S7commm协议的扩展。协议拓展(Userdata)上面介绍了S7Comm的JOB和ACK_DATA两个PDU类型,那接着将介绍PDU类型是UserData的内容,它用于编程/调试、读取SZL、安全功能、时间设置,循环读取等,可以说是S7Comm中最复杂的一部分。大家不要慌哈,Areuready?Okay,当PDU类型为UserData时,其S7Comm结构,如图45所示:图45S7Comm的结构(UserData)图45中蓝色部分为S7Comm头部,橘色为Parameter部分,具体的Parameter结构如下:(3bytes):参数头(Parameterhead);(1byte):参数长度(Parameterlength),它的可能是8字节或12字节;(1byte):未知定义;(1/2byte,高位):参数类型(Type),常见的类型可参考\h《6.9拓展协议的参数类型》;\h(1/2byte,Lownibble):功能组(Functiongroup),常见的功能组可参考《6.10拓展协议的能组》;(1byte):子功能码(SubFunction);(1byte):序号。接着就是一一介绍各个功能组。转换工作模式(Mode-transition[0x0])当功能组为转换工作模式(Mode-transition)时,请求报文中是没有Data部分的,而主要起作用的是子功能码(Subfunction),常见的子功能码有:STOP(0x00):STOP模式;WarmRestart(0x01):暖启动;RUN(0x02):RUN模式;HotRest

温馨提示

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

评论

0/150

提交评论