新手求教:VB串口问题

declanLu 2008-08-04 11:14:40
在做一个串口通讯的exe,PC端先循环发送握手信号&H20,一旦检测到握手成功,就发送命令信号&H2,然后再进行下一步操作。问题是:
在发送命令信号&H2时,根据打印的信息,下位机接收到的仍然是握手信号&H20,为什么会这样?
后来尝试在检测到握手成功后清空发送缓冲和接收缓冲,再发送命令信号,结果得不到改观;
而后又尝试在检测到握手成功后清空发送缓冲和接收缓冲、关闭串口,再打开串口,再执行清空发送缓冲和接收缓冲,再发送命令信号,结果仍得
不到改观。代码片断如下:
Do
MSComm1.OutBufferCount = 0
MSComm1.InBufferCount = 0
sendbyte (HS_CODE) '&H20
If IsRxDataReady(1, 0) = True Then '
ReDim returnData(1)
returnData = ReadRxData(10)
If returnData(0) Then 'Handshak is OK ?
Exit Do
End If
End If
Loop

MSComm1.OutBufferCount = 0 'clean buffer
MSComm1.InBufferCount = 0
MSComm1.PortOpen = False 'close com port

OpenCommPort 'Open com port
MSComm1.OutBufferCount = 0 'clean buffer
MSComm1.InBufferCount = 0
Do
MSComm1.OutBufferCount = 0
MSComm1.InBufferCount = 0
sendbyte (HS_COMMAND) '&H2
If IsRxDataReady(1, 0) = True Then
ReDim returnData(1)
returnData = ReadRxData(1)
If returnData(0) = CCHR Then 'Command is OK ?
Exit Do
End If
End If
Loop

各位VB前辈,多多指教,谢谢
如果可以的话,可以QQ指导:36039261,或E-mail:declan.lu@hotmail.com

因为刚注册,分不多
请赐教,不胜感激
...全文
152 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
declanLu 2008-08-04
  • 打赏
  • 举报
回复
求教,在线等候,谢谢
declanLu 2008-08-04
  • 打赏
  • 举报
回复
code修改如下:

Do 'Just handshaking
If IsRxDataReady(1, 0) = True Then
ReDim returnData(1)
returnData = ReadRxData(10)
If returnData(0) Then
Exit Do
End If
returnData = ""
End If
Loop

MSComm1.OutBufferCount = 0
MSComm1.InBufferCount = 0
sendbyte (HS_CODE) 'Send &H20

returnData = ""
MSComm1.PortOpen = False
MSComm1.OutBufferCount = 0
MSComm1.InBufferCount = 0
OpenCommPort

Do
MSComm1.OutBufferCount = 0
MSComm1.InBufferCount = 0
sendbyte (HS_COMMAND) 'Send &H2
If IsRxDataReady(10, 0) = True Then
ReDim returnData(1)
returnData = ReadRxData(1)
If returnData(0) = CCHR Then
Exit Do
End If
returnData = ""
End If
Loop

问题如旧,肯请高手指点。多谢
declanLu 2008-08-04
  • 打赏
  • 举报
回复
wang19847277,谢谢你的建议,已经试过,效果依旧
我想,如果按照逻辑分析的话,我发了一个数据后,清空了缓冲区,再发一个新数据,不应该出现这样的问题啊
我分析过是否是定时器的问题,但在命令成功之前是没有使能定时器的

对了,是不是这个循环有毛病:
"
Do
MSComm1.OutBufferCount = 0
MSComm1.InBufferCount = 0
sendbyte (HS_CODE) '&H20
If IsRxDataReady(1, 0) = True Then '
ReDim returnData(1)
returnData = ReadRxData(10)
If returnData(0) Then 'Handshak is OK ?
Exit Do
End If
End If
Loop
"
上位机在接受到正确数据returnData之前已经发了NN多的&H20,也就是说下位机的接受缓冲区中已经有了NN多的&H20,这样的话,在NNN个
"
Do
MSComm1.OutBufferCount = 0
MSComm1.InBufferCount = 0
sendbyte (HS_COMMAND) '&H2
If IsRxDataReady(1, 0) = True Then
ReDim returnData(1)
returnData = ReadRxData(1)
If returnData(0) = CCHR Then 'Command is OK ?
Exit Do
End If
End If
Loop
"
操作后,下位机应该也有机会收到&H2的呀。那时候好像PC机都快瘫了...
wang19847277 2008-08-04
  • 打赏
  • 举报
回复
清空是这样吧returnData = ""
还有你在 sendbyte (HS_COMMAND) '&H2
这句设个断点,单步调试一下
declanLu 2008-08-04
  • 打赏
  • 举报
回复
fangzheng2008,首先非常感谢你。可是,
returnData(0)清空是这样吗:returnData = Empty
这样试了,结果依旧。而且,我通过打印信息,已经确认握手成功,只待进行命令操作了,关键问题是:在接下来的数据发送中,不管我发送啥数据,总得到的是一样的结果。请问还有更贴切的建议吗?
谢谢,在线企待
fangzheng2008 2008-08-04
  • 打赏
  • 举报
回复
首先你要确定你发送的握手信号下位机真的收到了,通过你的代码片段来看,你只要returnData(0)非空就认为下位机已经收到了,其实不一定,你可能首次使用有效,当第二次在使用时,returnData(0)本身可能就非空,所以,不管下位机是否收到握手信号,程序都会Exit Do,所以你每次执行完 If returnData(0) Then 以后,要把returnData(0)清空。估计问题就解决了

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧