📄 frmmain.frm
字号:
Begin VB.Label Label1
Caption = "站号"
BeginProperty Font
Name = "宋体"
Size = 12
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 330
Index = 6
Left = 2040
TabIndex = 5
Top = 90
Width = 780
End
Begin VB.Image imgOFF
Height = 735
Left = 3870
Picture = "frmMain.frx":1992
Stretch = -1 'True
Top = 0
Visible = 0 'False
Width = 780
End
Begin VB.Image imgON
Height = 735
Left = 4500
Picture = "frmMain.frx":36CA
Stretch = -1 'True
Top = 270
Visible = 0 'False
Width = 780
End
Begin VB.Label Label1
Caption = "通信端口"
BeginProperty Font
Name = "宋体"
Size = 12
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 330
Index = 0
Left = 450
TabIndex = 1
Top = 135
Width = 1005
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'当选择通信端口的Combo控件被选中后触发此事件
'若用户改变通信端口时,关闭通信端口
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub cmbCOM_Click()
'若通信端口号码和现在的选择一样时就不处理,直接跳出此子程序
If cmbCOM.ListIndex + 1 = MSComm1.CommPort Then Exit Sub
TimeDelay 100
MSComm1.PortOpen = False '关闭通信端口
lblMsg.Caption = "已停止检测并关闭通信端口"
cmdOpenCOM.Enabled = True '允许使用【打开通信端口】按钮
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'单击【结束】按钮后触发此事件
'使用End命令将系统结束
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub cmdEnd_Click()
End
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'单击【打开通信端口】按钮后触发此事件
'将MSComm控件的参数设置好,并打开
'激活【开始检测】按钮
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub cmdOpenCOM_Click()
'判断端口号码是否落在1--16之间
If cmbCOM.ListIndex >= 0 And cmbCOM.ListIndex <= 16 Then
MSComm1.CommPort = cmbCOM.ListIndex + 1
Else
MsgBox "指定通信端口时发生错误!", vbCritical + vbOKOnly, "系统信息"
Exit Sub
End If
'触发错误检测机制
On Error GoTo comErr
MSComm1.Settings = "9600,n,8,1" '设置通信参数
MSComm1.PortOpen = True '打开通信端口
cmdOpenCOM.Enabled = False '将此按钮设为禁用状态
cmdStart.Enabled = True '启用开始检测的按钮
lblMsg.Caption = "可单击【开始检测】按钮,执行检测的工作。"
Exit Sub
comErr:
MsgBox "打开通信端口时发生错误!请确定通信端口存在且正常。", vbCritical + vbOKOnly, "系统信息"
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'单击【开始检测】按钮后触发此事件
'将定时器触发或关闭,并显示对应的文字在按钮上,以指示用户操作
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub cmdStart_Click()
If cmdStart.Caption = "开始检测" Then
cmdStart.Caption = "停止检测"
Else
cmdStart.Caption = "开始检测"
End If
Do
GetDIFrom7060D '取数据的子程序
DoEvents
Loop Until cmdStart.Caption = "开始检测"
lblMsg.Caption = "已停止检测"
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'窗体的Load事件
'输入图形暂时设为灰色,表示无状态信息进入
'将通信端口号码及站号输入Combo控件;并默认两者的选项是第一个
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Form_Load()
Dim i%
For i = 0 To 3
imgIN(i).Picture = imgDisable.Picture
Next i
cmbNO.Clear
For i = 1 To 255
cmbNO.AddItem CStr(Hex(i))
Next i
cmbNO.ListIndex = 0
cmbCOM.Clear
cmbCOM.AddItem "COM1"
cmbCOM.AddItem "COM2"
cmbCOM.ListIndex = 0
cmdStart.Enabled = False
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'状态检测子程序,所得的字符送到这里作对应位的判断
'这里将字符和16种可能的情形作比较,再显示到信号灯上去
'当ON时则显示红色信号灯,而OFF时显示绿色信号灯
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub CheckDIStatus(DIBuf As String)
If Len(DIBuf) > 1 Then DIBuf = Right(DIBuf, 1)
'可能的字符由"0"~"F",一一作比较。特别注意,A~F的部分一定是大写,
'手册上的规定是大写而不是小写。
Select Case DIBuf
Case "0"
imgIN(0).Picture = imgON.Picture
imgIN(1).Picture = imgON.Picture
imgIN(2).Picture = imgON.Picture
imgIN(3).Picture = imgON.Picture
Case "1"
imgIN(0).Picture = imgOFF.Picture
imgIN(1).Picture = imgON.Picture
imgIN(2).Picture = imgON.Picture
imgIN(3).Picture = imgON.Picture
Case "2"
imgIN(0).Picture = imgON.Picture
imgIN(1).Picture = imgOFF.Picture
imgIN(2).Picture = imgON.Picture
imgIN(3).Picture = imgON.Picture
Case "3"
imgIN(0).Picture = imgOFF.Picture
imgIN(1).Picture = imgOFF.Picture
imgIN(2).Picture = imgON.Picture
imgIN(3).Picture = imgON.Picture
Case "4"
imgIN(0).Picture = imgON.Picture
imgIN(1).Picture = imgON.Picture
imgIN(2).Picture = imgOFF.Picture
imgIN(3).Picture = imgON.Picture
Case "5"
imgIN(0).Picture = imgOFF.Picture
imgIN(1).Picture = imgON.Picture
imgIN(2).Picture = imgOFF.Picture
imgIN(3).Picture = imgON.Picture
Case "6"
imgIN(0).Picture = imgON.Picture
imgIN(1).Picture = imgOFF.Picture
imgIN(2).Picture = imgOFF.Picture
imgIN(3).Picture = imgON.Picture
Case "7"
imgIN(0).Picture = imgOFF.Picture
imgIN(1).Picture = imgOFF.Picture
imgIN(2).Picture = imgOFF.Picture
imgIN(3).Picture = imgON.Picture
Case "8"
imgIN(0).Picture = imgON.Picture
imgIN(1).Picture = imgON.Picture
imgIN(2).Picture = imgON.Picture
imgIN(3).Picture = imgOFF.Picture
Case "9"
imgIN(0).Picture = imgOFF.Picture
imgIN(1).Picture = imgON.Picture
imgIN(2).Picture = imgON.Picture
imgIN(3).Picture = imgOFF.Picture
Case "A"
imgIN(0).Picture = imgON.Picture
imgIN(1).Picture = imgOFF.Picture
imgIN(2).Picture = imgON.Picture
imgIN(3).Picture = imgOFF.Picture
Case "B"
imgIN(0).Picture = imgOFF.Picture
imgIN(1).Picture = imgOFF.Picture
imgIN(2).Picture = imgON.Picture
imgIN(3).Picture = imgOFF.Picture
Case "C"
imgIN(0).Picture = imgON.Picture
imgIN(1).Picture = imgON.Picture
imgIN(2).Picture = imgOFF.Picture
imgIN(3).Picture = imgOFF.Picture
Case "D"
imgIN(0).Picture = imgOFF.Picture
imgIN(1).Picture = imgON.Picture
imgIN(2).Picture = imgOFF.Picture
imgIN(3).Picture = imgOFF.Picture
Case "E"
imgIN(0).Picture = imgON.Picture
imgIN(1).Picture = imgOFF.Picture
imgIN(2).Picture = imgOFF.Picture
imgIN(3).Picture = imgOFF.Picture
Case "F"
imgIN(0).Picture = imgOFF.Picture
imgIN(1).Picture = imgOFF.Picture
imgIN(2).Picture = imgOFF.Picture
imgIN(3).Picture = imgOFF.Picture
End Select
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'由7060D取得数字输入状态子程序,要求命令由此子程序发送
'取得字符串后的比较由另一个子程序负责
'并将输入结果传送到继电器
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub GetDIFrom7060D()
Dim ChBuf$, Buf$, i%
ChBuf = cmbNO.List(cmbNO.ListIndex)
'若只有一位数,则在此位数的前端加上一个0
If Len(ChBuf) = 1 Then
ChBuf = "0" & ChBuf
End If
MSComm1.Output = "$" & ChBuf & "6" & Chr(13) '组合完整的命令字符串
lblMsg.Caption = "检测" & ChBuf & "中…"
'等待数据返回
Buf = WaitRS(MSComm1, Chr(13), 1000)
If Len(Buf) < 6 Then
'若返回字符串不正确,则显示灰色信号灯及信息
lblMsg.Caption = "未返回正确信息。"
For i = 0 To 3
imgIN(i).Picture = imgDisable.Picture
imgOut(i).Picture = imgDisable.Picture
Next i
Exit Sub
End If
Buf = Mid(Buf, 5, 1) '取出代表数字输入状态的字符
CheckDIStatus Buf '送入状态检测子程序
SendRelayOut ChBuf, Buf '将检测的结果传送到继电器输出
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'当数字输入的结果得到后,传送到继电器输出的子程序在此
'此子程序作位运算,程序较短
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub SendRelayOut(ChBuf As String, RLOut As String)
Dim Buf$, i%
'数字输出命令
MSComm1.Output = "#" & ChBuf & "000" & RLOut & Chr(13)
Buf = WaitRS(MSComm1, vbCr, 1000) '等待返回值
'每一个位均运算后,显示对应的图形。
'其中使用IIF作两种情形的判断
For i = 0 To 3
imgOut(i).Picture = IIf(Val("&H" & RLOut) And 2 ^ i, imgOFF.Picture, imgON.Picture)
Next i
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'当数字输入的结果得到后,传送到继电器输出的子程序在此
'此子程序将数字结果以比较的方式,一对一地传送到继电器
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub SendRelayOut_1(ChBuf As String, RLOut As String)
Dim Buf$, i%
MSComm1.Output = "#" & ChBuf & "000" & RLOut & Chr(13)
Buf = WaitRS(MSComm1, vbCr, 1000)
Select Case RLOut
Case "0"
imgOut(0).Picture = imgON.Picture
imgOut(1).Picture = imgON.Picture
imgOut(2).Picture = imgON.Picture
imgOut(3).Picture = imgON.Picture
Case "1"
imgOut(0).Picture = imgOFF.Picture
imgOut(1).Picture = imgON.Picture
imgOut(2).Picture = imgON.Picture
imgOut(3).Picture = imgON.Picture
Case "2"
imgOut(0).Picture = imgON.Picture
imgOut(1).Picture = imgOFF.Picture
imgOut(2).Picture = imgON.Picture
imgOut(3).Picture = imgON.Picture
Case "3"
imgOut(0).Picture = imgOFF.Picture
imgOut(1).Picture = imgOFF.Picture
imgOut(2).Picture = imgON.Picture
imgOut(3).Picture = imgON.Picture
Case "4"
imgOut(0).Picture = imgON.Picture
imgOut(1).Picture = imgON.Picture
imgOut(2).Picture = imgOFF.Picture
imgOut(3).Picture = imgON.Picture
Case "5"
imgOut(0).Picture = imgOFF.Picture
imgOut(1).Picture = imgON.Picture
imgOut(2).Picture = imgOFF.Picture
imgOut(3).Picture = imgON.Picture
Case "6"
imgOut(0).Picture = imgON.Picture
imgOut(1).Picture = imgOFF.Picture
imgOut(2).Picture = imgOFF.Picture
imgOut(3).Picture = imgON.Picture
Case "7"
imgOut(0).Picture = imgOFF.Picture
imgOut(1).Picture = imgOFF.Picture
imgOut(2).Picture = imgOFF.Picture
imgOut(3).Picture = imgON.Picture
Case "8"
imgOut(0).Picture = imgON.Picture
imgOut(1).Picture = imgON.Picture
imgOut(2).Picture = imgON.Picture
imgOut(3).Picture = imgOFF.Picture
Case "9"
imgOut(0).Picture = imgOFF.Picture
imgOut(1).Picture = imgON.Picture
imgOut(2).Picture = imgON.Picture
imgOut(3).Picture = imgOFF.Picture
Case "A"
imgOut(0).Picture = imgON.Picture
imgOut(1).Picture = imgOFF.Picture
imgOut(2).Picture = imgON.Picture
imgOut(3).Picture = imgOFF.Picture
Case "B"
imgOut(0).Picture = imgOFF.Picture
imgOut(1).Picture = imgOFF.Picture
imgOut(2).Picture = imgON.Picture
imgOut(3).Picture = imgOFF.Picture
Case "C"
imgOut(0).Picture = imgON.Picture
imgOut(1).Picture = imgON.Picture
imgOut(2).Picture = imgOFF.Picture
imgOut(3).Picture = imgOFF.Picture
Case "D"
imgOut(0).Picture = imgOFF.Picture
imgOut(1).Picture = imgON.Picture
imgOut(2).Picture = imgOFF.Picture
imgOut(3).Picture = imgOFF.Picture
Case "E"
imgOut(0).Picture = imgON.Picture
imgOut(1).Picture = imgOFF.Picture
imgOut(2).Picture = imgOFF.Picture
imgOut(3).Picture = imgOFF.Picture
Case "F"
imgOut(0).Picture = imgOFF.Picture
imgOut(1).Picture = imgOFF.Picture
imgOut(2).Picture = imgOFF.Picture
imgOut(3).Picture = imgOFF.Picture
End Select
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -