企业简介

作为中国自动化领域的权威旗舰网络媒体,控制网创立于1999年7月,是中国举行的第十四届IFAC (International Federation of Automatic Control)大会的中国官方组织机构的唯一指定网站。控制网是中国自动化学会专家咨询工作 委员会(ECC)的秘书处常设之地。是北京自控在线文化传播有限公司开设的网站。

  • 公司类型:其他

联系方式
  • 控制网
  • 地址:北京市海淀区上地十街辉煌国际2号楼1504室
  • 邮编:100085
  • 电话:010-57116291 / 59813326
  • 传真:010-59813329
  • 网址:http://www.kongzhi.net
  • Email:mahongliang@kongzhi.net
  • 联系人:市场部
案例详细
标题PPI协议代替工控组态软件采集数据
技术领域
行业
简介利用西门子S7-200 PLC内置的PPI协议的部分功能和VB ,可以做出简单实用的控制和采集系统,可以代替一些小型的工控组态系统。
内容
1        前言
       西门子S7-200系列可编程控制器(PLC)是控制领域应用最广的小型PLC之一,它支持两种与计算机通信方式:自由端口,PPI方式使用自由口方式进行编程时,必须定义自己的通讯协议,在上位机和PLC中都要编写数据通信程序,占用PLC的内存。使用PPI协议进行通信时,PLC可以不用编程,而且可读写所有数据区,快捷方便。但是西门子公司没有公布PPI协议的格式。用户如果想使用PPI协议,必须购买西门子的协议模块或其它厂家的组态软件。只对于一些小型系统来说成本比较高,若只应用几个数据,就购买一套软件,实在是浪费。利用S7-200内置的PPI协议,开发自己的控制或采集系统不愧是一个捷径。
2        部分PPI协议格式
SD
LE
LEr
SD
DA
SA
FC
DSAP
SSAP
DU
FCS
ED
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.1  读指令实例
      对于一次读取一个数据,读命令都是33个字节。前面的0―21字节是相同的,SA=00,DA=02(PLC缺省地址),如果有多个站,DA要改成相应的站号。读命令中从DA到DU的长度为1B即27个字节。从22字节开始根据读取数据的类型、位置不同而不同。下表是读不同存储器命令的Byte22―32。
字节
22
24
25
26
27
28
29
30
31
32
功能
读取长度
数据个数
数据类型
数据地址
校验
结束
读VB100
02
01
00
01
84
00
03
20
8B
16
读VW100
04
01
00
01
84
00
03
20
8D
16
读vd100
06
01
00
01
84
00
03
20
8F
16
读命令的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
sendbyte(15) = &H0
sendbyte(16) = &H0
sendbyte(17) = &H4
sendbyte(18) = &H1
sendbyte(19) = &H12
sendbyte(20) = &HA
sendbyte(21) = &H10
sendbyte(22) = &H4
sendbyte(23) = &H0
sendbyte(24) = &H1
sendbyte(25) = &H0
sendbyte(26) = &H1
sendbyte(27) = &H84
sendbyte(28) = &H0
sendbyte(29) = (readaddress * 8) \ 256  ‘计算读高位地址
sendbyte(30) = (readaddress * 8) Mod 256 ‘计算读低位地址
sendbyte(31) = &H0
sendbyte(32) = &H16
For i = 4 To 30
    temp = temp + sendbyte(i)
Next
sendbyte(31) = temp Mod 256    ‘计算校验码
ppird = sendbyte  ‘‘返回读VW 指令码
End Function
5.3   写VW函数
Function ppiww(adressx As Integer, datax As Integer)
‘adressx 为写VW的地址datax 要写入VW的整数
Dim i As Integer, temp As Integer
Dim sendbyte(38) As Byte
sendbyte(0) = &H68
sendbyte(1) = &H21
sendbyte(2) = &H21
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
sendbyte(15) = &H0
sendbyte(16) = &H6
sendbyte(17) = &H5
sendbyte(18) = &H1
sendbyte(19) = &H12
sendbyte(20) = &HA
sendbyte(21) = &H10
sendbyte(22) = &H4
sendbyte(23) = &H0
sendbyte(24) = &H1
sendbyte(25) = &H0
sendbyte(26) = &H1
sendbyte(27) = &H84
sendbyte(28) = &H0
sendbyte(29) = (adressx * 8) \ 256
sendbyte(30) = (adressx * 8) Mod 256
sendbyte(31) = &H0
sendbyte(32) = &H4
sendbyte(33) = &H0
sendbyte(34) = &H10
sendbyte(35) = datax \ 256
sendbyte(36) = datax Mod 256
sendbyte(37) = &H0
sendbyte(38) = &H16
For i = 4 To 36
    temp = temp + sendbyte(i)
Next
sendbyte(37) = temp Mod 256
ppiww = sendbyte  ‘返回写VW 指令码
End Function
5.4   利用MSCOMM的事件获取数据
Private Sub MSComm1_OnComm()
Dim rcvtemp(5) As Byte   ‘定义确认发送的数组数据元素为字节
Dim rcv_array() As Byte
Dim yy As Long
  Select Case MSComm1.CommEvent
     Case comEvReceive
            rcv_array = MSComm1.Input  ‘取出串口接收缓冲器的数据。
            If rcv_array(0) = &HE5 Then   ‘PLC 返回应答数据E5H
            SComm1.RThreshold =25
             rcvtemp(0) = &H10
             rcvtemp(1) = &H2
             rcvtemp(2) = &H0
             rcvtemp(3) = &H5C
             rcvtemp(4) = &H5E
             rcvtemp(5) = &H16
             MSComm1.Output = rcvtemp  ‘发送确认指令码
            ElseIF rcv_array(0) = &H68 AND rcv_array(1) = &H17 THEN 
              yy = Val(rcv_array(25)) * 256 + Val(rcv_array(26))  ‘计算读取数据
Text1 = yy
ELSE
              MSComm1.RThreshold = 1
        End If
End Select
watchtimer.Enabled = False    ‘监视返回数据看门狗
End Sub
5.5  主程序
        程序已开始,首先写入PLC必要的实验数据:试验压力值、钢管的直径、保压时间等数据,开始试验,启动一计时器,每隔100毫秒读一次油压值和水压值,同时识别出压力值并用曲线显示出来,完成一次水压试验,保存一次水压曲线数据,以备日后察看。在日常应用中相当可靠便捷。
6        结束语
        利用PPI协议还可以读写S7-200PLC中的各种类型数据,包括I、Q、SM、M、V、等数据类型,能够直接读出以上变量中的位、字节、字、双字等,其中读位变量时,是读取该位所在的字节值,计算机再识别出该位的值,一次还可以读些多个数据,具体的指令码可以模拟以上的指令码写出。PPI协议还具有丰富多彩的功能,若要全面是用PPI协议请使用西门子的授权软件。    
参考文献:
[1]S7-200可编程控制器系统手册西门子(中国)有限公司 2001.9
[2] SIMATIC S7 STEP7 使用手册 西门子(中国)有限公司 2001.9