📄 frmmain.frm
字号:
VERSION 5.00
Object = "{648A5603-2C6E-101B-82B6-000000000014}#1.1#0"; "MSCOMM32.OCX"
Begin VB.Form frmMain
BackColor = &H00E0E0E0&
BorderStyle = 3 'Fixed Dialog
Caption = "PC机与多个智能仪表通信程序"
ClientHeight = 3300
ClientLeft = 4800
ClientTop = 3075
ClientWidth = 7980
LinkTopic = "Form1"
MaxButton = 0 'False
MinButton = 0 'False
ScaleHeight = 3300
ScaleWidth = 7980
ShowInTaskbar = 0 'False
Begin VB.Frame Frame3
Caption = "3号表"
Height = 2415
Left = 5340
TabIndex = 15
Top = 120
Width = 2565
Begin VB.TextBox Tdata3
Height = 330
Left = 1380
TabIndex = 18
Top = 420
Width = 1005
End
Begin VB.TextBox Tmax3
Height = 315
Left = 1380
TabIndex = 17
Top = 1140
Width = 555
End
Begin VB.TextBox Tmin3
Height = 315
Left = 1380
TabIndex = 16
Top = 1800
Width = 555
End
Begin VB.Label Label9
Caption = "下限报警值:"
Height = 255
Left = 180
TabIndex = 21
Top = 1860
Width = 1155
End
Begin VB.Label Label8
Caption = "上限报警值:"
Height = 255
Left = 180
TabIndex = 20
Top = 1200
Width = 1215
End
Begin VB.Shape Shape6
FillColor = &H00FFFFFF&
FillStyle = 0 'Solid
Height = 375
Left = 1980
Shape = 3 'Circle
Top = 1740
Width = 495
End
Begin VB.Shape Shape5
FillColor = &H00FFFFFF&
FillStyle = 0 'Solid
Height = 375
Left = 1980
Shape = 3 'Circle
Top = 1080
Width = 495
End
Begin VB.Label Label7
Caption = "测量温度值:"
Height = 255
Left = 180
TabIndex = 19
Top = 540
Width = 1155
End
End
Begin VB.Frame Frame2
Caption = "2号表"
Height = 2415
Left = 2700
TabIndex = 8
Top = 120
Width = 2565
Begin VB.TextBox Tdata2
Height = 330
Left = 1380
TabIndex = 11
Top = 420
Width = 1005
End
Begin VB.TextBox Tmax2
Height = 315
Left = 1380
TabIndex = 10
Top = 1140
Width = 555
End
Begin VB.TextBox Tmin2
Height = 315
Left = 1380
TabIndex = 9
Top = 1800
Width = 555
End
Begin VB.Label Label6
Caption = "下限报警值:"
Height = 255
Left = 180
TabIndex = 14
Top = 1860
Width = 1155
End
Begin VB.Label Label5
Caption = "上限报警值:"
Height = 255
Left = 180
TabIndex = 13
Top = 1200
Width = 1215
End
Begin VB.Shape Shape4
FillColor = &H00FFFFFF&
FillStyle = 0 'Solid
Height = 375
Left = 1980
Shape = 3 'Circle
Top = 1740
Width = 495
End
Begin VB.Shape Shape3
FillColor = &H00FFFFFF&
FillStyle = 0 'Solid
Height = 375
Left = 1980
Shape = 3 'Circle
Top = 1080
Width = 495
End
Begin VB.Label Label2
Caption = "测量温度值:"
Height = 255
Left = 240
TabIndex = 12
Top = 540
Width = 1155
End
End
Begin VB.Frame Frame1
Caption = "1号表"
Height = 2415
Left = 60
TabIndex = 1
Top = 120
Width = 2565
Begin VB.TextBox Tmin1
Height = 315
Left = 1380
TabIndex = 7
Top = 1800
Width = 555
End
Begin VB.TextBox Tmax1
Height = 315
Left = 1380
TabIndex = 6
Top = 1140
Width = 555
End
Begin VB.TextBox Tdata1
Height = 330
Left = 1380
TabIndex = 2
Top = 420
Width = 1005
End
Begin VB.Label Label1
Caption = "测量温度值:"
Height = 255
Left = 180
TabIndex = 5
Top = 540
Width = 1155
End
Begin VB.Shape Shape1
FillColor = &H00FFFFFF&
FillStyle = 0 'Solid
Height = 375
Left = 1980
Shape = 3 'Circle
Top = 1080
Width = 495
End
Begin VB.Shape Shape2
FillColor = &H00FFFFFF&
FillStyle = 0 'Solid
Height = 375
Left = 1980
Shape = 3 'Circle
Top = 1740
Width = 495
End
Begin VB.Label Label3
Caption = "上限报警值:"
Height = 255
Left = 180
TabIndex = 4
Top = 1200
Width = 1215
End
Begin VB.Label Label4
Caption = "下限报警值:"
Height = 255
Left = 180
TabIndex = 3
Top = 1860
Width = 1155
End
End
Begin VB.CommandButton Cmdquit
Caption = "关 闭"
Height = 375
Left = 3420
TabIndex = 0
Top = 2760
Width = 1215
End
Begin VB.Timer Timer1
Interval = 500
Left = 6480
Top = 2760
End
Begin MSCommLib.MSComm MSComm1
Left = 7200
Top = 2640
_ExtentX = 1005
_ExtentY = 1005
_Version = 393216
DTREnable = -1 'True
RThreshold = 1
BaudRate = 4800
StopBits = 2
SThreshold = 1
InputMode = 1
End
End
Attribute VB_Name = "frmMain"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'定义变量
Dim temp As Integer '仪表号循环变量
Dim data1, data2, data3 As Single '1号表、2号表、3号表测量值
Dim maxdata1, maxdata2, maxdata3 As Single '1号表、2号表、3号表上限报警值
Dim mindata1, mindata2, mindata3 As Single '1号表、2号表、3号表下限报警值
'串口初始化
Private Sub Form_Load()
MSComm1.CommPort = 1 '设置通信端口号为COM1
MSComm1.InputMode = 1 '以二进制格式读取数据
MSComm1.RThreshold = 1 '设置并返回的要接收的字符数
MSComm1.SThreshold = 1 '设置并返回传输缓冲区中允许的最小字符数
MSComm1.Settings = "4800,n,8,2" '设置串口参数
MSComm1.PortOpen = True '打开串口
Shape1.FillColor = QBColor(10) '报警指示灯初始颜色
Shape2.FillColor = QBColor(10)
Shape3.FillColor = QBColor(10)
Shape4.FillColor = QBColor(10)
Shape5.FillColor = QBColor(10)
Shape6.FillColor = QBColor(10)
End Sub
'改变仪表序号
Private Sub Timer1_Timer()
temp = temp + 1
Call order_num
If temp > 6 Then temp = 0
End Sub
'周期发出请求指令,自动连续采集
'循环向仪表发送读数据命令串
'不同的仪表号发送不同的读指令
Sub order_num()
If temp = 1 Then
MSComm1.Output = Chr(&H8181) + Chr(&H52) + Chr(&H1)
ElseIf temp = 2 Then
MSComm1.Output = Chr(&H8181) + Chr(&H52) + Chr(&H2)
ElseIf temp = 3 Then
MSComm1.Output = Chr(&H8282) + Chr(&H52) + Chr(&H1)
ElseIf temp = 4 Then
MSComm1.Output = Chr(&H8282) + Chr(&H52) + Chr(&H2)
ElseIf temp = 5 Then
MSComm1.Output = Chr(&H8383) + Chr(&H52) + Chr(&H1)
ElseIf temp = 6 Then
MSComm1.Output = Chr(&H8383) + Chr(&H52) + Chr(&H2)
Else
Exit Sub
End If
End Sub
'每发送一次指令,触发下面事件,返回数据串
Private Sub MSComm1_OnComm()
Dim Inbyte() As Byte
Dim buffer As String
Dim datatemp1 As Single '测量值
Dim datatemp2 As Single '最大值
Dim max_minstr As String
'读取仪表返回数据串
Select Case MSComm1.CommEvent
Case comEvReceive
Inbyte = MSComm1.Input
For i = LBound(Inbyte) To UBound(Inbyte)
buffer = buffer + Hex(Inbyte(i)) + Chr(32)
Next i
hhh = 1
Case comEvSend
End Select
'获取上下限值
max_minstr = Right(buffer, 5)
If Len(Trim(Mid(max_minstr, 1, 2))) = 1 Then
datatemp2 = Val("&H" & Mid(max_minstr, 3, 2) & Str("0") & Mid(max_minstr, 1, 2))
Else
datatemp2 = Val("&H" & Mid(max_minstr, 3, 2) & Mid(max_minstr, 1, 2))
End If
'显示仪表上、下限温度值
If datatemp2 <> 0 Then
If temp = 1 Then
Tmax1.Text = datatemp2
maxdata1 = Val(Tmax1.Text)
End If
If temp = 2 Then
Tmin1.Text = datatemp2
mindata1 = Val(Tmin1.Text)
End If
If temp = 3 Then
Tmax2.Text = datatemp2
maxdata2 = Val(Tmax2.Text)
End If
If temp = 4 Then
Tmin2.Text = datatemp2
mindata2 = Val(Tmin2.Text)
End If
If temp = 5 Then
Tmax3.Text = datatemp2
maxdata3 = Val(Tmax3.Text)
End If
If temp = 6 Then
Tmin3.Text = datatemp2
mindata3 = Val(Tmin3.Text)
End If
End If
'获取十进制测量数据
If Len(Trim(Mid(buffer, 1, 2))) = 1 Then
datatemp1 = Val("&H" & Mid(buffer, 3, 2) & Str("0") & Mid(buffer, 1, 2)) * 0.1
Else
datatemp1 = Val("&H" & Mid(buffer, 3, 2) & Mid(buffer, 1, 2)) * 0.1
End If
'显示测量温度值
If (datatemp1 <> 0) Then
If temp = 1 Or temp = 2 Then
Tdata1.Text = Format$(datatemp1, "0.0")
data1 = Val(Tdata1.Text)
End If
If temp = 3 Or temp = 4 Then
Tdata2.Text = Format$(datatemp1, "0.0")
data2 = Val(Tdata2.Text)
End If
If temp = 5 Or temp = 6 Then
Tdata3.Text = Format$(datatemp1, "0.0")
data3 = Val(Tdata3.Text)
End If
Call alarm '调用报警过程
End If
End Sub
'上、下限报警指示
Private Sub alarm()
'1号表报警指示
If data1 >= maxdata1 Then
Shape1.FillColor = QBColor(12)
End If
If data1 < maxdata1 And data1 > mindata1 Then
Shape1.FillColor = QBColor(10)
Shape2.FillColor = QBColor(10)
End If
If data1 <= mindata1 Then
Shape2.FillColor = QBColor(12)
End If
'2号表报警指示
If data2 >= maxdata2 Then
Shape3.FillColor = QBColor(12)
End If
If data2 < maxdata2 And data2 > mindata2 Then
Shape3.FillColor = QBColor(10)
Shape4.FillColor = QBColor(10)
End If
If data2 <= mindata2 Then
Shape4.FillColor = QBColor(12)
End If
'3号表报警指示
If data3 >= maxdata3 Then
Shape5.FillColor = QBColor(12)
End If
If data3 < maxdata3 And data3 > mindata3 Then
Shape5.FillColor = QBColor(10)
Shape6.FillColor = QBColor(10)
End If
If data3 <= mindata3 Then
Shape6.FillColor = QBColor(12)
End If
End Sub
'关闭程序
Private Sub Cmdquit_Click()
MSComm1.PortOpen = False '关闭串口
Unload frmMain
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -