0x3F表示字符"?"
成都創(chuàng)新互聯(lián)公司2013年至今,先為永順等服務(wù)建站,永順等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為永順企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
估計(jì)是你的發(fā)送指令不正確,設(shè)備返回你發(fā)送的指令后面加''?""
一般是數(shù)據(jù)線的問題(是不是USB轉(zhuǎn)232的,如果是,長時(shí)間測(cè)試一定要用上100元/條的那種線)
首先:
textbox里沒有顯示,是因?yàn)镾erialPort1和TextBox2不是同一線程創(chuàng)建的,需要跨線程操作。需要用到委托,這樣才能顯示出來。
其次:
我覺得用串口的接收數(shù)據(jù)事件更好一些。
下面代碼供參考:
'----------------------
'串口接收數(shù)據(jù)事件,其實(shí)比用定時(shí)器更好,
'觸發(fā)事件的條件可以自己在form_load中設(shè)置ReceivedBytesThreshold屬性數(shù)值,默認(rèn)為ReceivedBytesThreshold=1
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Dim strRecvData As String = ""
strRecvData = SerialPort1.ReadExisting
Call disPlayComData(strRecvData)
End Sub
Delegate Sub callback(ByVal strT As String) '定義委托
Sub showString(ByVal comdata As String) '顯示結(jié)果
Me.TextBox1.Text = "結(jié)果:" comdata
End Sub
Sub disPlayComData(ByVal strTmp As String) '判定是否為跨線程
If Me.TextBox1.InvokeRequired Then
Dim d As New callback(AddressOf showString)
Me.Invoke(d, New Object() {strTmp})
Else
Me.TextBox1.Text = strTmp
End If
End Sub
不知道你是不是用51單片機(jī)往串口發(fā)數(shù)據(jù),是的話那是因?yàn)?1的sbuf最多存放8個(gè)字節(jié),所以你發(fā)12個(gè)字節(jié)會(huì)分成兩次發(fā)完。還有在接收的時(shí)候最好定義好通信協(xié)議,比如加一個(gè)偵頭,一個(gè)偵尾,通過這兩個(gè)字節(jié)的內(nèi)容來接收數(shù)據(jù)。
老兄,提問還是給點(diǎn)懸賞分嘛,不要吝嗇哪點(diǎn)分,知識(shí)是無價(jià)的,你給得越多,回答你的人才會(huì)越多。
不是很明白你的題意
strHex = strHex + [String].Format("{0:X2} "
這里的意思是把每個(gè)字節(jié)數(shù)據(jù)轉(zhuǎn)換成了十六進(jìn)制,每個(gè)字節(jié)占兩個(gè)字符
如果你串口收到的4個(gè)字節(jié)數(shù)據(jù):43,27,56,200
那么你的結(jié)果是:2B1B38C8
即receivebytes.Text="2B1B38C8"
不足兩位的補(bǔ)0
如果你串口收到的4個(gè)字節(jié)數(shù)據(jù):3,27,56,200
那么你的結(jié)果是:031B38C8
即receivebytes.Text="031B38C8"