⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmmain1.vb

📁 modbusRTU
💻 VB
📖 第 1 页 / 共 5 页
字号:
        '
        'MnuPort
        '
        Me.MnuPort.Index = 0
        Me.MnuPort.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.MnuCom1, Me.MnuCom2})
        Me.MnuPort.Text = "端口选择"
        '
        'MnuCom1
        '
        Me.MnuCom1.Checked = True
        Me.MnuCom1.Index = 0
        Me.MnuCom1.Text = "MSCOMM1"
        '
        'MnuCom2
        '
        Me.MnuCom2.Index = 1
        Me.MnuCom2.Text = "MSCOMM2"
        '
        'FrmMain1
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)
        Me.BackColor = System.Drawing.SystemColors.Control
        Me.ClientSize = New System.Drawing.Size(728, 623)
        Me.Controls.Add(Me.Text6)
        Me.Controls.Add(Me.Command1)
        Me.Controls.Add(Me.Frame7)
        Me.Controls.Add(Me.Frame6)
        Me.Controls.Add(Me.Frame4)
        Me.Controls.Add(Me.Frame3)
        Me.Controls.Add(Me.Frame2)
        Me.Controls.Add(Me.Frame1)
        Me.Controls.Add(Me.Frame5)
        Me.Controls.Add(Me.MSComm1)
        Me.Cursor = System.Windows.Forms.Cursors.Default
        Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
        Me.Location = New System.Drawing.Point(11, 49)
        Me.Menu = Me.MainMenu1
        Me.Name = "FrmMain1"
        Me.RightToLeft = System.Windows.Forms.RightToLeft.No
        Me.Text = "Modbus RTU msb.sf@163.com"
        Me.Frame7.ResumeLayout(False)
        Me.Frame6.ResumeLayout(False)
        Me.Frame4.ResumeLayout(False)
        Me.Frame3.ResumeLayout(False)
        Me.Frame2.ResumeLayout(False)
        Me.Frame1.ResumeLayout(False)
        Me.Frame5.ResumeLayout(False)
        CType(Me.MSComm1, System.ComponentModel.ISupportInitialize).EndInit()
        Me.ResumeLayout(False)

    End Sub
#End Region 
#Region "升级支持"
	Private Shared m_vb6FormDefInstance As FrmMain1
	Private Shared m_InitializingDefInstance As Boolean
	Public Shared Property DefInstance() As FrmMain1
		Get
			If m_vb6FormDefInstance Is Nothing OrElse m_vb6FormDefInstance.IsDisposed Then
				m_InitializingDefInstance = True
				m_vb6FormDefInstance = New FrmMain1()
				m_InitializingDefInstance = False
			End If
			DefInstance = m_vb6FormDefInstance
		End Get
		Set
			m_vb6FormDefInstance = Value
		End Set
	End Property
#End Region 
	'***********************************************************************************************
	'读多个保持寄存器值  功能码=03H
	'[地址][功能码][寄存器起始地址高8位][寄存器起始地址低8位][寄存器数量高8位][寄存器数量低8位][CRC低字节][CRC高字节]
	
	'写多个保持寄存器值  功能码=10H
	'[地址][功能码][寄存器起始地址高8位][寄存器起始地址低8位][寄存器数量高8位][寄存器数量低8位][字节计数][数据高字节][数据低字节]...[数据高字节][数据低字节][CRC低字节][CRC高字节]
	
	'写单个保持寄存器值  功能码=06H
	'[地址][功能码][寄存器起始地址高8位][寄存器起始地址低8位][数据高字节][数据低字节][CRC低字节][CRC高字节]
	'
	'编程 刘胜红 2007-07-13
	'************************************************************************************************
	'
	Private Sub CmdPort_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles CmdPort.Click
		If MSComm1.PortOpen = False Then
			
			MSComm1.CommPort = Me.ComboPort.SelectedIndex + 1
			MSComm1.Settings = "19200,e,8,1"
			MSComm1.InputMode = MSCommLib.InputModeConstants.comInputModeBinary
			MSComm1.PortOpen = True
			
		End If
        Timer1.Enabled = True
        Timer2.Enabled = True
        Timer3.Enabled = True
		
		Me.CmdReadB.Enabled = True
		Me.CmdReadVD.Enabled = True
		Me.CmdReadVW.Enabled = True
		
		Me.CmdWriteB0.Enabled = True
		Me.CmdWriteB1.Enabled = True
		Me.CmdWriteVD.Enabled = True
		Me.CmdWriteVW.Enabled = True
		
		If Err.Number Then '打开串口失败,则显示出错信息
			MsgBox(ErrorToString(), 48, "错误信息")
			Exit Sub
		End If
	End Sub
	Private Sub CmdReadB_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles CmdReadB.Click
		
		AddPLC = CStr(Me.CombAddPLC.Text)
		AddrReadB = Me.TextAddRB.Text
		BitNumber = Val(Me.TextBitNumR.Text)
		ReadNumberB = Val(Me.CobRBNumber.Text)
		
		
        Call GetBit(0, AddrReadB, BitNumber, ReadNumberB) '''''''0(FlagRec)表示还没有返回,此处一定为0,AddrRead为起始字节, BitNumber为位, ReadNumberB读的字数
        '''''''如GetBit(0,3000,1,3)即读回 V3000.1,V3002.1,V3004.1,分别储存在ResultBit(0)、ResultBit(1)和ResultBit(2)
	End Sub
	
	Private Sub CmdReadVD_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles CmdReadVD.Click
		
		
		AddPLC = CStr(Me.CombAddPLC.Text)
		ReadNumberD = Val(Me.CobRDNumber.Text)
		AddrReadD = CStr(TextAddRD.Text)
		
        Call ReadVD(0, AddrReadD, ReadNumberD) ''''''0(FlagRec)表示还没有返回,此处一定为0,AddrRead为起始地址, 必须为偶数(MODBUS地址与PLC地址表示方法不同)ReadNumberD为读的双字数
        '''''''如ReadVD(0,3000,2)即读回VD3000,VD3004,分别储存在DataVD(0)和DataVD(1)
	End Sub
	
	Private Sub CmdReadVW_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles CmdReadVW.Click
		
		AddPLC = CStr(Me.CombAddPLC.Text)
		ReadNumberW = Val(Me.CobRWNumber.Text)
		AddrReadW = CStr(TextAddRW.Text)
		
        Call ReadVW(0, AddrReadW, ReadNumberW) ''''''0(FlagRec)表示还没有返回,此处一定为0,AddrRead为起始地址, 必须为偶数,ReadNumberW为读的字数
        '''''''如ReadVW(0,3000,2)即读回VW3000,VW3002,分别储存在DataVW(0)和DataVW(1)
		
	End Sub
	
	Private Sub CmdWriteB0_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles CmdWriteB0.Click
		Dim AddrWrite As String
		Dim BitNumber As Short
		
		AddrWrite = Me.TextAddWB.Text
		BitNumber = Val(Me.TextBitNumR.Text)
		
        Call SetBitFalse(AddrWrite, BitNumber) ''''''AddrWrite为要写的地址, 必须为偶数,BitNumber为写的位数
        '''''''SetBitFalse(3000,2)  即令V3000.2=0(为了处理方便,是令VW3000=0)
	End Sub
	
	Private Sub CmdWriteB1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles CmdWriteB1.Click
		Dim AddrWrite As String
		Dim BitNumber As Short
		
		AddrWrite = Me.TextAddWB.Text
		BitNumber = Val(Me.TextBitNumR.Text)
		
        Call SetBitTrue(AddrWrite, BitNumber) ''''''AddrWrite为要写的地址, 必须为偶数,BitNumber为写的位数
        '''''''SetBitTrue(3000,3)  即令V3000.3=1(为了处理方便,是令VW3000=16#FFFF)
	End Sub
	
	Private Sub CmdWriteVD_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles CmdWriteVD.Click
		Dim AddrWrite As String
		Dim DataWrite As Single
		
		AddPLC = CStr(Me.CombAddPLC.Text)
		
		AddrWrite = CStr(TextAddWD.Text)
		DataWrite = Val(Me.TextDataD.Text)
		
        Call WriteVD(AddrWrite, DataWrite) ''''''AddrWrite为要写的地址, 必须为偶数,DataWrite为要写浮点数(一次写一个)
        '''''''WriteVD(3000,25.5)  即令VD3000=25.5
	End Sub
	
	Private Sub CmdWriteVW_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles CmdWriteVW.Click
		Dim AddrWrite As String
		
		Dim DataWrite As Short
		
		AddPLC = CStr(Me.CombAddPLC.Text)
		
		AddrWrite = CStr(TextAddWW.Text)
		DataWrite = Val(Me.TextDataW.Text)
		
        Call WriteVW(AddrWrite, DataWrite) ''''''AddrWrite为要写的地址, 必须为偶数,DataWrite为要写的字的值(一次写一个字)
        '''''''WriteVW(3000,111)  即令VW3000=111
		
	End Sub
	
	'UPGRADE_WARNING: 初始化窗体时可能激发事件 CombAddPLC.TextChanged。 单击以获得更多信息:“ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup2075"”
	'UPGRADE_WARNING: ComboBox 事件 CombAddPLC.Change 被升级为具有新行为的 CombAddPLC.TextChanged。 单击以获得更多信息:“ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup2074"”
	Private Sub CombAddPLC_TextChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles CombAddPLC.TextChanged
		AddPLC = CStr(Me.CombAddPLC.SelectedIndex)
	End Sub
	
	
	
	Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click
		Dim Form1 As Object
		'UPGRADE_WARNING: 未能解析对象 Form1.Show 的默认属性。 单击以获得更多信息:“ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"”
		Form1.Show()
	End Sub
	
	Private Sub Command2_Click()
		
	End Sub
	
	Private Sub FrmMain1_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
		Dim i As Short
		Me.SetBounds(VB6.TwipsToPixelsX((VB6.PixelsToTwipsX(System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width) - VB6.PixelsToTwipsX(Me.Width)) \ 2), VB6.TwipsToPixelsY((VB6.PixelsToTwipsY(System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height) - VB6.PixelsToTwipsY(Me.Height)) \ 2), 0, 0, Windows.Forms.BoundsSpecified.X Or Windows.Forms.BoundsSpecified.Y)
		
		AddPLC = CStr(2)
		
		ComboPort.Items.Add("1")
		ComboPort.Items.Add("2")
		ComboPort.Items.Add("3")
		ComboPort.SelectedIndex = 1
		
		For i = 0 To 254
			CobRWNumber.Items.Add(CStr(i))
			CobRDNumber.Items.Add(CStr(i))
			CobRBNumber.Items.Add(CStr(i))
			
			CobWWNumber.Items.Add(CStr(i))
			CobWDNumber.Items.Add(CStr(i))
			CobWBNumber.Items.Add(CStr(i))
			
			Me.CombAddPLC.Items.Add(CStr(i))
		Next 
		Me.CombAddPLC.SelectedIndex = 2
		
		CobRWNumber.SelectedIndex = 3
		CobRDNumber.SelectedIndex = 3
		CobRBNumber.SelectedIndex = 3
		CobWWNumber.SelectedIndex = 1
		CobWDNumber.SelectedIndex = 1
		CobWBNumber.SelectedIndex = 1
		
		
		
		FlagVW = False
		FlagVD = False
	End Sub
	
	'UPGRADE_WARNING: Form 事件 FrmMain1.Unload 具有新的行为。 单击以获得更多信息:“ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup2065"”
	Private Sub FrmMain1_Closed(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Closed
		If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
	End Sub
	
	Private Sub MSComm1_OnComm(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MSComm1.OnComm
		Dim Inbyte() As Byte
		
		Dim InHEx As String
		Dim i As Object
		Dim j As Short
		Dim recstr As String
		Dim a As Short
		recstr = ""
		
		ReDim inSafeArray(MSComm1.RThreshold)
		If MSComm1.CommEvent = MSCommLib.OnCommConstants.comEvReceive Then '收到 RThreshold # of chars.
			'UPGRADE_WARNING: 未能解析对象 MSComm1.Input 的默认属性。 单击以获得更多信息:“ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"”
			Inbyte = MSComm1.Input
			
			For i = 0 To MSComm1.RThreshold - 1
				'UPGRADE_WARNING: 未能解析对象 i 的默认属性。 单击以获得更多信息:“ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"”
				InHEx = Hex(Val(CStr(Inbyte(i))))
				
				'UPGRADE_WARNING: 未能解析对象 i 的默认属性。 单击以获得更多信息:“ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"”
				inSafeArray(i) = IIf(Len(InHEx) < 2, "0" & InHEx, InHEx)
				'UPGRADE_WARNING: 未能解析对象 i 的默认属性。 单击以获得更多信息:“ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1037"”
				recstr = recstr & inSafeArray(i)
				Me.Text6.Text = recstr
			Next i
			a = Len(recstr)
			FlagRec = 1
			
			If FlagVW = True Then
                If a = 2 * (5 + ReadNumberW * 2) Then '''加了保护
                    Call ReadVW(1, CStr(0), 0)       '''判断如果接收字符长度对则进行分解''''第一个参数一定为1(Fl

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -