注册名:

密码:

个人注册

企业注册

商务申请

商务管理平台

企业管理平台

个人管理平台

我的工控博客

中国工控网www.chinakong.com

首页 | 新闻中心 | 工控论坛 | 经验视点 | 工控商务 | 电气手册 | 工控博客 | 招聘求职 | 网上调查 | 企业中心 | 供求信息 | 资料中心 | 工控书店

所在位置:工控论坛 -- PLC论坛 -- 西门子PLC论坛 -- PLC网络通信

中国工控网搜索:

 自动化企业招聘

更多..

 登陆:密码:  注册  密码

搜索:

发表人:PPI 发表时间:2009/6/28 21:27:00  

 

 本栏论题: NI 利用西门子PPI协议采集数据   [1134]

    摘 要:利用西门子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
    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
    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
   
   

以下是关于《NI 利用西门子PPI协议采集数据 》论题的回复(共1篇)

回复人:lzjlov 

 回复时间:2009/6/29 9:30:00

支持(310) | 反对(312)

 

    3k 学习

如果要回复本栏论题,请首先中国工控网www.chinakong.com

·如果你已经是中国工控网www.chinakong.com成员,请直接登录。

·如果你还不是中国工控网www.chinakong.com成员,请首先注册,注册为免费!

注册名:

密  码:

           注册中国工控网www.chinakong.com
           忘记密码

关闭该窗口

关于我们     免责声明     服务项目     广告联系     友情链接     联系方式     意见反馈     设为首页     加入收藏

 ©2023-2025 中国工控网(www.chinakong.com) 版权所有 豫ICP备17046657号

管理员信箱:chinakong98@163.com  服务热线:13525974529

洛阳博德工控自动化技术有限公司

中国    洛阳