使用委托方式處理:
創(chuàng)新互聯(lián)建站10多年成都企業(yè)網(wǎng)站定制服務(wù);為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì)及高端網(wǎng)站定制服務(wù),成都企業(yè)網(wǎng)站定制及推廣,對(duì)石牌坊等多個(gè)方面擁有豐富設(shè)計(jì)經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。
Public?Class?Form1
Dim?mSTR?As?String
Dim?strData?As?String
Dim?strDat?As?String
Dim?mRecvByte()?As?Byte
Dim?Hexsj?As?String
Dim?form2?As?Form
Private?Sub?SerialPort1_DataReceived(ByVal?sender?As?Object,?ByVal?e?As?System.IO.Ports.SerialDataReceivedEventArgs)?Handles?SerialPort1.DataReceived
Dim?mSize?As?Integer?=?Me.SerialPort1.BytesToRead
ReDim?mRecvByte(mSize?-?1)
SerialPort1.Read(mRecvByte,?0,?mSize)
BeginInvoke(New?EventHandler(AddressOf?ONMLoadA),?SerialPort1.BytesToRead())?'使用委托方式顯示接收到的字符串
End?Sub
Sub?ONMLoadA(ByVal?sender?As?System.Object,?ByVal?e?As?System.EventArgs)?'委托
strDat?=?""
TextBox1.Text?=?""
Dim?i?As?Integer
For?i?=?0?To?UBound(mRecvByte)?'mSize?-?1
strData?=?strData??IIf(mRecvByte(i)??15,?Hex(mRecvByte(i)),?"0"??Hex(mRecvByte(i)))??"?"
Next
Dim?sj?As?Byte
For?i?=?1?To?Len(strData)?Step?3?'處理為ASCII字符
sj?=?Val("H"??Mid(strData,?i,?2))
If?sj??32?Or?sj??128?Then?'當(dāng)接收字節(jié)中有Chr(0)時(shí),其后字符被切割
strDat?=?strDat??"."
Else
strDat?=?strDat??Chr(sj)
End?If
Next
TextBox1.Text?=?strDat?'顯示字符
TextBox2.Text?=?strData?'顯示為16進(jìn)制
TextBox3.Text?=?Len(strData)?/?3
End?Sub
對(duì)同一個(gè)串口的操作應(yīng)該放在單個(gè)線程里,你的程序應(yīng)該將串口接收和串口關(guān)閉的執(zhí)行都放在一個(gè)線程里進(jìn)行,這樣在接收數(shù)據(jù)的間隙就可以正常執(zhí)行close動(dòng)作。而不會(huì)造成兩個(gè)線程都在操作串口。
你定義的委托需要帶參數(shù)才行,DataReceived事件中沒有接收數(shù)據(jù)代碼,下面的代碼經(jīng)測(cè)試可用
Delegate Sub SetTextCallback(ByVal InputString As String)
Private Sub ShowString(ByVal comData As String)
txt_Rect.Text += comData '將收到的數(shù)據(jù)入接收文字框中
txt_Rect.SelectionStart = txt_Rect.Text.Length
txt_Rect.ScrollToCaret()
End Sub
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Dim inData As String = SerialPort1.ReadExisting
Dim d As New SetTextCallback(AddressOf ShowString)
BeginInvoke(d, inData)
End Sub
0x3F表示字符"?"
估計(jì)是你的發(fā)送指令不正確,設(shè)備返回你發(fā)送的指令后面加''?""
這么跟你說(shuō)吧,條碼掃描器就相當(dāng)于自動(dòng)打字的鍵盤一樣,會(huì)把掃描到的條碼自動(dòng)轉(zhuǎn)換為數(shù)字然后發(fā)送到電腦中。你打開記事本,然后掃描一些條碼試試就知道了。
你的條碼掃描器的說(shuō)明書應(yīng)該還有各種設(shè)置方法的說(shuō)明的,可以給掃描器增添各種功能,比如在條碼數(shù)字的后面增加一個(gè)回車鍵,這在編程中比較有用。
你可以預(yù)先約定一個(gè)截止附,讀取的字節(jié)統(tǒng)統(tǒng)放到緩存區(qū)里,直到讀到截止附再處理、顯示。
網(wǎng)頁(yè)題目:串口條碼槍vb.net 串口條碼槍掃不出碼
分享路徑:http://jinyejixie.com/article2/dosecoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、定制開發(fā)、云服務(wù)器、服務(wù)器托管、網(wǎng)站營(yíng)銷、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容