`
lovecontry
  • 浏览: 1095184 次
文章分类
社区版块
存档分类
最新评论

Modbus Rtu通信控件

 
阅读更多

虽然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.sky-walker.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

分享到:
评论

相关推荐

    C# ModBus通信读写操作,ModBus Rtu串口通信,ModBus Tcp通信,全开源可使用 零基础快速对接ModBus

    C#对三菱和西门子,欧姆龙等支持Modbus的服务器进行读写,不需要...3)支持ModBusRtu串口通信读写操作 4)支持ModBusAscii串口通信读写操作 5)支持ModbusRtuOverTcp通信读写操作 6)请放心下载,多个项目已经在使用;

    MFC 简单Modbus RTU.zip_MFC Modbus_MFC modbus RTU_MFCmodbus_mfc vs2

    通过深入研究`MFCTest4`的源代码,你可以了解如何将MFC的事件驱动编程模型与Modbus RTU通信协议相结合,实现一个实际的工业控制应用。 总的来说,这个"MFC简单Modbus RTU"项目为学习者提供了一个很好的起点,通过它...

    组态王与多台单片机MODBUS RTU通信实例.zip

    本实例将探讨如何利用组态王实现与多台单片机的MODBUS RTU通信。 首先,理解MODBUS RTU协议至关重要。MODBUS是Modicon公司在1979年推出的开放式通信协议,RTU(Remote Terminal Unit)是其工作模式之一,适用于串行...

    C#WPF 制作的上位机界面通过MODBUS RTU和数码管显示屏通讯

    总之,通过C# WPF实现MODBUS RTU通信并与数码管显示屏交互,需要理解MODBUS RTU协议的细节,熟悉WPF UI设计,以及掌握串口通信的原理。这不仅可以帮助开发者创建高效、稳定的工业控制系统,也为新手提供了宝贵的实践...

    485-modbus-rtu上位机vb6源代码

    《VB6实现485-Modbus RTU通信详解》 在信息技术领域,尤其是在工业自动化控制中,Modbus协议因其简单、可靠而被广泛应用。本文将深入探讨如何使用VB6(Visual Basic 6)编程语言实现485接口的Modbus RTU通信,通过...

    手把手教VB 实现MODBUS RTU通讯

    MODBUS RTU是一种基于ASCII或RTU(远程终端单元)数据帧格式的通信协议,适用于串行通信。RTU模式下,数据以二进制形式传输,没有ASCII的字符间隔,因此传输效率更高。协议规定了主站和从站之间的请求/响应机制,...

    VS2013开发的MFC下的Modbus RTU

    在本文中,我们将深入探讨如何使用Visual Studio 2013(VS2013)进行MFC(Microsoft Foundation Classes)应用程序开发,并结合Modbus RTU协议实现一个基础的通信功能。Modbus RTU是一种广泛使用的工业通信协议,...

    ModbusRTU从站C++源程序

    - `SerialPort.cpp`:实现了串口通信功能,这是Modbus RTU通信的基础,负责与主站建立物理连接并传输数据。 - `ModbusRTU_SDLG.cpp`:可能包含用户界面对话框的代码,用于设置或显示Modbus相关的配置。 - `StdAfx...

    VB6_485_MODBUS_RTU读写RFID源码

    在本文中,我们将深入探讨基于VB6的MODBUS RTU通信技术,以及如何利用它来实现485通讯,读写RFID,并控制相关设备。VB6(Visual Basic 6)是微软公司推出的可视化编程环境,它允许开发者创建桌面应用程序,而MODBUS ...

    基于labview实现modbus RTU协议方法总结.zip_labview_欧姆龙PLC通讯

    3. **编写Modbus RTU通信VI**:利用LabVIEW的串行写操作发送Modbus请求,并通过串行读操作接收PLC的响应。确保正确处理错误,如超时、校验错误等。 4. **数据解析与显示**:接收到PLC的响应后,需要解析Modbus RTU...

    modbus_rtu.dll_V3.0完美版串口通讯控件应用例程

    Modbus RTU.dll V3.0控件为Delphi开发者提供了直接与支持Modbus RTU协议的设备交互的能力,无需深入理解底层通信细节,极大地简化了开发过程。 Delphi是一款强大的面向对象的 Pascal 编程工具,具有丰富的库支持和...

    C# 多窗口切换加modbusRTU串口通讯

    实现Modbus RTU通信,我们需要了解Modbus协议。Modbus是一种广泛应用的工业通信协议,主要用于PLC(可编程逻辑控制器)和其他设备之间的数据交换。Modbus RTU是其一种变体,使用串行通信,具有高效、简单的特点。在...

    delphi7实现的MODBUS RTU 标准协议 485 源码及实例

    delphi7实现的MODBUS RTU 标准协议 485 源码及实例 这是我做的一个现实中的项目,里面有一个生成CRC的例子源码,同时也包括我在项目中用的到案例,通过 spcomm控件定时发送信息后,接收信息并验证数CRC数据是否正确...

    基于vb.net的modbus上位机通信协议代码(RTU模式)

    Modbus是一种广泛应用于工业自动化领域的通信协议,它允许设备之间进行简单、有效的数据交换。在VB.NET中实现Modbus通信,通常涉及到...通过学习和理解这些代码,可以进一步掌握如何在VB.NET环境下实现Modbus RTU通信。

    delphi\vb实现modbus rtu例子

    在标题“delphi\vb实现modbus rtu例子”中,我们可以理解为该压缩包包含了一些使用Delphi或Visual Basic (VB)编程语言实现的Modbus RTU通信的源代码示例。 Modbus RTU协议的基本原理是将数据以二进制格式打包成帧,...

    delphi MODBUS控件

    Delphi MODBUS控件是一种专为在Delphi集成开发环境中使用的组件,用于实现MODBUS通信协议,以便于与各种支持MODBUS协议的PLC(可编程逻辑控制器)进行交互。MODBUS是一种广泛应用的工业通信协议,它允许不同设备之间...

    VB编写的Modbus RTU协议通讯源程序

    在VB中实现Modbus RTU通信,通常需要借助第三方库,如NModbus库,这是一个开源的.NET实现,支持Modbus RTU和TCP协议。通过引用该库,开发者可以方便地调用预定义的函数,进行读写寄存器、线圈等操作。 3. **VB代码...

    ModbusRTU_win32.7z

    总结来说,"ModbusRTU_win32.7z"压缩包文件是一个用于Modbus RTU设备调试的工具,包含串口通信配置和MFC界面元素,对于从事相关开发工作的人员而言,它是学习和调试Modbus RTU通信的重要资源。通过深入理解和使用这...

    VB6 ModbusTCP转ModbusRTU样例

    **VB6 ModbusTCP转ModbusRTU样例详解** 在工业自动化领域,Modbus协议是一种广泛应用的通信协议,它允许设备之间进行简单且高效的数据交换。本篇将深入探讨如何利用VB6(Visual Basic 6)实现Modbus TCP到Modbus ...

Global site tag (gtag.js) - Google Analytics