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

西门子PPI协议的工控通信控件相关推荐

  1. 西门子PPI协议开发

    目录 西门子PPI协议开发 1 协议介绍 2 仿真环境 2.1 安装修改仿真软件 2.2 设置PPI串口

  2. 西门子PPI协议转成OPC协议

    钡铼技术OPC网关可以把西门子PPI协议转换为OPC UA协议,对客户统一转换协议非常方便.不需要编写程序或添加协议转换设备.OPC网关已经集成了西门子PLC,目前支持西门子S7-200,S7-200 ...

  3. 西门子s7协议 android,工控协议 | 西门子S7协议学习分享

    原标题:工控协议 | 西门子S7协议学习分享 *本文作者:gongmo,本文属 FreeBuf 原创奖励计划,未经许可禁止转载. 0×1前言 随着网络安全的发展,工控安全也越发的走进信息安全人员的工作 ...

  4. Siemens PPI协议分析

    大家好:我是山东临沂的郝金红,PLC解密网是我的个人网站.由于前段时间的疯狂的研究西门子PPI协议解密之故,所以无心插柳的研究出了较实用的西门子S7-200 PPI协议,今天奉献大家.我们经常要用于上 ...

  5. 工控随笔_09_西门子_S7-200 Smart与V20 USS通信USS_RPM_R利用轮询的方式通讯异常

    工控随笔_09_西门子_S7-200 Smart与V20 USS通信USS_RPM_R利用轮询的方式通讯异常 参考文章: (1)工控随笔_09_西门子_S7-200 Smart与V20 USS通信US ...

  6. 西门子S7-200 ppi协议解析

    我们提供 PPI协议的官方文档,协议更新时间为2005年,下面是我们根据文档解析的PPI读取变量返回数据,网上的文献大部分都是讲解如何发送的,对于接收提的很少,其中接收有很多控制位,下面的表格都一一列 ...

  7. 西门子200/300PLC转以太网同时实现PPI/MPI/DP转modbus通信

    西门子200/300PLC转以太网同时实现PPI/MPI/DP转modbus通信 产品简介 兴达易控MPI-ETH-XD1.0plus是在MPI-ETH-XD1.0的基础上,以太网口增加了支持与西门子 ...

  8. ppi协议源码 c语言,西门子PPI通讯协议

    S7-200 PLC之PPI协议 通过硬件和软件侦听的方法,分析PLC内部固有的PPI通讯协议,然后上位机采用VB编程,遵循PPI通讯协议,读写PLC数据,实现人机操作任务.这种通讯方法,与一般的自由 ...

  9. 关于西门子PC Adapter USB对于PPI协议的支持问题的结论(2015-10-19相反的结论):

    PPI协议是西门子S7-200端口的标配协议,并且可以组态成自由端口协议.目前市面上有很多PC Adapter USB号称支持S7-200.300.400的编程.但是,在对于S7-200编程时,很多人 ...

最新文章

  1. eclipse中运行tomcat提示端口被占的4种解决方案
  2. 【译】An Intro to TrueBit: A Scalable, Decentralized Computational Court.
  3. 引入OAuth2的主要目的
  4. c++ 线程什么时候run_阿里后端Java面试题:启动线程是start()还是run()?为什么?...
  5. 计算机的安全设置在哪儿,电脑防火墙在哪里设置
  6. c++ cdi+示例_C ++中带有示例的本地类
  7. C/C++插入数据到Mysql数据库中
  8. 再聊Spring Bean的生命周期
  9. Npm常用命令有哪些
  10. 使用Postman访问OAuth2保护的WebAPI
  11. 华为交换机 查ip冲突_华为交换机发现邻居操作,查看端口和ip
  12. 【光剑藏书轩2021】5分钟读懂《贫穷的本质》:“穷人通常缺少信息来源”
  13. MyBatis12-分页插件
  14. 云南民族大学计算机科学与技术在哪个校区,云南民族大学是不是有一个玉溪校区具体是在哪里...
  15. 如何快速通过对方微信好友验证!
  16. 业余草:《名博是怎样炼成的》经典语句整理
  17. 战地一服务器性能低怎么办,《战地1》帧数优化图文攻略 战地1帧数低怎么办?...
  18. 智能中子混音插件:iZotope Neutron 3 Advanced for mac
  19. 内蒙古经贸学校计算机专业,内蒙古经贸学校招生专业|内蒙古经贸学校有哪些专业...
  20. 实时用户在线人数统计(一):表统计

热门文章

  1. 第十四届蓝桥杯C++B组题解(不完全对)
  2. EF框架(一)搭建过程
  3. ins是什么与Instagram有什么区别
  4. 视频教程-仿淘宝客户端电商平台android初级速成-Android
  5. DDD不够好用,你需要学习如何进行弹性软件系统设计
  6. Elasticsearch之指定分片、路由查询
  7. 10大最具影响力人物
  8. outlook你的邮件服务器证书无效,安卓手机outlook无法登录、添加帐户
  9. ps切片 html作用,ps切片有什么用,PS切片是什么
  10. python的self使用