新聞中心
vb程序編寫模擬串口
這是典型的VB串口通信
公司主營業(yè)務:成都做網(wǎng)站、網(wǎng)站建設、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出商水免費做網(wǎng)站回饋大家。
你可以采用Mscomm控件實現(xiàn)串口通信時,首先添加一Mscomm控件到窗體中,通過菜單項“工程(P)→部件(O)”進入選擇窗口,在控件頁中選取“Microsoft?Comm?Control?6.0”?,此時工具窗口中出現(xiàn)Mscomm圖標,即可被使用。
需要注意的幾點是:
1.用mscomm控件進行通信,其波特率最高只能設為115200
2.利用MSCOMM控件可以發(fā)送和接收任何文件的類型。
3.接收文本文件和二進制文件有一定的區(qū)別,接收二進制文件時用scomm1.Input讀入的變量需用Variant類型的變量,而文本文件可以用字符型變量,另外InputMode屬性應設置相應的文本方式或二進制方式
4.接收文本無大小限制。
5.當連續(xù)存數(shù)據(jù)時記錄號是自動加的,但當文件關閉后再次打開時,默認的記錄號為1,存儲文件不完整的原因可能在此。接收到文件頭識別字符時打開文件,接收中途不要關閉文件,直到接收到文件結束符(Mscomm1.EOFEnable事件發(fā)生)才能關閉文件。
我手頭有一個完整的VB串口通信源碼,對你的問題很有幫助
若你需要,發(fā)郵件至donook@qq.com
我會盡快發(fā)給你
如果滿意,加點分哦,資料都來之不易的呵呵
vb串口通信程序實例
我也是自己摸索開發(fā)出來的每一款VBtoCOM通訊,有具體的思路如下:
給你推薦一個工具“com串口測試工具 ComTone V1.0 中文綠色版”
1、打開你的噪音計的測試軟件,調(diào)整好串口號、通訊頻率等等,我用溫度計舉例說明。
開始查詢后有返回數(shù)值,這個Receive:就是返回的數(shù)值000304012200004b05,
打開串口監(jiān)視精靈,監(jiān)視軟件的com口事件:
這里面的Write是測試軟件發(fā)出的查詢指令,read是設備返回的數(shù)據(jù)指令
Private?Sub?Command1_Click()?'發(fā)送指令
If?Not?MSComm1.PortOpen?Then
MSComm1.CommPort?=?7?'串口為7
MSComm1.Settings?=?"9600,n,8,1"
MSComm1.InBufferCount?=?0?'清除接收緩沖區(qū)
MSComm1.OutBufferCount?=?0?'清除發(fā)送緩沖區(qū)
MSComm1.InputMode?=?comInputModeBinary?'二進制接收
MSComm1.InputLen?=?0?'讀取接收緩沖區(qū)的所有字符
MSComm1.PortOpen?=?True??'打開串口
MSComm1.RTSEnable?=?False?'置為發(fā)送狀態(tài)
End?If
Dim?pu()?As?Byte
Dim?strdata??As?String
Dim?crc_js()?As?Byte
ReDim?pu(7)??'這個數(shù)組是8位的查詢指令
pu(0)?=?"H00"?'溫度計地址
pu(1)?=?"H03"?'查詢指令
pu(2)?=?"H00"?'2、3為溫度計地址
pu(3)?=?"H00"?'2、3為溫度計地址
pu(4)?=?"H00"?'4、5為讀取寄存器長度
pu(5)?=?"H02"?'4、5為讀取寄存器長度
pu(6)?=?"HC5"?'6、7為CRC校驗碼?因為我們不知道設備的CRC校驗規(guī)則所以用測試軟件產(chǎn)生的校驗碼
pu(7)?=?"HDA"?'6、7為CRC校驗碼
MSComm1.Output?=?pu
'不做任何事情,僅僅允許其它應用程序處理它們的事件。
DoEvents
MSComm1.InBufferCount?=?0?'清除接收緩沖區(qū)
MSComm1.RThreshold?=?9?'所要接收的數(shù)據(jù)長度,我們通過COM檢測精靈看到了回傳數(shù)據(jù)一共是9字節(jié)
MSComm1.RTSEnable?=?True?'轉為接收狀態(tài)
End?Sub
Private?Sub?Command2_Click()
Timer1.Enabled?=?False
End?Sub
Private?Sub?Form_Unload(Cancel?As?Integer)
If?MSComm1.PortOpen?Then
MSComm1.PortOpen?=?False??'關閉串口
End?If
Timer1.Enabled?=?False
End?Sub
Private?Sub?MSComm1_OnComm()?'COM事件
Dim?PA()?As?Byte
Dim?PB?As?String
Select?Case?MSComm1.CommEvent
Case?comEvReceive
MSComm1.InputLen?=?0?'讀取接收緩沖區(qū)的所有字符
PB?=?MSComm1.Input
PA()?=?PB
For?i?=?0?To?UBound(PA())
'Print?"PA("??i??")";?PA(i)
If?Len(Hex(PA(i)))?=?1?Then
strdata?=?strdata??"0"??Hex(PA(i))
Else
strdata?=?strdata??Hex(PA(i))
End?If
Next
'回傳的數(shù)據(jù)串:000304012600000AC4,這9字節(jié)根據(jù)通訊協(xié)議我們進行拆分
'00為協(xié)議內(nèi)回傳機號,03為讀命令,04為返回的數(shù)據(jù)長度?0126?為我要的溫度數(shù)據(jù)為十六進制表達,下面我進行數(shù)據(jù)處理
wd?=?CLng("H"??Left(Right(strdata,?12),?4))?/?10??"℃"???'根據(jù)通訊協(xié)議換算成溫度
Text1?=?Text1??vbCrLf??strdata??"??"??wd
strdata?=?""
MSComm1.PortOpen?=?False??'關閉串口
End?Select
End?Sub
Private?Sub?Timer1_Timer()
Call?Command1_Click
End?Sub
這是我的測試結果。
下面是通訊協(xié)議
這個是我的軟件用檢測精靈檢測的結果
vb.NET中用mscomm控件編寫串口通信軟件數(shù)據(jù)無法接收
.net中不用mscomm 而改用 searport
AxMSComm1.Input 只能一次,會把輸入緩沖區(qū)的內(nèi)容全都讀出來并清空
如果沒有產(chǎn)生Oncomm事件,你可以把輸入經(jīng)部區(qū)的大小改一下改成1就行了
網(wǎng)站欄目:vb.net編寫串口程序 vb打開串口
當前網(wǎng)址:http://www.ef60e0e.cn/article/doshidd.html