欢迎来到学术参考网

西门子S7—200以太网通讯协议研究

发布时间:2015-07-22 09:50

 西门子S7-200 PLC网络模块采用S7协议通讯,本文分析S7协议的内容与帧格式,其目的是能够让客户自己编写程序,用自己的socket程序通过以太网读写西门子S200 PLC 区数据。本文对要通过编写程序读取S7-1200、S7-300、S7-400的读者也有帮助。
  【关键词】S7-200 S7协议 以太网通讯 TCP/IP
  1 前言
  在使用西门子S7-200 PLC的中,因为其通讯协议不公开,经常导致客户自己开发监控软件同PLC通讯连接出现困难。本文尝试研究通过以太网读取西门子 S200 PLC数据块及寄存器功能。
  由于西门子的S7协议是不公开的协议,所以本文的研究方式是通过监听通讯帧,抓取数据包,然后推测协议的格式、定义及意义。
  本文的目的,是能让用户自己编写程序,用自己的程序读取西门子S-7 200 PLC的 I、Q、M、DB区数据。
  由于本人主要使用以太网与PLC通讯,所以重点介绍 ISO on TCP的通讯方式。但从网上的资料看出,S200的PPI协议、MPI协议其核心都是S7协议。相信本文对想通过MPI或PPI连接的用户也有一定的帮助。
  2 ISO on TCP的模型
  ISO(International Organization for Standardization )国际标准化组织制定了OSI(Open System Interconnection)7层模型,包括:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
  西门子S7-200网络通讯使用的是:TCP/IP+ISO TP+S7协议。如图1。
  通讯过程是:
  (1)TCP三次握手建立通讯TCP连接。
  (2) ISO_TP连接建立。
  (3)S7协议连接请求、应答建立连接。
  (4)实现S7协议读取数据。其过程如图2。
  3 RFC1006
  由于S7-200网络通讯,是使用的ISO TCP,先简要介绍一下ISO TP。如要更清晰了解ISO TP内容,请参考RFC1006及RFC983文档。
  3.1 帧格式
  ISO TP 帧分为两部分,一部分为帧头,一部分为 TPDU
  ISO TP的帧分为4中帧分别是:
  (1)CR: connect request(连接请求);
  (2)CC: connect confirm(连接应答帧);
  (3)DR: disconnect request(断开请求帧);
  (4)DT: data(数据帧);
  (5)ED: expedited data(扩展数据帧)。
  对这5种类型帧,帧头格式一样,TPDU格式不同。
  3.2 帧头格式
  Vrsn reserved packet length
  1 Byte 1 Byte 2 Byte
  Vrsn 版本 :03;Reserved:保留;packet length 从vrsn到数据结尾长度,包括Vrsn。
  3.3 TPDU格式
  3.3.1 CR(连接请求)、CC(连接应答帧)的TPDU格式
  如表1所示。
  (1)header length:TPDU到帧尾长度,不包括header length这个字节。
  (2)code :TPDU 类型,4个bit位。 0xe(1110)为连接请求CR;0xd(1101)为连接确认CC;0x8(1000)为断开连接请求DR;0xF(1111)为数据帧DT;0x1(0001)为扩展数据帧 ED。
  (3)Credit:保留,总是0。
  (4)destination reference :目的reference,在S200通讯中总是0。
  (5)source reference :目的reference,在S200的通讯中,为连续次数(在RFC983中定义该部分为0)。
  (6)class :4bits 发送端总是0,接受端忽略。
  (7)options :4bits 发送端总是0,接受端忽略。
  (8)variable data :该部分可传输多个参数,每个参数部分为:参数码(1Byte)+参数长度(1Byte)+参数值(N Byte)。
  在S7-200以太网通讯中,variable data共有三组参数。参数1(C1)为PLC端的连接通道号、PLC机架号、PLC槽号;参数2(C2)为远端连接通道号、机架号、槽号;参数3(C3)为0x0A。
  3.3.2 ED(扩充) 的TPDU格式
  如表2所示。
  header length部分、code部分、credit部分,内容同表2。
  PDU-NR and EOT:0x80(1000 0000)表示该帧包括帧尾,即该帧独立,没有后续数据;其他数据忽略。
  4 S7协议
  西门子的S7通讯协议,是一组复杂的多功能协议,可下载程序,上次程序,操作PLC,读取数据等。本篇只针对S7-200数据读取功能部分进行解读。由于S7协议为没有公开资料,所以解读可能与实际存在差异。
  4.1 S7协议连接
  在S7协议层,客户端读取S7-200数据前,需要先建立连接。以下是客户端连接请求及PLC的连接应答帧。
  (1)连接请求帧为:32 01 00 00 cc c1 00 08 00 00 f0 00 00 01 00 01 03 c0
 (2)连接应答帧为:32 03 00 00 cc c1 00 08 00 00 00 00 f0 00 00 01 00 01 00 f0
  该部分尚未知确切的含义。
  4.2 S7读命令
  4.2.1 命令
  如表3所示。
  标示符【0】: 0x32为帧开始标示符。
  请求应答标识【1】:0x01为发送命令帧;0x03为应答帧。
  保留【2~3】:保留或未知,填充0x00。
  事务处理标识【4~5】:请求、应答事务标识,应答帧直接复制返回该部分。
  命令长度【6~7】:填充从命令符开始,到帧结束的字节长度,包括命令本身的1个字节。
  保留【8~9】:保留,填充0x00;
  命令符【10】:命令符,0x04为读命令,0x05为写命令。
  读取数据段数【11】:该部分为”读取数据段”个数。S7协议支持一次读取多个不连续地址的数据,读取段个数为本次读取命令要读取不连续数据段的数目。
  读取数据段命令域【12~23】:在读取多个不连续地址的数据时,该部分可重复出现。具体含义:
  命令域子段标示头【12】:读取数据段命令域的标识头,为0x12;
  命令域子段长度【13】;命令域子端的长度,该字节后,到本命令域子段的长度。
  未知【14】:该字节未知确切的含义,通常为0x10。
  数据类型【15】:0x01 bit;0x02 byte;0x04为float
  读取字节【16~17】:本命令段读取字节长度;
  数据块编号【18~19】:读取数据块的编号,为I、Q、M等区,为0;
  寄存器类型【20】:读取寄存类型,0x04 顺序控制继电器区(S);0x05特殊存储器区(SM);0x06 模拟量输入映象区(AI);0x07 模拟量输出映象区(AQ);0x1E:计数器存储器区(C);0x81数字量输入寄存器(I);0x82数字量输出寄存器(Q);0x83位存储器区(M);0x84变量存储器(V); 0x1F定时器存储器 区(T)。
  偏移地址【20】:开始读取量的偏移地址,安bit计算。
  4.3 S7读应答
  应答
  如表4所示。
  标示符【0】: 0x32为帧开始标示符。
  请求应答标识【1】:0x03为应答帧。
  保留【2~3】:保留或未知,填充0x00。
  事务处理标识【4~5】:直接复制请求帧该部分,然后填充返回。
  执行命令返回值【6~7】:推测是执行命令的结果代码。推测0x02为执行OK。
  数据帧长度【8~9】:从“数据段个数[13]”后,到帧尾的数据长度。
  保留【10~11】:保留或未知,填充0x00。
  命令符【12】:命令符,0x04为读命令,0x05为写命令。
  数据段个数【13】:返回的数据段数
  数据段:根据读取不连续地址命令,一个应答帧可包含多个读取的数据段。具体含义:
  子数据段标示符【14】:0xFF子数据段标示符。
  有效性【15】:该项表示的意义不太确定,推测为该数据段数据的有效性。
  数据长度【16~17】:子数据段的数据长度,按bit位计算。
  子数据段数据【N】:返回的数据。
  5 编程试验
  根据以上协议,编程实现通过以太网,读取S7-200PLC数据。读取QB0、MB0的界面如图3。
  参考文献
  [1] Transport Services on Top of the TCP.
  [2] Transport Service on top of the TCP.
  作者简介
  贾涛(1977-),男,现为软件工程师。主要从事监控软件设计。
  作者单位

上一篇:APT高级可持续性威胁防御系统设计

下一篇:基于可扩展端口技术的实时领域分层递阶建模的