如何用mscomm控件发送长度超过128字节的16进制数据(串口)

sssvip123 2008-12-30 01:54:09
请问如何用mscomm控件发送长度超过128字节的16进制数据(串口),如以下:

68 A1 A1 68 02 00 5C 32 03 00 00 00 01 00 02 00 90 00 00 1B 00 00 8C 00 FB 70 70 00 00 13 0B 00 00 00 00 00 8C 00 00 00 00 02 9F C2 EC 23 A9 02 9F 80 D0 23 A9 00 00 00 00 00 00 00 68 04 03 00 02 0E 06 00 00 10 02 10 00 00 01 84 00 00 00 0E 06 01 00 10 02 00 00 00 01 84 00 00 00 0E 06 02 00 10 1F 00 20 00 00 1F 00 00 00 0E 06 03 00 10 1F 00 20 00 00 1F 00 00 40 0E 06 04 00 10 1E 00 80 00 00 1E 00 00 00 0E 06 05 00 10 02 00 12 00 00 83 00 00 70 04 0E 66 66 0C 0F 40 03 9B 98 02 06 9D 9A 00 08 15 16

共167个字节,在使用mscomm控件发送以上字节后返回的数据不对,其它小于128个字节的则可正常接收,我用的是vb编程,请教各位高手该如何发送。
...全文
297 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
coolwyser 2011-08-24
  • 打赏
  • 举报
回复
楼主电科院的?
sssvip123 2008-12-31
  • 打赏
  • 举报
回复
问题已解决,多谢zdingyun
zdingyun 2008-12-31
  • 打赏
  • 举报
回复
Option Explicit
Dim strData As String
Dim byteSEnd() As Byte
Dim strHex As String

Private Sub Command1_Click()
Dim i As Integer
strHex = "68 A1 A1 68 02 00 5C 32 03 00 00 00 01 00 02 00 90 00 00 1B 00 00 8C 00 FB 70 70 00 00 13 0B 00 00 00 00 00 8C 00 00 00 00 02 9F C2 EC 23 A9 02 9F 80 D0 23 A9 00 00 00 00 00 00 00 68 04 03 00 02 0E 06 00 00 10 02 10 00 00 01 84 00 00 00 0E 06 01 00 10 02 00 00 00 01 84 00 00 00 0E 06 02 00 10 1F 00 20 00 00 1F 00 00 00 0E 06 03 00 10 1F 00 20 00 00 1F 00 00 40 0E 06 04 00 10 1E 00 80 00 00 1E 00 00 00 0E 06 05 00 10 02 00 12 00 00 83 00 00 70 04 0E 66 66 0C 0F 40 03 9B 98 02 06 9D 9A 00 08 15 16 "
ReDim byteSEnd(Len(strHex) \ 3)
Text1 = Len(strHex)
For i = 1 To Len(strHex) Step 3
byteSEnd((i - 2) / 3) = Val("&H" & Mid(strHex, i, 3))
Next
MSComm1.Output = byteSEnd
End Sub

Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,n,8,1"
MSComm1.InBufferCount = 0
MSComm1.InputLen = 0
MSComm1.RThreshold = 1
MSComm1.InputMode = comInputModeBinary '以2进制接收
MSComm1.PortOpen = True
End Sub
Private Sub MSComm1_OnComm()
Dim inByte() As Byte
Dim i As Integer
Select Case MSComm1.CommEvent
Case comEvReceive
inByte = MSComm1.Input
For i = 0 To UBound(inByte)
If Len(Hex(inByte(i))) = 1 Then
strData = strData & "0" & Hex(inByte(i))
Else
strData = strData & Hex(inByte(i))
End If
Next
Text1.Text = strData
'以下写符合通信协议规定的判断代码处理接收数据
End Select
End Sub
fu0212 2008-12-31
  • 打赏
  • 举报
回复
用数组 一个一个发
zdingyun 2008-12-31
  • 打赏
  • 举报
回复
楼主,请采用2进制接收模式,将接收的字节流转换为16进制字符串,接着进行数据处理。
Option Explicit
Dim strData As String
Private Sub Command1_Click()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,n,8,1"
MSComm1.InBufferCount = 0
MSComm1.InputLen = 0
MSComm1.RThreshold = 1
MSComm1.InputMode = comInputModeBinary '以2进制接收
MSComm1.PortOpen = True
End Sub

Private Sub Command2_Click()
MSComm1.PortOpen = False
End Sub

Private Sub MSComm1_OnComm()
Dim inByte() As Byte
Dim i As Integer
Select Case MSComm1.CommEvent
Case comEvReceive
inByte = MSComm1.Input
For i = 0 To UBound(inByte)
If Len(Hex(inByte(i))) = 1 Then
strData = strData & "0" & Hex(inByte(i))
Else
strData = strData & Hex(inByte(i))
End If
Next
Text1.Text = strData
'以下写符合通信协议规定的判断代码处理接收数据
End Select
End Sub


WuYunpeng 2008-12-30
  • 打赏
  • 举报
回复
为什么不用字节数组呢

1,451

社区成员

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

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