wangke639515 2015-11-09 05:36
浏览 1784

vb.net2010的serialport问题

在vb.net2010里使用serialport,
问题1:在DataReceive事件中调用控件显示数据,跨线程调用如何使用多个控件显示?图片中的委托定义是参考的,只可以在一个控件显示,小弟想把不同的数值显示在不同的控件,该如何做?
问题2:数据接收结果:当发送十六进制数123456时显示18.0,3.0,64.0,86.0对应取值12,03,40,56。这是什么原因?小弟理想中是发送12345678然后收到12、34、56、78对应的十进制数。
Dim inDataLen As Integer = SerialPort.BytesToRead() '获取接收缓冲区中数据的字节数
If inDataLen > 0 Then
Dim inBytes(inDataLen - 1) As Byte, bytes As Byte
Dim strHex As String = ""
SerialPort.Read(inBytes, 0, inDataLen)
For Each bytes In inBytes
strHex = strHex + [String].Format("{0:X2} ", bytes) '16进制
Next

If Len(Trim(strHex)) = 8 Then
datastring(1) = Mid(Trim(strHex), 1, 1)
datastring(2) = Mid(Trim(strHex), 2, 1)
datastring(3) = Mid(Trim(strHex), 3, 1)
datastring(4) = Mid(Trim(strHex), 4, 1)
datastring(5) = Mid(Trim(strHex), 5, 1)
datastring(6) = Mid(Trim(strHex), 6, 1)
datastring(7) = Mid(Trim(strHex), 7, 1)
datastring(8) = Mid(Trim(strHex), 8, 1)
End If
datatemp(1) = (Val("&H" & datastring(1)) * (16 ^ 1) + Val("&H" & datastring(2)) * (16 ^ 0))
TextBoxRecieve.Invoke(RecieveRefresh, Format$(datatemp(1), "0.0"))
datatemp(2) = (Val("&H" & datastring(3)) * (16 ^ 1) + Val("&H" & datastring(4)) * (16 ^ 0))
TextBoxRecieve.Invoke(RecieveRefresh, Format$(datatemp(2), "0.0"))
datatemp(3) = (Val("&H" & datastring(5)) * (16 ^ 1) + Val("&H" & datastring(6)) * (16 ^ 0))
TextBoxRecieve.Invoke(RecieveRefresh, Format$(datatemp(3), "0.0"))
datatemp(4) = (Val("&H" & datastring(7)) * (16 ^ 1) + Val("&H" & datastring(8)) * (16 ^ 0))
TextBoxRecieve.Invoke(RecieveRefresh, Format$(datatemp(4), "0.0"))

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥20 matlab yalmip kkt 双层优化问题
    • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
    • ¥88 实在没有想法,需要个思路
    • ¥15 MATLAB报错输入参数太多
    • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
    • ¥15 有赏,i卡绘世画不出
    • ¥15 如何用stata画出文献中常见的安慰剂检验图
    • ¥15 c语言链表结构体数据插入
    • ¥40 使用MATLAB解答线性代数问题
    • ¥15 COCOS的问题COCOS的问题