西门子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
相关文章
|
监控 安全 网络协议
设备组态网络应用与通信系统
设备组态网络应用与通信系统
|
7月前
|
Java
java实现上位机与西门子PLC的通讯设置
这段代码创建了一个ZCAN_Transmit_Data数组,初始化并设置了数组中的第一个元素,包括写入数据、传输类型为1。然后,创建了一个ZCAN_CAN_FRAME对象,指定了CAN_ID和数据长度为8,并将十六进制字符串转换为字节数组填充到数据字段。将这个帧赋值给ZCAN_Transmit_Data对象。最后通过ZLGCAN接口发送数据,如果返回值不等于1,则抛出异常,否则返回发送结果。
306 0
|
网络协议
西门子S7-200 SMART以太网通信如何组态?
西门子S7-200 SMART以太网通信如何组态?
西门子S7-200 SMART以太网通信如何组态?
西门子S7-1200组态网络连接,组态HMI连接
西门子S7-1200在图形化的网络视图工作区中,可以很方便地将具有联网能力的设备进行组网,下面我们就简单介绍如何组态网络连接及如何组态HMI连接。
西门子S7-1200组态网络连接,组态HMI连接
|
存储 索引
西门子S7-200 SMART与变频器的USS协议通信
今天我们来学习西门子S7-200 SMART与变频器的USS协议通信,下面先介绍一下变频器参数设置。
西门子S7-200 SMART与变频器的USS协议通信
|
搜索推荐
医学实验室信息管理系统源码(LIS)支持双工,单工通讯模式
云 LIS 系统针对区域化 LIS 而设计,依托底层云架构,将传统的 LIS 功能模块进行“云化”。 该系统是集检验业务、科室管理、质量控制、报告、统计分析、两癌等模块于一体的数据检验信息平台。通过计算机联网,实现各类仪器数据结果的实时自动接收、自动控制及综合分析;系统可与条码设备配套使用,自动生成条码,减少实验室信息传递中人为因素导致的误差;系统提供简单、快捷的维护方式,便于用户在使用过程中对整个检验科室、实验室的信息进行维护和管理,全面提高检验科室、实验室的工作效率,为提高医疗质量和临床诊断提供了有力保障。
205 0
|
存储 索引
西门子S7-200SMART与变频器的通信如何设置?USS通信协议如何组态?
今天我们来介绍西门子S7-200SMART与变频器的通信如何设置,USS通信协议如何组态,下面先介绍一下变频器参数设置。
西门子S7-200SMART与变频器的通信如何设置?USS通信协议如何组态?
|
存储 监控
西门子S7-1500 PLC之间、PLC与HMI如何建立通信
西门子S7-1500关于通信的功能非常完善,可以说通信无处不在,这其中包括PLC之间的通信,PLC与人机界面的通信。在博途软件中,支持拖拽方式,通过变量的拖拽自动建立通信,这极大的提高了工程效率。今天我们从三个方面介绍S7-1500的通信。看完本文您会发现通信也是如此简单与高效。
西门子S7-1500 PLC之间、PLC与HMI如何建立通信
|
网络协议 C语言 Perl
西门子S7-200 SMART硬件设备如何组态?通信如何组态,通信参数如何设置?
本篇我们来讲一下西门子S7-200 SMART硬件设备如何组态以及通信参数如何设置。
西门子S7-200 SMART硬件设备如何组态?通信如何组态,通信参数如何设置?
|
网络协议
西门子S7-1200的PROFINET以太网通信
西门子S7-1200 CPU本体上集成了一个PROFINET通信接口,支持以太网和基于TCP/IP的通信标准。通过这个通信接口可以实现S7-1200 CPU与编程设备、CPU与HMI以及CPU与CPU之间的通信。
西门子S7-1200的PROFINET以太网通信