| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
大量收QQ微信精准粉/交友粉,非诚勿扰千里之行 始于足下
共有 683 人关注过本帖
标题:请教VB串口数据如何实时保存到文件
只看楼主 加入收藏
aroplane
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2018-7-12
结帖率:0
  已结贴   问题点数:20  回复次数:8   
请教VB串口数据如何实时保存到文件
各位大侠,请教一下,如何用VB把从串口接收来的数据实时保存到一个已打开的txt文件?最近正在搞这一块儿很久没有思路,如果可以,能否贴出相关代码学习一下?谢谢!
2018-07-13 00:04
Artless
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:4211
专家分:28884
注 册:2009-4-8
  得分:10 
打开文件open
读串口数据
写入append
关闭文件close

无知
2018-07-13 01:21
aroplane
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2018-7-12
  得分:0 
回复 2楼 Artless
请教一下具体代码实现。我的代码如下,每触发一次onComm事件就写入打开的文件,但写入文件后总是出现字符串被截断现象,如果在前面加了延时则字符串不被截断,但是字符串后面会出现多余的一行空行。请看一下我的代码有什么问题。
Dim InBuff As String
Private Sub cmdNewLog1_Click()
    Open CommonDialog4.FileName For Append As #SaveLogID
        DisplayFlag1 = True
End Sub

Private Sub MSComm1_OnComm()
    Select Case MSComm1.CommEvent
        Case comEvReceive
            InBuff = MSComm1.Input
            If DisplayFlag1 = True Then
                Print #SaveLogID, InBuff
                Close #SaveLogID
            End If
    End Select
End Sub
2018-07-13 02:53
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:224
帖 子:4280
专家分:26116
注 册:2008-10-15
  得分:10 
Dim InBuff As String
Private Sub cmdNewLog1_Click()
    Open CommonDialog4.FileName For Append As #SaveLogID              单击后打开日志文件
        DisplayFlag1 = True
End Sub

Private Sub MSComm1_OnComm()
    Select Case MSComm1.CommEvent
        Case comEvReceive
            InBuff = MSComm1.Input
            If DisplayFlag1 = True Then
                Print #SaveLogID, InBuff            保存内容
                Close #SaveLogID                    关闭日志
            End If
    End Select
End Sub

当你串口数据,被分为二个包,或更多包时,写入第一段后,把文件关闭了,后面第二个包,甚至更多的包,就无法写了,就会丢数据了。

授人于鱼,不如授人于渔
早已停用QQ了
2018-07-13 09:55
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:224
帖 子:4280
专家分:26116
注 册:2008-10-15
  得分:0 
修改建议

保存内容时,临时打开文件,保存完内容后,立即关闭文件 。

Dim InBuff As String
Private Sub cmdNewLog1_Click()
        DisplayFlag1 = True
End Sub

Private Sub MSComm1_OnComm()
    Open CommonDialog4.FileName For Append As #SaveLogID
    Select Case MSComm1.CommEvent
        Case comEvReceive
            InBuff = MSComm1.Input
            If DisplayFlag1 = True Then
                Print #SaveLogID, InBuff
            End If
    End Select
    Close #SaveLogID
End Sub

授人于鱼,不如授人于渔
早已停用QQ了
2018-07-13 09:56
aroplane
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2018-7-12
  得分:0 
回复 5楼 风吹过b
多谢回复!但是, 我在点击这个按钮事件中 cmdNewLog1_Click() 要打开一个文件并指定路径,串口数据来了就自动写入这个文件, 而不是串口事件出现才打开一个文件并保存。点击后这个文件可以一直打开,串口数据就可以一直写入,直到关闭程序。
Dim InBuff As String
Private Sub cmdNewLog1_Click()
        DisplayFlag1 = True
End Sub

Private Sub MSComm1_OnComm()
    Open CommonDialog4.FileName For Append As #SaveLogID
    Select Case MSComm1.CommEvent
        Case comEvReceive
            InBuff = MSComm1.Input
            If DisplayFlag1 = True Then
                Print #SaveLogID, InBuff
            End If
    End Select
    Close #SaveLogID
End Sub
2018-07-13 20:32
aroplane
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2018-7-12
  得分:0 
回复 5楼 风吹过b
sorry,我第一帖代码有问题,应该是下面这个,OnComm事件中的关闭文件这一行是注掉的。
Private Sub cmdNewLog1_Click()
    Open CommonDialog4.FileName For Append As #SaveLogID
        DisplayFlag1 = True
End Sub

Private Sub MSComm1_OnComm()
    Select Case MSComm1.CommEvent
        Case comEvReceive
            InBuff = MSComm1.Input
            If DisplayFlag1 = True Then
                Print #SaveLogID, InBuff
                'Close #SaveLogID
            End If
    End Select

End Sub
2018-07-13 20:45
aroplane
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2018-7-12
  得分:0 
回复 7楼 aroplane
但是这个样子还是不行。不知道大家往一个打开的文件里面写数据都是怎么实现的?有没有成功的源码可以参考?
2018-07-18 21:41
aroplane
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2018-7-12
  得分:0 
回复 7楼 aroplane
请教大家,有没有成功的源码可以参考?
2018-08-09 22:43







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

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