西门子PPI协议的工控通信控件

简介: PPI协议是西门子PLC的私有协议,但是PPI又是西门子PLC200系列的默认的协议,如果用公开协议Modbus还得占用目前的程序空间和变量空间。这个控件开发已久,在工控现场已经稳定可靠的运行了几年,性能和可靠性都不错。可操作的变量类型有I、Q、M、V、S、SM。 提供有详细的示例程序,很容易掌握
+关注继续查看

PPI协议是西门子PLC的私有协议,但是PPI又是西门子PLC200系列的默认的协议,如果用公开协议Modbus还得占用目前的程序空间和变量空间。这个控件开发已久,在工控现场已经稳定可靠的运行了几年,性能和可靠性都不错。可操作的变量类型有I、Q、M、V、S、SM。 提供有详细的示例程序,很容易掌握使用。

同类软件还有Modbus.ocx,S7_CP243.ocx,S7_MPI.ocx等控件

【属性】

  bps            波特率
  DataBit        数据位
  StopBit        停止位
  CheckOut       校验方式
  FixAddr        PLC地址

【方法】

  OpenPort       打开串口
  ClosePort      关闭串口
  PlcLogin       PLC登录
  PlcRun         PLC运行
  PlcStop        PLC停止
  ReadData       读PLC数据
  WriteData      写PLC数据
  InitRegCompany 初始化注册公司名称

【事件】

ErrorMessge    操作状态信息

示例程序界面:

下载地址:http://www.sky-walker.com.cn/YeFan/S7_ppi.rar

示例程序代码:

'*************************************************************************
'**模 块 名:frmTest
'**说    明:YFsoft 版权所有2005 - 2006(C)
'**创 建 人:叶帆
'**日    期:2005-08-23 14:45:36
'**修 改 人:
'**日    期:
'**描    述:PPIClient 控件示例(需连接西门子200PLC)
'**          非注册版本只能读取变量区的前10个地址,注册用户读写数据无限制,也无用户个数限制
'**          获取注册图片后,直接拷贝到控件的当前目录即可完成注册,注意在程序中添加下面一行代码:
'**          S7_PPI1.RegCompany="×××公司"  公司名称要和你注册提交的公司名称一致
'**          最新版本请关注:http://blog.csdn.net/yefanqiu
'**版    本:V1.0.0
'*************************************************************************

'*************************************************************************
'**函 数 名:chkRun_Click
'**输    入:无
'**输    出:无
'**功能描述:连续读取PLC数据
'**全局变量:
'**调用模块:
'**作    者:叶帆
'**日    期:2005-08-28 11:11:25
'**修 改 人:
'**日    期:
'**版    本:V1.0.0
'*************************************************************************
Private Sub chkRun_Click()
   tmrRead.Enabled = IIf(chkRun.Value = 0, False, True)
End Sub

'*************************************************************************
'**函 数 名:cmdLogin_Click
'**输    入:无
'**输    出:无
'**功能描述:登录指定地址的PLC
'**全局变量:
'**调用模块:
'**作    者:叶帆
'**日    期:2005-07-26 20:39:33
'**修 改 人:
'**日    期:
'**版    本:V1.0.0
'*************************************************************************
Private Sub cmdLogin_Click()
   If S7_PPI1.PlcLogin(cmbNo.ListIndex + 1) = 0 Then
      picFlag.BackColor = RGB(0, 255, 0)
      picOk.BackColor = RGB(0, 255, 0)
   Else
      picFlag.BackColor = RGB(255, 0, 0)
      picOk.BackColor = RGB(255, 0, 0)
   End If
End Sub
'*************************************************************************
'**函 数 名:cmdSendData_Click
'**输    入:无
'**输    出:无
'**功能描述:读PLC数据
'**全局变量:
'**调用模块:
'**作    者:叶帆
'**日    期:2005-08-27 23:59:32
'**修 改 人:
'**日    期:
'**版    本:V1.0.0
'*************************************************************************
Private Sub cmdReadData_Click()
    On Error GoTo ToExit '打开错误陷阱
    '------------------------------------------------
   Dim i As Long
   Dim bytType As Byte
   Dim lngData() As Long
   
   Select Case cmbType.ListIndex
     Case 0: bytType = PPI_I
     Case 1: bytType = PPI_Q
     Case 2: bytType = PPI_M
     Case 3: bytType = PPI_V
     Case 4: bytType = PPI_S
     Case 5: bytType = PPI_SM
   End Select
   
   S7_PPI1.FixAddr = cmbNo.ListIndex + 1
   If S7_PPI1.ReadData(Val(txtAddr), lngData(), Val(cmbNum.Text), Val(cmbLen.ListIndex), Val(bytType)) = 0 Then
      txtData = ""
      For i = 1 To Val(cmbNum.Text)
        txtData = txtData & Format(lngData(i - 1), "0") & " "
      Next
   Else
     txtData = "Error"
   End If
    '------------------------------------------------
    Exit Sub
    '----------------
ToExit:
   MsgBox Err.Description
End Sub

'*************************************************************************
'**函 数 名:cmdRun_Click
'**输    入:无
'**输    出:无
'**功能描述:使PLC运行
'**全局变量:
'**调用模块:
'**作    者:叶帆
'**日    期:2005-07-26 20:55:15
'**修 改 人:
'**日    期:
'**版    本:V1.0.0
'*************************************************************************
Private Sub cmdRun_Click()
    Dim lngRet As Long
    lngRet = S7_PPI1.PlcRun(cmbNo.ListIndex + 1)
    If lngRet = 0 Then
        picFlag.BackColor = RGB(0, 255, 0)
        picOk.BackColor = RGB(0, 255, 0)
    Else
        picOk.BackColor = RGB(255, 0, 0)
    End If
    If lngRet = 4 Then
        MsgBox "PLC拨码开关在停止位置"
    End If
End Sub

'*************************************************************************
'**函 数 名:cmdStop_Click
'**输    入:无
'**输    出:无
'**功能描述:停止PLC运行
'**全局变量:
'**调用模块:
'**作    者:叶帆
'**日    期:2005-07-26 21:03:23
'**修 改 人:
'**日    期:
'**版    本:V1.0.0
'*************************************************************************
Private Sub cmdStop_Click()
    If S7_PPI1.PlcStop(cmbNo.ListIndex + 1) = 0 Then
        picFlag.BackColor = RGB(255, 255, 0)
        picOk.BackColor = RGB(0, 255, 0)
    Else
        picOk.BackColor = RGB(255, 0, 0)
    End If
End Sub
'*************************************************************************
'**函 数 名:cmdWriteData_Click
'**输    入:无
'**输    出:无
'**功能描述:
'**全局变量:
'**调用模块:
'**作    者:叶帆
'**日    期:2005-08-28 11:43:08
'**修 改 人:
'**日    期:
'**版    本:V1.0.0
'*************************************************************************
Private Sub cmdWriteData_Click()
    On Error GoTo ToExit '打开错误陷阱
    '------------------------------------------------
    Dim bytType As Byte
    Dim strData() As String
    Dim lngData() As Long
    Dim i As Long

    Select Case cmbType.ListIndex
      Case 0: bytType = PPI_I
      Case 1: bytType = PPI_Q
      Case 2: bytType = PPI_M
      Case 3: bytType = PPI_V
      Case 4: bytType = PPI_S
      Case 5: bytType = PPI_SM
    End Select

    If Len(txtData) > 0 Then
        strData = Split(txtData, " ")
        ReDim lngData(UBound(strData))
        For i = 0 To UBound(strData)
          lngData(i) = Val(strData(i))
        Next
        If S7_PPI1.WriteData(Val(txtAddr), lngData, UBound(strData) + 1, Val(cmbLen.ListIndex), Val(bytType), cmbNo.ListIndex + 1) = 0 Then
            '
        Else
            txtData = "Error"
        End If
    End If
    '------------------------------------------------
    Exit Sub
    '----------------
ToExit:
    MsgBox Err.Description
End Sub

'*************************************************************************
'**函 数 名:Form_Load
'**输    入:无
'**输    出:无
'**功能描述:
'**全局变量:
'**调用模块:
'**作    者:叶帆
'**日    期:2005-08-28 19:07:04
'**修 改 人:
'**日    期:
'**版    本:V1.0.0
'*************************************************************************
Private Sub Form_Load()
   Dim i As Long
   For i = 1 To 222
     cmbNo.AddItem Format(i, "0")
   Next
   For i = 1 To 100
     cmbNum.AddItem Format(i, "0")
   Next
   cmbNum.ListIndex = 0
   cmbNo.ListIndex = 0
   cmbType.ListIndex = 3
   cmbLen.ListIndex = 0
   
   S7_PPI1.InitRegCompany "×××公司"    '已注册的公司名称
   S7_PPI1.OpenPort 1                     '打开连接PLC的COM1接口
End Sub

'*************************************************************************
'**函 数 名:Form_Unload
'**输    入:Cancel(Integer) -
'**输    出:无
'**功能描述:关闭串口
'**全局变量:
'**调用模块:
'**作    者:叶帆
'**日    期:2005-08-23 14:40:05
'**修 改 人:
'**日    期:
'**版    本:V1.0.0
'*************************************************************************
Private Sub Form_Unload(Cancel As Integer)
   S7_PPI1.ClosePort
   End
End Sub

'*************************************************************************
'**函 数 名:S7_PPI1_ErrorMessge
'**输    入:msgNo(Integer)         - 信息号
'**        :msgDescription(String) - 信息内容
'**输    出:无
'**功能描述:控件的事件
'**全局变量:
'**调用模块:
'**作    者:叶帆
'**日    期:2005-11-18 11:06:48
'**修 改 人:
'**日    期:
'**版    本:V1.0.0
'*************************************************************************
Private Sub S7_PPI1_ErrorMessge(msgNo As Integer, msgDescription As String)
    MsgBox Str(msgNo) & " - " & msgDescription
End Sub

'*************************************************************************
'**函 数 名:tmrRead_Timer
'**输    入:无
'**输    出:无
'**功能描述:
'**全局变量:
'**调用模块:
'**作    者:叶帆
'**日    期:2005-08-28 11:10:58
'**修 改 人:
'**日    期:
'**版    本:V1.0.0
'*************************************************************************
Private Sub tmrRead_Timer()
   cmdReadData_Click
End Sub
相关文章
|
2月前
|
监控 安全 网络协议
设备组态网络应用与通信系统
设备组态网络应用与通信系统
|
12月前
|
存储 监控
西门子S7-1500 PLC之间、PLC与HMI如何建立通信
西门子S7-1500关于通信的功能非常完善,可以说通信无处不在,这其中包括PLC之间的通信,PLC与人机界面的通信。在博途软件中,支持拖拽方式,通过变量的拖拽自动建立通信,这极大的提高了工程效率。今天我们从三个方面介绍S7-1500的通信。看完本文您会发现通信也是如此简单与高效。
西门子S7-1500 PLC之间、PLC与HMI如何建立通信
|
12月前
|
网络协议
西门子S7-200 SMART以太网通信如何组态?
西门子S7-200 SMART以太网通信如何组态?
西门子S7-200 SMART以太网通信如何组态?
|
12月前
|
存储 索引
西门子S7-200 SMART USS通信,变频器通信程序如何编写?
今天我们继续来学习西门子S7-200 SMART USS通信,本篇我们来介绍如何编写与变频器通信的程序。打开STEP7 Micro/WIN SMART编程软件,双击项目树下的系统块设置,RS485端口地址设置为2,波特率设置为9.6kbps。
西门子S7-200 SMART USS通信,变频器通信程序如何编写?
|
12月前
|
网络协议
西门子S7-200 SMART通信如何组态?
在STEP7-Micro/WIN SMART编程软件中双击CPU,打开系统块对话框,单击选中CPU,在以太网端口选项中,如果选中“IP地址数据固定为下面的值,不能通过其它方式更改”,则输入的为静态IP地址,必须将系统块下载到CPU才能有效。如果想更改IP地址,只能重新在该对话框中设定并下载。
西门子S7-200 SMART通信如何组态?
|
12月前
|
存储 索引
西门子S7-200SMART与变频器的通信如何设置?USS通信协议如何组态?
今天我们来介绍西门子S7-200SMART与变频器的通信如何设置,USS通信协议如何组态,下面先介绍一下变频器参数设置。
西门子S7-200SMART与变频器的通信如何设置?USS通信协议如何组态?
|
12月前
|
网络协议 C语言 Perl
西门子S7-200 SMART硬件设备如何组态?通信如何组态,通信参数如何设置?
本篇我们来讲一下西门子S7-200 SMART硬件设备如何组态以及通信参数如何设置。
西门子S7-200 SMART硬件设备如何组态?通信如何组态,通信参数如何设置?
|
12月前
|
Windows
西门子S7-200 SMART自由口通信,如何设置通信参数
大家好,从今天开始我们来学习西门子S7-200 SMART自由口通信,本篇我们先来介绍一下如何设置通信参数。西门子S7-200 SMART除了支持以太网通信,还可以通过CPU上或信号板上的RS485接口实现串口通信。支持的串口协议,包括自由口协议、USS协议、MODBUS协议和PPI协议。STEP7 Micro/WIN SMART编程软件安装时自动集成串口通信所需要的功能块和子程序。
西门子S7-200 SMART自由口通信,如何设置通信参数
|
12月前
|
存储 索引
西门子S7-200 SMART与变频器的USS协议通信
今天我们来学习西门子S7-200 SMART与变频器的USS协议通信,下面先介绍一下变频器参数设置。
西门子S7-200 SMART与变频器的USS协议通信
|
12月前
|
存储 索引
西门子S7-200 SMART USS通信,编写与变频器通信程序
今天我们继续来学习西门子S7-200 SMART USS通信,本篇我们来介绍如何编写与变频器通信的程序。
西门子S7-200 SMART USS通信,编写与变频器通信程序
推荐文章
更多