VB串口发送数据的问题

pigeon0411 2009-09-07 10:28:28
使用MSCOMM组件,在做发送的时候,

我设置的 .OutBufferSize = 4096 * 5 '设置MSComm1发送缓冲区为4096*5字节

然后设置了一个数组 sendData(1027),

给sendData赋值后,发送:mscomm1.output = sendData

用串口调试助手接收我的程序发送的数据,却发现只能接收到600多个字节,而不能接收到全部。
串口调试助手是OK的。肯定是我自己的程序的问题。

在这里想请教一下:如何发送一个1KB以上的字节数组?

希望高手们在此讨论一下,谢谢。
...全文
167 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
pigeon0411 2009-09-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zdingyun 的回复:]
http://topic.csdn.net/u/20071114/16/de3ade11-509e-43eb-a638-0dac7bcef821.html
LZ:详细参阅上述链接.
[/Quote]

在这个贴子里
http://topic.csdn.net/u/20071029/15/f2635fd1-7f77-4306-b7b9-76cf74e47ff8.html

你在17楼提供了代码:

你使用我贴的代码,可一次发2048或4096字节长度数据不出错.

VBScript codePrivate Sub Command1_Click()
Dim Data(1093) As Byte
Data(0) = &HAA
Data(1) = &HBB
Data(2) = &HCC
For i = 3 To 1093
Data(i) = Val( "&H " & Hex(Int((256 * Rnd))))
Next
MSComm1.Output = Data '我使用这种方式发送,一样只能收到642个字节,其他的都收不到。 End Sub
Private Sub MsComm1_OnComm()
Dim intInputLen As Integer
Select Case Me.MSComm1.CommEvent
Case comEvReceive
'此处添加处理接收的代码
Me.MSComm1.InputMode = comInputModeBinary '二进制接收
intInputLen = Me.MSComm1.InBufferCount
ReDim bytInput(intInputLen)
bytInput = Me.MSComm1.Input
jieshou
End Select
End Sub

Public Function jieshou() '接收数据处理为16进制
Dim i As Integer
For i = 0 To UBound(bytInput)
If Len(Hex(bytInput(i))) = 1 Then
strData = strData & "0" & Hex(bytInput(i))
Else
strData = strData & Hex(bytInput(i))
End If
Next
RichTextBox1 = strData
Text1 = Len(strData) \ 2
End Function

我使用
pigeon0411 2009-09-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zdingyun 的回复:]
引用 4 楼 pigeon0411 的回复:
谢谢。

已经解决了。
发送一个大于642字节的数组,如果直接用 mscomm1.output= arr 'arr(大于642字节大小)
是不能实现的,因为mscomm组件本身BUG的问题。

可以通过每次只发送一字节的方式来完成这个功能,以解决问题。多字节的话,可循环发送。

这并非BUG问题,是串口通信的性质决定的.
[/Quote]

是它的什么性质呢?
怎么只能发送小量字节的数组,稍微大点的数组就不能一起发送了“?
贝隆 2009-09-07
  • 打赏
  • 举报
回复
zdingyun 2009-09-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 pigeon0411 的回复:]
谢谢。

已经解决了。
发送一个大于642字节的数组,如果直接用 mscomm1.output= arr 'arr(大于642字节大小)
是不能实现的,因为mscomm组件本身BUG的问题。

可以通过每次只发送一字节的方式来完成这个功能,以解决问题。多字节的话,可循环发送。
[/Quote]
这并非BUG问题,是串口通信的性质决定的.
pigeon0411 2009-09-07
  • 打赏
  • 举报
回复
谢谢。

已经解决了。
发送一个大于642字节的数组,如果直接用 mscomm1.output= arr 'arr(大于642字节大小)
是不能实现的,因为mscomm组件本身BUG的问题。

可以通过每次只发送一字节的方式来完成这个功能,以解决问题。多字节的话,可循环发送。
zdingyun 2009-09-07
  • 打赏
  • 举报
回复
zdingyun 2009-09-07
  • 打赏
  • 举报
回复
LZ:采用控制发送节奏来满足要求.
pigeon0411 2009-09-07
  • 打赏
  • 举报
回复
沉的太快了,自己顶一下
pigeon0411 2009-09-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zdingyun 的回复:]
LZ:你须仔细看其它楼处的答复,17楼处的代码可能有缺陷.
[/Quote]

多谢指导,我还有个问题,还请指点一下:

http://topic.csdn.net/u/20090907/13/a772da6f-d1e3-4a4f-87e1-cae84468c7a5.html?52052
zdingyun 2009-09-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 pigeon0411 的回复:]
可以通过每次只发送一字节的方式来完成这个功能,以解决问题。多字节的话,可循环发送。
[/Quote]
使用单字节发送也是一种办法.
zdingyun 2009-09-07
  • 打赏
  • 举报
回复
LZ:你须仔细看其它楼处的答复,17楼处的代码可能有缺陷.

1,451

社区成员

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

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