关于vb串口通信的问题 20
我现在用vb做个数据分析软件,通过串口从单片机里读取数据,然后把数据写进数据库里,一个小时一条记录,一条记录161个字节,共31天的数据。我的MSComm设置是这样:MS...
我现在用vb做个数据分析软件,通过串口从单片机里读取数据,然后把数据写进数据库里,一个小时一条记录,一条记录161个字节,共31天的数据。我的MSComm设置是这样:
MSComm1.CommPort = 2 '...使用Com2口
MSComm1.Settings = "9600,n,8,1" '...设置通讯参数
MSComm1.InputLen = 161 'input将读取接收缓冲区的全部内容
MSComm1.InBufferSize = 1024 '设置接收缓冲区的字节长度
MSComm1.RThreshold = 161
MSComm1.InBufferCount = 0 '清除发送缓冲区数据
MSComm1.OutBufferCount = 0 '清除接收缓冲区数据
MSComm1.InputMode = comInputModeBinary '二进制模式接收
每接收到161个字节触发Oncomm事件,把161个字节保存在一个数组里,创建新的记录,然然把数组里的数据写入记录各对应字段里。
现在问题是这样,本来31天每天24小时,数据库里的记录应该有31*24=744条,但是现在只有734条,有时又是735条,而且读得的数据很乱,各个字段的数据完全对应不上,但我用串口调试助手读单片机的数据是正确的,请问为什么会出现这种情况?该怎样解决?
我是这样读数据的:
Dim da() As Byte
Dim indata As Variant
Select Case MSComm1.CommEvent
Case comEvReceive '...有接受事件发生
indata = MSComm1.Input
MSComm1.InBufferCount = 0 '清空接收缓冲区内容
da = indata 展开
MSComm1.CommPort = 2 '...使用Com2口
MSComm1.Settings = "9600,n,8,1" '...设置通讯参数
MSComm1.InputLen = 161 'input将读取接收缓冲区的全部内容
MSComm1.InBufferSize = 1024 '设置接收缓冲区的字节长度
MSComm1.RThreshold = 161
MSComm1.InBufferCount = 0 '清除发送缓冲区数据
MSComm1.OutBufferCount = 0 '清除接收缓冲区数据
MSComm1.InputMode = comInputModeBinary '二进制模式接收
每接收到161个字节触发Oncomm事件,把161个字节保存在一个数组里,创建新的记录,然然把数组里的数据写入记录各对应字段里。
现在问题是这样,本来31天每天24小时,数据库里的记录应该有31*24=744条,但是现在只有734条,有时又是735条,而且读得的数据很乱,各个字段的数据完全对应不上,但我用串口调试助手读单片机的数据是正确的,请问为什么会出现这种情况?该怎样解决?
我是这样读数据的:
Dim da() As Byte
Dim indata As Variant
Select Case MSComm1.CommEvent
Case comEvReceive '...有接受事件发生
indata = MSComm1.Input
MSComm1.InBufferCount = 0 '清空接收缓冲区内容
da = indata 展开
1个回答
展开全部
后一个数据乱问题,建议VB读单片机161字节数据命令本身应有引导符和结束符,以便接收代码将符合要求的命令进行处理,不合格命令不处理。串口线长通信受干扰.
前一个数据记录少的问题,不知你计算机是整月连续开着的吗?如运行一此程序,其第一条记录会延迟,这样一来会造成记录减少。你的计算机内部时钟慢.
http://zhidao.baidu.com/question/18050782.html
请参阅如上网址本人的答复。
前一个数据记录少的问题,不知你计算机是整月连续开着的吗?如运行一此程序,其第一条记录会延迟,这样一来会造成记录减少。你的计算机内部时钟慢.
http://zhidao.baidu.com/question/18050782.html
请参阅如上网址本人的答复。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询