| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1134 人关注过本帖, 1 人收藏
标题:[求助]串口接收问题
只看楼主 加入收藏
taozl
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2007-9-14
收藏(1)
 问题点数:0 回复次数:11 
[求助]串口接收问题


我这段程序哪里有问题吗?收回的数据根发送的数据总对不上
在98系统好像还好,XP下就不行。用串口助手看收的内容是正确的

Private Sub MSComm1_OnComm()
Dim receivedata As Byte
Select Case MSComm1.CommEvent '判断通信事件
Case comEvReceive '收到rthreshold个字节产生的接收事件
receivedata = MSComm1.Input(0)
If HeadOk = False Then
If receivedata = &HFF Then
If LastTimeisFF = True Then
NumberofFF = NumberofFF + 1
If NumberofFF > 2 Then
HeadOk = True
NumberofFF = 0
receivenumber = 0
MSComm1.InBufferCount = 0
End If
Else
NumberofFF = 1
LastTimeisFF = True
End If
End If
Else '已经收到3个FF 接收数据
receivebyte(receivenumber) = receivedata
If receivenumber = 5 Then
DataCount = receivedata + 2
ElseIf receivenumber > 5 Then
DataCount = DataCount - 1
If DataCount = 0 Then
receiveok = True
If Timer1.Enabled = True Then
Timer1.Enabled = False
Timer1.Interval = 10
Timer1.Enabled = True
End If
If Timer3.Enabled = True Then
Timer3.Enabled = False
Timer3.Interval = 10
Timer3.Enabled = True
End If

HeadOk = False
End If
End If
receivenumber = receivenumber + 1
End If
End Select
End Sub

搜索更多相关主题的帖子: 串口 receivedata Then Case 助手 
2007-10-26 08:09
taozl
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2007-9-14
收藏
得分:0 
请教各位了
2007-10-26 12:29
taozl
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2007-9-14
收藏
得分:0 
rthreshold=1
2007-10-26 13:39
taozl
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2007-9-14
收藏
得分:0 
以下为接收数据与发送数据的校验

j = 0
Do While rbyte(sendnumber, j) <> 255 'FF数据尾标志
If rbyte(sendnumber, j) <> receivebyte(j + 6) Then '校验
sign = False '出错
Exit Do
End If
j = j + 1
Loop
2007-10-26 14:51
lanshanlhy
Rank: 1
等 级:新手上路
帖 子:130
专家分:0
注 册:2006-4-16
收藏
得分:0 
嘿嘿 看了下,没看明白。我给你来一段收的代码 (无校验)
Private Sub MSComm1_OnComm()
On Error Resume Next

Dim a() As Byte
Dim strBuff As String
Dim StrData As String
Dim i As Integer

Select Case MSComm1.CommEvent
Case 1
Case 2

MSComm1.InputLen = 0
strBuff = MSComm1.Input
a() = strBuff
For i = 0 To UBound(a)
If Len(Hex(a(i))) = 1 Then
StrData = StrData & "0" & Hex(a(i)) & ","
Else
StrData = StrData & Hex(a(i)) & ","
End If
Next
Text1 = Text1 + StrData

Case 3
Case 4
Case 5
Case 6
Case 7
Case Default

End Select
End Sub

永远以今天为荣!
2007-10-27 10:03
taozl
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2007-9-14
收藏
得分:0 
现在找到一点原因了
MSComm1.InBufferCount = 0不要就好了
就是还有问题,就是:

从receivebyte(receivenumber)显示出来的数据只有10多个,后边的就没有。receivenumber已经是根据数据包长度来定的呀

2007-10-28 14:38
taozl
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2007-9-14
收藏
得分:0 
这是正常的数据格式:
FF FF FF 1F 01 00 00 6E 0E 01 01 00 01 00 00 EA 01 01 0A E1 01 77 FF
其中0E为其后的数据位长

可实际收到1F 01 00 00 6E 0E 01 01 00 01 00 00 EA,后边基本就没了。(3个FF不存)
2007-10-29 08:00
taozl
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2007-9-14
收藏
得分:0 

是不是XP下连续的产生oncom事件就是不稳定呀

2007-10-30 10:53
lanshanlhy
Rank: 1
等 级:新手上路
帖 子:130
专家分:0
注 册:2006-4-16
收藏
得分:0 
程序启动先清空缓冲区
这样应该就没有FF FF FF
发送的数据在检测下
呵呵 问题不是很大了
ASCII 转换成 你相应的数据就可以了 呵呵

永远以今天为荣!
2007-11-01 09:59
taozl
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2007-9-14
收藏
得分:0 
问题是EA后的数据怎就检测不出来,好像没有oncomm事件了
2007-11-01 13:32
快速回复:[求助]串口接收问题
数据加载中...
 
   



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

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