摘  要:利用西门子S7-200 PLC内置的PPI协议的部分功能,可以做出简单使用的控制和采集系统。     
    
    
关键词:PPI协议、PLC通讯、数据采集    
    
    
1、前言    
      
西门子S7-200系列可编程控制器(PLC)是控制领域应用最广的小型PLC之一,它支持两种与计算机通信方式:自由端口,PPI方式使用自由口方式进行编程时,必须定义自己的通讯协议,在上位机和PLC中都要编写数据通信程序,占用PLC的内存。使用PPI协议进行通信时,PLC可以不用编程,而且可读写所有数据区,快捷方便。但是西门子公司没有公布PPI协议的格式。用户如果想使用PPI协议,必须购买西门子的协议模块或其它厂家的组态软件。只对于一些小型系统来说成本比较高,若只应用几个数据,就购买一套软件,实在是浪费。利用S7-200内置的PPI协议,开发自己的控制或采集系统不愧是一个捷径。    
    
2、部分PPI协议格式    
    
SD:(Start Delimiter)开始定界符(68H)    
LE:(Length)报文数据长度    
LER:(Repeated Length)重复报文数据长度(从DA到DU)    
SD: (Start Delimiter)开始定界符(68H)     
SA:(Source Address)数据源站地址    
DA:(Destination Address)数据目标站地址    
FC:(Function Code)功能码    
DSAP:(Destination Service Access Point)目的服务存取点    
SSAP:(Source Service Access Point)源服务存取点    
DU:(Data Unit)数据单元    
FCS:校验码(从DA到DU数据和)    
ED:(End Code)结束码(16H)    
    
3、通讯过程    
  从计算机上的COM口通过一条PC/PPI编程电缆连到PLC的编程口上(最小的系统要求),计算机(为主,地址为00)与PLC(为从,地址为02)采用主从方式通讯,具体过程如下图所示,一次读写操作的步骤包括:(1)首先主机(计算机)发出读写命令,(2)从机(PLC)作出接收正确的响应(E5),(3)主机接到此响应则发出确认指令(10 02 00 5C 5E 16),(4)PLC回应给上位机数据。这样收发两次数据,完成一次数据的读写。    
    
    
4、读写指令实例    
4.1读指令实例     
  对于一次读取一个数据,读命令都是33个字节。前面的0—21字节是相同的,SA=00,DA=02(PLC缺省地址),如果有多个站,DA要改成相应的站号。读命令中从DA到DU的长度为1B即27个字节。从22字节开始根据读取数据的类型、位置不同而不同。 下表是读不同存储器命令的Byte22—32。    
    
    
读命令的Byte22-32    
实际输出指令:读VB100,Byte28-30 为100*8=&H0320    
68 1B 1B 68 2 0 6C 32 1 0 0 0 0 0 E 0 0 4 1 12 A 10 2 0 1 0 1 84 0 3 20 8B 16     
4.2 写指令实例:    
一次写一个类型的数据V100,写V区地址 Byte28-30 为100*8=&H0320    
写VB100(16):    
68 20 20 68 2 0 6C 32 1 0 0 0 0 0 E 0 5 5 1 12 A 10 2 0 1 0 1 84 0 3 20 0 4 0 8 10 B9 16    
写VW100(16):    
68 21 21 68 2 0 6C 32 1 0 0 0 0 0 E 0 6 5 1 12 A 10 4 0 1 0 1 84 0 3 20 0 4 0 10 0 10 B9 16     
写VD100(16):    
68 23 23 68 2 0 6C 32 1 0 0 0 0 0 E 0 8 5 1 12 A 10 6 0 1 0 1 84 0 3 20 0 4 0 20 0 0 0 10 B9 16    
Byte 22-- Byte 30 写入数据的长度、存储器类型、存储器偏移量与读命令相同。Byte 35-38 写入数据的位数。    
    
5、应用实例    
  在钢管制造行业,水压静载试验机(简称水压机)是必备的检验和试验设备。因为美国石油协会的API标准《管线钢管 Spec 5L》和国家标准GB/T9711-1997规定,螺旋焊管和直缝焊管必须经过规定的静水压试验,并且保存水压过程的压力曲线。该系统原来是用MCGS工控组态软件+VB程序来完成的,采集速度较慢,最多一秒钟采集一个,比较缓慢。现用VB语言,通过PPI协议直接采集PLC的水压值进行处理,简洁又迅速,怀可以开发出多种功能。采用PPI电缆将计算机COM1口与PLC的PORT0编程口连接,通讯系统采用主从结构,通讯协议遵循PPI协议格式,计算机发出读写申请,PLC返回相应的数据。程序实现如下    
    
5.1 初始化程序    
Private Sub Form_Load()    
With MSComm1    
.CommPort = 1    
.Settings = "9600,e,8,1" ‘波特率9600,偶校验,8数据位,1停止位    
.InputLen = 0    
.RThreshold = 1 ‘收到字符就产生事件    
.InputMode = comInputModeBinary ‘二进制接收模式    
End With     
If MSComm1.PortOpen = False Then    
MSComm1.PortOpen = True ‘打开通讯串口    
End If    
End Sub    
Private Sub Form_Unload(Cancel As Integer)    
If MSComm1.PortOpen = True Then    
MSComm1.PortOpen = False ‘关闭通讯串口    
End If    
End Sub    
5.2 读VW函数    
Function ppird(readaddress As String) ‘读VW的地址,例如:1000    
    
Dim i As Integer, temp As Integer    
Dim sendbyte(32) As Byte    
sendbyte(0) = &H68    
sendbyte(1) = &H1B    
sendbyte(2) = &H1B    
sendbyte(3) = &H68    
sendbyte(4) = &H2    
sendbyte(5) = &H0    
sendbyte(6) = &H6C    
sendbyte(7) = &H32    
sendbyte(8) = &H1    
sendbyte(9) = &H0    
sendbyte(10) = &H0    
sendbyte(11) = &H0    
sendbyte(12) = &H0    
sendbyte(13) = &H0    
sendbyte(14) = &HE    
se  |