本文是Snap7软件包系列教程的第2篇,我们来介绍下S7协议,包括如下几个主题:
1、S7协议简介
2、S7协议命令简介
3、S7协议通信的角色与模式
1、S7协议简介
S7协议是西门子S7系列PLC通信的核心协议,它是一种位于传输层之上的通信协议,其物理层/数据链路层可以是MPI总线、PROFIBUS总线或者工业以太网。
本教程要介绍的Snap7软件包支持基于工业以太网的S7通信协议,其网络参考模型如下图所示:
从上图可以看出,S7协议的下层是传输层的RFC1006协议,也就是ISO-On-TCP协议。这个协议在之前的文章中有介绍,请参考文章:ISO传输协议、ISO-ON-TCP协议和TCP协议有什么不同?
ISO-On-TCP协议依赖TCP协议,其下层依赖是网络层的IP协议。
S7协议的报文采用封装的形式逐层向下传递。首先在S7报文的前面加上TPKT和COTP报头变成ISO-On-TCP协议报文,然后再添加TCP/IP的报头变成TCP/IP报文,如此层层向下传递最后经过物理层发送到网络中。
(图片来源 : Snap7手册)
网络中接收数据的设备,以相反的顺序依次去掉相应层的报文头,就得到了S7协议的报文。
S7协议的基本传输单位称为:过程数据单元(process data unit,PDU)。每个过程数据单元(PDU)都包括一条命令或者对命令的回复。可以说S7协议是一种命令型的协议,每条命令包括如下几个部分:
报文头(header);
参数(parameters);
参数数据(parameter data);
数据块(data block);
报文头和参数是必须有的,参数数据和数据块根据命令的不同而可选。
比如说:将"数据写入到DB100的起始地址偏移量为4的地方"就是一个命令,在这个命令中:写入、数据、DB100、偏移量4都是该命令的组成部分。
2、S7协议命令简介
S7协议的命令有很多,主要包括如下几个类型:
数据读写命令;
块访问命令;
块操作命令;
系统信息命令;
PLC控制命令;
管理命令;
日期时间命令;
安全命令;
数据读写命令可以对存储器(I、Q、M、C、T)的数据进行读写访问;
块访问命令可以访问PLC中块(Block)的详细信息;
块操作命令可以对块进行上传、下载、删除等操作;
系统信息命令可以获取系统相关的信息,比如:系统状态列表、CPU信息、序列号等等;
PLC控制命令可以让CPU执行热启动、冷启动、停机、获取CPU状态等等;
管理命令可以创建与CPU的连接、取消连接、设置通信的参数等;
日期时间命令可以读写CPU的日期时间值;
安全命令可以获取CPU的安全等级、发送用于连接的密码、清除当前会话的密码等;
3、S7协议通信的角色与模式
在S7通信中,有三种角色:客户端/服务器/伙伴。有两种通信模式:客户端/服务器(Client/Server)模式和伙伴/伙伴(Partner/Partner)模式。
在客户端/服务器模式中,必须由客户端发起询问(query),然后服务器才能应答(reply),服务器端不能主动发起询问请求;
在伙伴/伙伴模式中,通信的双方之间都可以主动发起询问,也都可以对伙伴的询问进行应答;
我们经常使用的模式是客户端/服务器模式。
这种模式下,我们通常把PLC作为服务器,而把编程电脑、工控机、触摸屏等作为客户端,比如下面这张图:
(图片来源 : Snap7手册)
PLC也可以作为另一个PLC的客户端,这就是我们常说的S7单边通信,如下图所示:
(图片来源 : Snap7手册)
在客户端/服务器模式中,所有的配置都在客户端,服务器不需要任何配置。
在伙伴/伙伴通信模式下,主动与另一方建立连接的称为主动方(Active Partner),而另一方就称为被动方(Passive Partner)。一旦建立连接后,通信双方都可以发送或接收数据,如下图所示:
在伙伴/伙伴通信模式下,双方都需要进行配置。
好了,关于S7通信协议就先介绍这么多。
最近开通了微信视频号,以视频的方式分享工控小知识,欢迎扫描下方的二维码体验:
发表评论