不會 是 參考 人家的 程序吧
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),解放企業(yè)網(wǎng)站建設(shè),解放品牌網(wǎng)站建設(shè),網(wǎng)站定制,解放網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,解放網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
變量 S 再哪里 定義?
把 這個(gè) Private s As String 加 Public Class Form1 之后 試試
Ok了,我 調(diào)試過
不知道你是不是用51單片機(jī)往串口發(fā)數(shù)據(jù),是的話那是因?yàn)?1的SBUF最多存放8個(gè)字節(jié),所以你發(fā)12個(gè)字節(jié)會分成兩次發(fā)完。還有在接收的時(shí)候最好定義好通信協(xié)議,比如加一個(gè)偵頭,一個(gè)偵尾,通過這兩個(gè)字節(jié)的內(nèi)容來接收數(shù)據(jù)。
老兄,提問還是給點(diǎn)懸賞分嘛,不要吝嗇哪點(diǎn)分,知識是無價(jià)的,你給得越多,回答你的人才會越多。
你可以預(yù)先約定一個(gè)截止附,讀取的字節(jié)統(tǒng)統(tǒng)放到緩存區(qū)里,直到讀到截止附再處理、顯示。
vb.net的話
For
Each
sp
As
String
In
My.Computer.Ports.SerialPortNames
cbxport.Items.Add(sp)
Next
vb6.0的話要調(diào)用API查看串口相關(guān)信息存在的注冊表。
HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM
通過讀注冊表的方法獲得串口數(shù)量,當(dāng)然也可以獲得串口號了。
Option
Explicit
Private
Declare
Function
RegOpenKey
Lib
"advapi32.dll
"
Alias
"RegOpenKeyA
"
(ByVal
hKey
As
Long,
ByVal
lpSubKey
As
String,
phkResult
As
Long)
As
Long
Private
Declare
Function
RegQueryInfoKey
Lib
"advapi32.dll
"
Alias
"RegQueryInfoKeyA
"
(ByVal
hKey
As
Long,
ByVal
lpClass
As
String,
lpcbClass
As
Long,
ByVal
lpReserved
As
Long,
lpcSubKeys
As
Long,
lpcbMaxSubKeyLen
As
Long,
lpcbMaxClassLen
As
Long,
lpcValues
As
Long,
lpcbMaxValueNameLen
As
Long,
lpcbMaxValueLen
As
Long,
lpcbSecurityDescriptor
As
Long,
lpftLastWriteTime
As
Long)
As
Long
Private
Const
HKEY_LOCAL_MACHINE
=
H80000002
'
獲得當(dāng)前系統(tǒng)的
COM
口的數(shù)量
Function
GetCOMCount()
As
Integer
Dim
ret
As
Long,
cntCOM
As
Long
RegOpenKey
HKEY_LOCAL_MACHINE,
"HARDWARE\DEVICEMAP\SERIALCOMM
",
ret
RegQueryInfoKey
ret,
"
",
0,
0,
0,
0,
0,
cntCOM,
0,
0,
0,
GetCOMCount
=
cntCOM
End
Function
Private
Sub
Command1_Click()
MsgBox
"您的機(jī)器有
"
GetCOMCount
"
個(gè)串口。
",
vbOKOnly,
"串口數(shù)量
"
End
Sub
合法性校驗(yàn)有很多方法,要視情況而定,比如說可以用正則表達(dá)式,如果是數(shù)字,除了正則表達(dá)式,也可以用諸如TryParse這種方法。
使用委托方式處理:
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
網(wǎng)站欄目:vb.net串口數(shù)據(jù)校驗(yàn) 串口通信校驗(yàn)
當(dāng)前鏈接:http://m.rwnh.cn/article22/hiiijc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、電子商務(wù)、企業(yè)建站、網(wǎng)站排名、面包屑導(dǎo)航、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)