📄 frmmain.frm
字号:
EndProperty
Height = 600
Left = 4860
TabIndex = 0
Top = 2340
Width = 1590
End
Begin MSCommLib.MSComm MSComm1
Left = 45
Top = 945
_ExtentX = 1005
_ExtentY = 1005
_Version = 393216
DTREnable = -1 'True
End
Begin VB.Image imgDisable
Height = 735
Left = 3420
Picture = "frmMain.frx":0000
Stretch = -1 'True
Top = 360
Visible = 0 'False
Width = 780
End
Begin VB.Label lblMsg
BackColor = &H00C0FFFF&
BorderStyle = 1 'Fixed Single
Caption = "Label2"
BeginProperty Font
Name = "宋体"
Size = 12
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 420
Left = 315
TabIndex = 7
Top = 4995
Width = 5595
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 = 6
Left = 2025
TabIndex = 5
Top = 120
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
GetDIOFrom7060D '取数据的子程序
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 GetDIOFrom7060D()
Dim ChBuf$, Buf$, Buf1$, Buf2$, i%
ChBuf = cmbNO.List(cmbNO.ListIndex)
'若只有一位数,则在此位数的前端加上一个0
If Len(ChBuf) = 1 Then
ChBuf = "0" & ChBuf
End If
MSComm1.Output = "@" & ChBuf & Chr(13) '组合完整的命令字符串
lblMsg.Caption = "检测" & ChBuf & "中…"
'等待数据返回
Buf = WaitRS(MSComm1, Chr(13), 1000)
If Len(Buf) < 4 Then
'若返回字符串不正确,则显示灰色信号灯及信息
lblMsg.Caption = "未返回正确信息。"
For i = 0 To 3
imgIN(i).Picture = imgDisable.Picture
imgOut(i).Picture = imgDisable.Picture
Next i
Exit Sub
End If
Buf1 = Mid(Buf, 3, 1) '取出代表数字输出状态的字符
CheckDOStatus Buf1 '送入数字输出状态检测子程序
Buf2 = Mid(Buf, 5, 1) '取出代表数字输入状态的字符
CheckDIStatus Buf2 '送入状态检测子程序
SendRelayOut ChBuf, Buf2 '将检测的结果转送至继电器输出
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'当数字输入的结果得到后,转送至继电器输出的子程序在此
'此子程序作位运算,程序较短
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub SendRelayOut(ChBuf As String, RLOut As String)
Dim Buf$, i%
'数字输出命令
MSComm1.Output = "@" & ChBuf & RLOut & Chr(13)
Buf = WaitRS(MSComm1, vbCr, 1000) '等待返回值
End Sub
Sub CheckDOStatus(Buf As String)
'每一个位均运算后,显示对应的图形。
'其中使用IIF作二种情形的判断
Dim i%
For i = 0 To 3
imgOut(i).Picture = IIf(Val("&H" & Buf) And 2 ^ i, imgOFF.Picture, imgON.Picture)
Next i
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -