Modbus Rtu通信控件

2005年11月20日 11:44:00

虽然Modbus是公开协议,但是要想做出稳定的通信控件,还是要下一番功夫的。该控件经过多年现场运用,功能完善可靠,可操作的变量类型有I、Q、AI、V。非注册版本仅能操作变量区前10个,注册版本无个数限制,并且注册一份,不限用户个数,可以任意发布使用(仅授权的公司的用户使用,否则追究相应的责任)。

提供有详细的示例程序,很容易掌握使用。

同类产品还有S7_PPI.ocx,S7_CP243.ocx,S7_MPI.ocx等控件【属性】

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

【方法】

OpenPort 打开串口
ClosePort 关闭串口
ReadData 读PLC数据
WriteData 写PLC数据
InitRegCompany 初始化注册公司名称

【事件】

ErrorMessge 操作状态信息

示例程序界面:

http://www.bjjr.com.cn/YeFan/ModbusRtu.rar

示例程序代码:

'*************************************************************************
'**模 块 名:frmTest
'**说 明:YFsoft 版权所有2005 - 2006(C)
'**创 建 人:叶帆
'**日 期:2005-08-23 14:45:36
'**修 改 人:
'**日 期:
'**描 述:MbClient 控件示例
'**版 本:V1.0.0
'*************************************************************************

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

'*************************************************************************
'**函 数 名:cmbType_Click
'**输 入:无
'**输 出:无
'**功能描述:
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2005-08-29 11:42:33
'**修 改 人:
'**日 期:
'**版 本:V1.0.0
'*************************************************************************
Private Sub cmbType_Click()
If cmbType.ListIndex > 2 Then
cmbLen.ListIndex = 0
Else
cmbLen.ListIndex = 1
End If
End Sub

'*************************************************************************
'**函 数 名:cmdAbout_Click
'**输 入:无
'**输 出:无
'**功能描述:
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2005-11-19 23:48:27
'**修 改 人:
'**日 期:
'**版 本:V1.0.0
'*************************************************************************
Private Sub cmdAbout_Click()
ModbusRtu1.About
End Sub

'*************************************************************************
'**函 数 名:cmdClose_Click
'**输 入:无
'**输 出:无
'**功能描述:
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2005-11-19 23:48:12
'**修 改 人:
'**日 期:
'**版 本:V1.0.0
'*************************************************************************
Private Sub cmdClose_Click()
Unload Me
End Sub

'*************************************************************************
'**函 数 名:cmdLogin_Click
'**输 入:无
'**输 出:无
'**功能描述:
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2005-07-26 20:39:33
'**修 改 人:
'**日 期:
'**版 本:V1.0.0
'*************************************************************************
Private Sub cmdLogin_Click()
Dim lngData() As Long
Dim lngRet As Long

ModbusRtu1.FixAddr = cmbNo.ListIndex + 1
lngRet = ModbusRtu1.ReadData(Val(txtAddr), lngData(), , , Modbus_V)
If lngRet = 0 Then
picFlag.BackColor = RGB(0, 255, 0)
Else
picFlag.BackColor = RGB(255, 0, 0)
End If
End Sub
'*************************************************************************
'**函 数 名:cmdSendData_Click
'**输 入:无
'**输 出:无
'**功能描述:
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期: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 = Modbus_I
Case 1: bytType = Modbus_Q
Case 2: bytType = Modbus_AI
Case 3: bytType = Modbus_V
End Select

ModbusRtu1.FixAddr = cmbNo.ListIndex + 1
If ModbusRtu1.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


'*************************************************************************
'**函 数 名: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 = Modbus_I
Case 1: bytType = Modbus_Q
Case 2: bytType = Modbus_AI
Case 3: bytType = Modbus_V
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 ModbusRtu1.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

ModbusRtu1.OpenPort 1
End Sub

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


'*************************************************************************
'**函 数 名:tmrRead_Timer
'**输 入:无
'**输 出:无
'**功能描述:
'**全局变量:
'**调用模块:
'**作 者:叶帆
'**日 期:2005-08-28 11:10:58
'**修 改 人:
'**日 期:
'**版 本:V1.0.0
'*************************************************************************
Private Sub tmrRead_Timer()
cmdReadData_Click
End Sub



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=533315


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值