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

📄 frmmain.frm

📁 VB与分布式监控光盘源代码 (数字输入及输出-修正
💻 FRM
📖 第 1 页 / 共 2 页
字号:
      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 + -