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

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
### 回答1: MFC是Microsoft Foundation Classes的缩写,是一种微软公司提供的C++类库,用于在Windows操作系统上进行GUI编程。而Modbus RTU是一种串行通信协议,用于在工业自动化领域中设备之间进行数据通信。MFC Modbus RTU则是将MFC与Modbus RTU协议结合起来,实现了在Windows平台上对Modbus RTU设备的通信控制和数据读取。 在MFC Modbus RTU的实现中,可以使用串口通信技术来实现与Modbus RTU设备的通信。MFC提供了丰富的界面控件和消息处理机制,可以方便地设计交互界面和进行事件响应处理。同时,MFC也提供了底层的通信API,可以与Windows的串口通信驱动程序进行交互,确保稳定的数据通信。 在使用MFC Modbus RTU时,可以先根据设备的Modbus地址和功能码构建数据帧,再通过串口发送给设备。设备接收到数据帧后,进行处理,并将响应数据帧返回给计算机。计算机可以通过MFC Modbus RTU提供的API进行数据解析和处理,例如将寄存器数据转换为实际物理量。同时,MFC Modbus RTU也支持多线程编程,可以在通信过程中实现UI响应和异步操作。 总之,MFC Modbus RTU的出现,极大地方便了工业自动化设备和Windows平台之间的数据交互。使用它可以快速地搭建稳定的通信系统,提高生产效率和数据处理效率。 ### 回答2: MFC指的是Microsoft基金会的类库,提供了一些方便开发Windows应用程序的类和函数,而Modbus RTU则是一种通信协议,一般用于串行通信。在MFC中,可以使用一些类库来实现Modbus RTU通信,如SerialPort类、CModbusRTUMaster类,通过这些类库,可以方便地实现Modbus RTU数据的读写和通信控制等功能。需要注意的是,在使用MFC类库进行Modbus RTU通信时,需要事先了解Modbus RTU协议的细节,包括数据帧格式、地址映射和数据类型等,才能确保通信的稳定和可靠。同时,也需要根据具体应用场景选择合适的通信模式和参数,以满足不同的需求。 ### 回答3: MFC (Microsoft Foundation Classes) 是微软公司开发的一种基于面向对象的Windows编程框架,该框架提供了一个强大的、灵活的应用程序架构,以便开发者可以轻松地创建Windows应用程序。而Modbus是一种用于串行通信协议,在自动化控制领域得到广泛应用。Modbus RTU 是其中一种通信方式,它使用二进制编码,是一种快速、可靠的通信方式。 MFC Modbus RTU 是指在MFC框架下实现Modbus RTU协议的通信方式。通常情况下,开发人员需要使用专门的串口通信库来实现Modbus RTU通信,但是使用MFC框架可以使开发人员更方便地实现串口通信,同时也能够轻松地将界面设计与通信功能进行整合。 在使用MFC框架进行Modbus RTU通信时,开发人员可以利用框架提供的串口通信类和线程类来实现通信功能。通过对串口通信类的基本封装,开发人员可以轻松地实现串口的打开、关闭、发送数据和接收数据的功能,同时线程类可以用来实现数据的异步读取,避免了对界面的阻塞。 总之,MFC框架结合Modbus RTU通信可以使开发人员更加方便地实现自动化控制领域中的通信功能,提高开发效率和代码可读性。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值