将pc机某串口短接,实现一个文本框发送28个16进制数,然后在一个接收框中接收显示收到的同样的字符.我用文本发送方式很容易实现,直接把分别把文本框内容赋值到output,input就可以了.但是要是采用2进制发送.只能实现一个16进制数的发送,要是发28个就有问题了.我的想法是 把发送文本框中的真正的数据提出来,组成一个字符串发送.然后接收后2个,2个显示,中间补空格即可.主要代码如下:
Dim SendBuffer As String, RevBuffer As String
Dim RelData(1500) As Integer
Dim buffer(300) As String
Dim Inputdata() As Byte
Dim Send_Start(1) As Byte
Dim Send_Data(1) As Byte
Dim x As String
Dim i, j
Private Sub Button_RECV_C_Click()
Text_RECV.Text = ""
MSComm.InBufferCount = 0
For i = 1 To 300
buffer(i) = 0
Next i
Text_SEND.SetFocus
End Sub
'发送数据
Private Sub Button_SEND_Click()
...
'为了防止出错,添加下列语句,要求只传送大小写字母和数字
For i = 1 To Len(Trim(Text_SEND.Text))
SendBuffer = Asc(Mid(Text_SEND.Text, i, 1))
If (SendBuffer >= 48 And SendBuffer <= 57) Or(SendBuffer >= 65 And SendBuffer <= 90 And SendBuffer <> 72) Or (SendBuffer >= 97 And SendBuffer <= 122) Then
RelData(i) = SendBuffer
End If
Next i
For i = 1 To Len(Trim(Text_SEND.Text))
Send_Data(1) = CByte(RelData(i))
MSComm.Output = Send_Data
Next i
End Sub
'接受数据
Private Sub MSComm_OnComm()
Select Case MSComm.CommEvent
...
Case comEvReceive '接收字符的事件触发
'读缓冲区字符
For i = 1 To 2000
Next i
Inputdata = MSComm.Input
'在这个文本框存放发送过来的数组数值的字符串
For i = LBound(Inputdata) To UBound(Inputdata)
Text1.Text = Text1.Text + Chr(Inputdata(i))
Next i
'对上面的字符串每2个截取加空格显示.
For i = 1 To (Len(Text1.Text) - 1) Step 2
buffer(i) = Mid(Text1.Text, i, 2)
Text_RECV.Text = Text_RECV.Text + buffer(i) + Chr(32)
Next i
End Select
End Sub
让我困惑的是:
1 我的最终目的是发N*28个数,就是要数组发送。还有其它简化的实现方法么?
2 点击发送按钮,接受的数据在text1中显示字符串AA***55,是正常的。但是发送到最后要要显示的text—receive框时,第一次点击发送出来AA***e3 00 00 00 55 AA***e3 00 00 00 00 55(重复,且少了组00,)单击Button_RECV_C清空接受数据框,第二次点击发送,出现3组正确的数据,这是为啥?而且如果把text—receive用定义的字符串变量代替就得到AA 000 0cc 033...9cc 7e3 000 000,以三个一组,为什么不能代替呢?
(text1是我临时设来观察发送的数据的,目的是显示发送的30个数据字符串)
3 对于mscomm,发送接收2进制时,数据具体是如何传送的?
4 inputlen,Rthreshold,sthreshold,outbuffersize,inbuffersize,inbuffercount,outbuffercount属性的设置,比如数组定义时的大小等与我的发送方式,文本or2进制,还有发送的26进制的n*28的数据有着什么样的内在联系?