注册 登录
编程论坛 VB6论坛

VB6是否可以實現如下功能

宋政林 发布于 2021-01-26 15:24, 3402 次点击
1,ICT測試機每天都測試,測試出一臺產品后會自動生成一個.txt的資料到指定路徑位置。   (資料名稱的構造為:ODBC20210122.LOG)    其中只有年月日會更新,例如:今天那就是ODBC20210126.LOG     明天那就是ODBC20210127.LOG  
只有本站会员才能查看附件,请 登录
   

想了解VB6可以實現自動讀取當天的.Log嗎?  


2,如果第一點可以實現,那麼
只有本站会员才能查看附件,请 登录
    裡面的內容只要測試就會有增加,如何讀取最新的那筆資料                                                                                                                                
14 回复
#2
yuma2021-01-26 15:49
假设这些日志文件都在d:\

程序代码:
Private Sub Form_Load()
Dim ymd As String
Dim filename As String
ymd = Year(Date) & String(2 - Len(Month(Date)), "0") & Month(Date) & String(2 - Len(Day(Date)), "0") & Day(Date)
filename = "ODBC" & ymd & ".LOG"
Shell "cmd /c notepad.exe d:\" & filename, vbHide
End Sub


[此贴子已经被作者于2021-1-27 10:25编辑过]

#3
yuma2021-01-26 16:10
假设:
1、.LOG文件都在d:\
2、.LOG文件编码为GBK或gb2312

程序代码:
Private Sub Form_Load()
Me.Hide  '隐藏窗体
Dim ymd As String
Dim filename As String
Dim str As String
ymd = Year(Date) & String(2 - Len(Month(Date)), "0") & Month(Date) & String(2 - Len(Day(Date)), "0") & Day(Date)
filename = "ODBC" & ymd & ".LOG"
Open "d:\" & filename For Input As #1
While Not EOF(1)
Line Input #1, str
a = a + 1
Wend
Close #1
MsgBox str, 4096, "最新数据" '弹出置顶对话框
End '退出程序
End Sub


[此贴子已经被作者于2021-1-27 10:26编辑过]

#4
宋政林2021-01-27 09:18
回复 3楼 yuma
感謝樓上的大神在百忙之中回答我的疑問!
1,剛開始測試驗證時,都為正常,後面不知道為什麼ymd裡面的日期後面帶有一個0在裡面,從而找不到日誌文件。
只有本站会员才能查看附件,请 登录

代碼是使用的Command2來啟用
Private Sub Command2_Click()

'Me.Hide  '隐藏窗体
Dim ymd As String
Dim filename As String
Dim str As String
ymd = Year(Date) & String(2 - Len(Month(Date)), "0") & Month(Date) & String(2 - Len(Day(Date)), "0") & Day(Date) & String(2 - Len(Hour(Time)), "0")
filename = "ODBC" & ymd & ".LOG"
Open "C:\ew518fe\ES340A\" & filename For Input As #1
While Not EOF(1)
Line Input #1, str
a = a + 1
Wend
Close #1
'MsgBox str, 4096, "最新数据" '弹出置顶对话框
Text1 = str
'End '退出程序
End Sub

2,此功能是否可以實現:
 a,每天的早上上班后,可能我還沒有測試,(也就是說:沒有日誌文件時,程式是會報錯的),是否可以自動持續搜索呢?
#5
yuma2021-01-27 10:20
加入了多种判断。。。

程序代码:
Private Sub Form_Load()
Me.Hide  '隐藏窗体
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"
'MsgBox FileName

If Dir(FilePath, vbDirectory + vbHidden) = "" Then

    MsgBox "日志文件目录不存在!"
    End
ElseIf Dir(FilePath & FileName) = "" Then
    MsgBox "今天没有新日志文件!", 4096, "提示"
    End

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
    MsgBox Str, 4096, "最新数据" '弹出置顶对话框
  Else
    MsgBox "有日志文件,但日志内容为空!", 4096, "提示"
  End If
  
End If

End Sub


[此贴子已经被作者于2021-1-27 10:25编辑过]

#6
宋政林2021-01-27 15:06
回复 5楼 yuma
通過現場的實際測試驗證: 1,三種條件有分別進行了驗證,OK的。
                         2,當實際應用中,VB6的程式是一直開啟的,此時...ICT測試機會間隔幾秒就會有新的日誌寫入,是否能做到實時檢查新日誌。
                         3,當有新的日誌寫入后,VB6通過串口(9600,8,1)發生55 01 01 02 00 00 00 59  (吸合第一路繼電器)  等待1S左右  發生55 01 01 01 00 00 00 58  (斷開第一路繼電器)   備註:只要發現一筆新日誌就做一次繼電器的吸合和斷開。


謝謝
     
#7
yuma2021-01-27 15:46
你是要写 单片机 上位机、下位机程序啊?
单片机我不熟,帮不了你。

你哪里的,怎么文字都是繁体中文的?
#8
宋政林2021-01-27 15:55
回复 7楼 yuma
怎麼聯繫你呢,微信/電話?
#9
宋政林2021-01-27 16:04
回复 7楼 yuma
那能實現此功能嗎?
1,當實際應用中,VB6的程式是一直開啟的,此時...ICT測試機會間隔幾秒就會有新的日誌寫入,是否能做到實時檢查新日誌。
#10
czjt88882021-01-27 16:54
读取文件的最后修改日期就可以
#11
yuma2021-01-27 17:42
以下是引用宋政林在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
#12
宋政林2021-01-28 00:34
回复 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進行 繼電器閉合與斷開的控制
#13
宋政林2021-01-28 12:18
回复 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
#14
yuma2021-01-28 13:34
改好了,我这边无法测试运行。

应该没多大问题了。

程序代码:
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
#15
宋政林2021-01-28 16:47
回复 14楼 yuma
你好,結合現場實際情況,OK的。
1,如下圖中的Shape1的狀態是否可以做成發閉合指令后,狀態顯示為綠色,           發斷開指令后,狀態顯示滅,
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
1