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