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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值