1. 程式人生 > >Modbus Rtu通訊控制元件

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    操作狀態資訊

 示例程式介面:

示例程式程式碼:

'*************************************************************************'**模 塊 名: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 IfEnd Sub

'*************************************************************************'**函 數 名:cmdAbout_Click'**輸    入:無'**輸    出:無'**功能描述:'**全域性變數:'**呼叫模組:'**作    者:葉帆'**日    期:2005-11-19 23:48:27'**修 改 人:'**日    期:'**版    本:V1.0.0'*************************************************************************Private Sub cmdAbout_Click()    ModbusRtu1.AboutEnd Sub

'*************************************************************************'**函 數 名:cmdClose_Click'**輸    入:無'**輸    出:無'**功能描述:'**全域性變數:'**呼叫模組:'**作    者:葉帆'**日    期:2005-11-19 23:48:12'**修 改 人:'**日    期:'**版    本:V1.0.0'*************************************************************************Private Sub cmdClose_Click()    Unload MeEnd 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 IfEnd 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.DescriptionEnd 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.DescriptionEnd 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 1End Sub

'*************************************************************************'**函 數 名:Form_Unload'**輸    入:Cancel(Integer) -'**輸    出:無'**功能描述:關閉串列埠'**全域性變數:'**呼叫模組:'**作    者:葉帆'**日    期:2005-08-23 14:40:05'**修 改 人:'**日    期:'**版    本:V1.0.0'*************************************************************************Private Sub Form_Unload(Cancel As Integer)   ModbusRtu1.ClosePort   EndEnd Sub

'*************************************************************************'**函 數 名:tmrRead_Timer'**輸    入:無'**輸    出:無'**功能描述:'**全域性變數:'**呼叫模組:'**作    者:葉帆'**日    期:2005-08-28 11:10:58'**修 改 人:'**日    期:'**版    本:V1.0.0'*************************************************************************Private Sub tmrRead_Timer()   cmdReadData_ClickEnd Sub