标题:VB6是否可以實現如下功能
只看楼主
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
得分:0 
以下是引用宋政林在2021-1-27 16:04:47的发言:

那能實現此功能嗎?
1,當實際應用中,VB6的程式是一直開啟的,此時...ICT測試機會間隔幾秒就會有新的日誌寫入,是否能做到實時檢查新日誌。



程序代码:
Dim WithEvents Timer1 As Timer

Private Sub Form_Load()

'用代码创建一个Timer1控件,不用往窗体拖Timer1控件
Set Timer1 = Me.Controls.Add("VB.Timer", "Timer1")
Timer1.Enabled = True
Timer1.Interval = 100

End Sub

Private Sub Timer1_Timer()

Dim ymd As String       '日期变量
Dim FileName As String  '文件名变量
Dim Str As String       '读取到的数据内容变量
Dim FilePath As String  '完整的文件名变量

FilePath = "C:\ew518fe\ES340A\"   '日志.LOG的文件夹

ymd = Year(Date) & String(2 - Len(Month(Date)), "0") & Month(Date) & String(2 - Len(Day(Date)), "0") & Day(Date)
FileName = "ODBC" & ymd & ".LOG"
'Print FileName


 Cls '清除窗体上一次显示的信息
 
If Dir(FilePath, vbDirectory + vbHidden) = "" Then

    Form1.Print "日志文件目录不存在!"
ElseIf Dir(FilePath & FileName) = "" Then
    Form1.Print "今天没有新日志文件!"

Else

Open FilePath & FileName For Input As #1
While Not EOF(1)
    Line Input #1, Str
    a = a + 1
Wend
'DoEvents
Close #1

  If Str <> "" Then
    Form1.Print Str
  Else
    Form1.Print "有日志文件,但日志内容为空!"
  End If
  
End If

End Sub

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2021-01-27 17:42
宋政林
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2020-9-16
得分:0 
回复 11楼 yuma
感謝大神的幫助

1,通過驗證以0.1S進行一次最新日誌的讀取并顯示在Form1上面。(OK的)


還有最後一個疑問: 當偵測到一筆新的日誌后,通過RS232 發送十六進制的55 01 01 02 00 00 00 59 (含義為:控制模塊的通道1閉合),間隔1S左右后再通過RS232 發送十六進制的55 01 01 01 00 00 00 58 (含義為:控制模塊的通道1斷開)


2,我的控制模塊為:
  
   
            



備註:最主要就是通過讀取到新的日記后,對RS232進行 繼電器閉合與斷開的控制
2021-01-28 00:34
宋政林
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2020-9-16
得分:0 
回复 11楼 yuma
你好:
1,目前窗體可以以設定的秒數進行偵測最新日記,同時也顯示在Text1的上面,如下圖:


2,目前已寫出了十六進制發送給控制模塊的 吸合和斷開,通過驗證能正常控制OK。(目前是使用Command1來啟用的)

2,能實現此功能嗎:a,當Text1裡面每出現一次新的日記出來,就自動進行一次 控制模塊的吸合及斷開。

代碼如下:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Dim WithEvents Timer1 As Timer '循環 按照 設定秒數 進行觸發


'----通過串口發送十六進制55 01 01 02 00 00 00 59 繼電器吸合---------------------------------------------------------------
Private Sub Command1_Click() '閉合
Dim b(7) As Byte '这里A(0)表示定义的数组是含有下标上限为0的数组.
b(0) = &H55
b(1) = &H1
b(2) = &H1
b(3) = &H2
b(4) = &H0
b(5) = &H0
b(6) = &H0
b(7) = &H59
'a(8) = &H59
'sj(3) = &H3
MSComm1.Output = b
                                                     
'-----通過串口發送十六進制55 01 01 01 00 00 00 58 繼電器斷開---------------------------------------------------------------
Sleep 2000 '等待2S
Dim c(7) As Byte '这里A(0)表示定义的数组是含有下标上限为0的数组.
c(0) = &H55
c(1) = &H1
c(2) = &H1
c(3) = &H1
c(4) = &H0
c(5) = &H0
c(6) = &H0
c(7) = &H58
'a(8) = &H59
'sj(3) = &H3
MSComm1.Output = c
End Sub
'------------------------------------------------------------------------------------------------------------------------
Private Sub Form_Load()
'---------------窗體載入 RS232設定內容-----------------------------------------
= 1
MSComm1.PortOpen = True
MSComm1.Settings = "9600,n,8,1"
'----------用代码创建一个Timer1控件,不用往窗体拖Timer1控件----------
Set Timer1 = Me.Controls.Add("VB.Timer", "Timer1")
Timer1.Enabled = True
Timer1.Interval = 5000 '5000ms

End Sub

Private Sub Timer1_Timer()

Dim ymd As String       '日期变量
Dim FileName As String  '文件名变量
Dim Str As String       '读取到的数据内容变量
Dim FilePath As String  '完整的文件名变量

FilePath = "C:\ew518fe\ES340A\"   '日志.LOG的文件夹

ymd = Year(Date) & String(2 - Len(Month(Date)), "0") & Month(Date) & String(2 - Len(Day(Date)), "0") & Day(Date)
FileName = "ODBC" & ymd & ".LOG"
'Print FileName

 Cls '清除窗体上一次显示的信息
 
If Dir(FilePath, vbDirectory + vbHidden) = "" Then

    Form1.Print "日志文件目录不存在!"
ElseIf Dir(FilePath & FileName) = "" Then
    Form1.Print "今天没有新日志文件!"

Else

Open FilePath & FileName For Input As #1
While Not EOF(1)
    Line Input #1, Str
    a = a + 1
Wend
'DoEvents
Close #1

  If Str <> "" Then
    'Form1.Print Str
    Text1 = Str
  Else
    Form1.Print "有日志文件,但日志内容为空!"
  End If
  
End If

End Sub
2021-01-28 12:18
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
得分:0 
改好了,我这边无法测试运行。

应该没多大问题了。

程序代码:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Dim WithEvents Timer1 As Timer '循環 按照 設定秒數 進行觸發
Public Value As String  '全局变量,记录上一次的最新数据

'----通過串口發送十六進制55 01 01 02 00 00 00 59 繼電器吸合---------------------------------------------------------------
Sub SendMessage() '閉合函数
Dim b(7) As Byte '这里A(0)表示定义的数组是含有下标上限为0的数组.
b(0) = &H55
b(1) = &H1
b(2) = &H1
b(3) = &H2
b(4) = &H0
b(5) = &H0
b(6) = &H0
b(7) = &H59
'a(8) = &H59
'sj(3) = &H3
MSComm1.Output = b
                                                     
'-----通過串口發送十六進制55 01 01 01 00 00 00 58 繼電器斷開---------------------------------------------------------------
Sleep 2000 '等待2S
Dim c(7) As Byte '这里A(0)表示定义的数组是含有下标上限为0的数组.
c(0) = &H55
c(1) = &H1
c(2) = &H1
c(3) = &H1
c(4) = &H0
c(5) = &H0
c(6) = &H0
c(7) = &H58
'a(8) = &H59
'sj(3) = &H3
MSComm1.Output = c
End Sub
'------------------------------------------------------------------------------------------------------------------------
Private Sub Form_Load()
'---------------窗體載入 RS232設定內容-----------------------------------------
 = 1
MSComm1.PortOpen = True
MSComm1.Settings = "9600,n,8,1"
'----------用代码创建一个Timer1控件,不用往窗体拖Timer1控件----------
Set Timer1 = Me.Controls.Add("VB.Timer", "Timer1")
Timer1.Enabled = True
Timer1.Interval = 5000 '5000ms

End Sub

Private Sub Timer1_Timer()

Dim ymd As String       '日期变量
Dim FileName As String  '文件名变量
Dim Str As String       '读取到的数据内容变量
Dim FilePath As String  '完整的文件名变量

FilePath = "C:\ew518fe\ES340A\"   '日志.LOG的文件夹

ymd = Year(Date) & String(2 - Len(Month(Date)), "0") & Month(Date) & String(2 - Len(Day(Date)), "0") & Day(Date)
FileName = "ODBC" & ymd & ".LOG"
'Print FileName


 Cls '清除窗体上一次显示的信息
 
If Dir(FilePath, vbDirectory + vbHidden) = "" Then

    Form1.Print "日志文件目录不存在!"

End If

If Dir(FilePath & FileName) = "" Then
    Form1.Print "今天没有新日志文件!"

Else

  Open FilePath & FileName For Input As #1
  While Not EOF(1)
    Line Input #1, Str
    a = a + 1
  Wend
  Close #1

    If Str <> "" Then
        'Form1.Print Str
        Text1 = Str

            If Str <> Value Then  '检查当前最新数据和全局变量是否相同,不同则发消息,以防止重复发送消息
              Call SendMessage    '调用SendMessage函数,向继电器发消息
              Value = Str         '给全局变量赋值,记录发送消息后最新数据是什么
            End If

    Else
     Form1.Print "有日志文件,但日志内容为空!"
    End If
  
End If

End Sub

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2021-01-28 13:34
宋政林
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2020-9-16
得分:0 
回复 14楼 yuma
你好,結合現場實際情況,OK的。
1,如下圖中的Shape1的狀態是否可以做成發閉合指令后,狀態顯示為綠色,           發斷開指令后,狀態顯示滅,
2021-01-28 16:47



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-504727-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.268372 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved