串口通訊不需要多線程吧
成都創(chuàng)新互聯(lián)公司服務(wù)項目包括井岡山網(wǎng)站建設(shè)、井岡山網(wǎng)站制作、井岡山網(wǎng)頁制作以及井岡山網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,井岡山網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到井岡山省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
如果你執(zhí)意要學(xué)
分開學(xué) 這個是兩個不同的概念
串口通訊和多線程分開學(xué)
不知道你是不是用51單片機往串口發(fā)數(shù)據(jù),是的話那是因為51的SBUF最多存放8個字節(jié),所以你發(fā)12個字節(jié)會分成兩次發(fā)完。還有在接收的時候最好定義好通信協(xié)議,比如加一個偵頭,一個偵尾,通過這兩個字節(jié)的內(nèi)容來接收數(shù)據(jù)。
老兄,提問還是給點懸賞分嘛,不要吝嗇哪點分,知識是無價的,你給得越多,回答你的人才會越多。
不是很明白你的題意
strHex = strHex + [String].Format("{0:X2} "
這里的意思是把每個字節(jié)數(shù)據(jù)轉(zhuǎn)換成了十六進制,每個字節(jié)占兩個字符
如果你串口收到的4個字節(jié)數(shù)據(jù):43,27,56,200
那么你的結(jié)果是:2B1B38C8
即receivebytes.Text="2B1B38C8"
不足兩位的補0
如果你串口收到的4個字節(jié)數(shù)據(jù):3,27,56,200
那么你的結(jié)果是:031B38C8
即receivebytes.Text="031B38C8"
應(yīng)該是你的轉(zhuǎn)換格式不正確,下面代碼就是將文本框中以一個空格隔開的十六進制轉(zhuǎn)為字節(jié)的代碼,文本框中數(shù)字格式為:01 02 03
Dim TestArray() As String = Split(TextBox1.Text)
Dim hexBytes() As Byte
ReDim hexBytes(TestArray.Length - 1)
Dim i As Integer
For i = 0 To TestArray.Length - 1
hexBytes(i) = Val("h" TestArray(i))
Next
SerialPort.Write(hexBytes, 0, hexBytes.Length)
如果有問題可以再聯(lián)系。
上面的代碼看不出問題,如果初始化串口控件時已經(jīng)注冊了AxMSComm1_OnComm,有數(shù)據(jù)接收應(yīng)該能觸發(fā),至于為什么沒有觸發(fā),要看看你的接收方是否已經(jīng)收到你的發(fā)出指令,是否已經(jīng)有響應(yīng)數(shù)據(jù)回發(fā)。
建議分開調(diào)試,用一個通用的串口助手,如格西烽火串口助手之類的,分別調(diào)試你的上位機和下位機。格西烽火串口助手能輕松的定制如你上面的發(fā)送數(shù)據(jù)。
Imports System
Imports System.IO.Ports
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'獲取計算機有效串口
Dim ports As String() = SerialPort.GetPortNames() '必須用命名空間,用SerialPort,獲取計算機的有效串口
Dim port As String
For Each port In ports
portnamebox.Items.Add(port) '向combobox中添加項
Next port
'初始化界面