国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
VB6.0環(huán)境下利用Mscomm控件實現(xiàn)串行通信

VB6.0環(huán)境下利用Mscomm控件實現(xiàn)串行通信

: 本文簡要介紹了VB6.0Mscomm通信控件的屬性和使用方法,并結合具體實例給出了基本的通信程序。
主題詞:串行通信Visual Basic Mscomm .vbx控件

Abstract: This paper briefly introduces the principle andmethod of Mscomm object of Visual basic 6.0, and with a real examplebasic program codes are given.
Key WordsSerial Communication; Visual Basic; Mscomm .vbxcontrol component

隨著計算機技術的飛速發(fā)展及其廣泛應用,遠程控制以及數(shù)據(jù)采集系統(tǒng)多采用上位機和下位機的主從工作方式,由于串行通信具有高效可靠、價格便宜,遵循統(tǒng)一的標準等特點,因而成為主要的通信手段。微機的分析處理能力較強,有很好的人機界面和大容量的多種存儲方式,所以上位機一般采用微機。而單片機具有價格低,功能強,抗干擾能力好,溫限寬和面向控制等特點,所以下位機采用單片機來構成主從式多機工作模式。在需要對采集的數(shù)據(jù)進行分析處理或在遠程需要對控制對象的控制過程進行統(tǒng)計或有條件控制時,采用數(shù)據(jù)庫訪問技術能有效地解決這類問題。
VisualBasic 6.0
以其強大的功能、使用簡單、能在短時間內開發(fā)出高效的通信程序而成為Windows系統(tǒng)開發(fā)的主要編程語言。首先表現(xiàn)在VB可直接使用戶自定義控件VBXOCX文件;其次表現(xiàn)在VB可通過調用動態(tài)鏈接庫(DLL,dynamic linklibrary)來加快應用程序關鍵部分的執(zhí)行速度。利用VB提供的這些功能可方便地完成程序設計,如串行編程等,本文將介紹VB6.0通信控件Mscomm.vbx及其編程方法,并結合實例給出計算機與單片機進行數(shù)據(jù)通信的基本程序。
1 VB6.0
實現(xiàn)串行通信方法
VB
提供的通信控件Mscomm32.ocx,使用前只需從Project菜單下的Components中選擇Microsoft Comm Control6.0Mscomm32.ocx控件調入工具框中即可使用。利用該控件可對串行通信的數(shù)據(jù)發(fā)送和接收進行設置,還可對串口狀態(tài)及串行通信的信息格式和協(xié)議進行設置。在通信過程中可以通過觸發(fā)OnComm事件來追蹤、處理通信和錯誤事件的發(fā)生。由于每個通信控件對應一個串口,如果要訪問多個通信口,則要設計多個通信控件。
1通信方式
(1) 事件驅動方式 它是一種功能很強的處理串行通信問題的方法,在實際工作中,往往要處理許多通信中的相關事件,可通過對OnComm屬性值進行編程來處理,它也包括檢測和處理通信錯誤等方面的問題,CommEvent值返回最近的通信事件或錯誤的數(shù)字代碼。
(2) 查詢方式 在每個重要的程序功能之后檢查CommEvent屬性值來檢測事件和通信錯誤。這種方式常用于應用程序較簡單和相對獨立的應用程序設計中。
通信控件的基本屬性
為支持串行通信的實現(xiàn),VB6.0Mscomm控件提供了眾多的串行通信屬性,主要有:
CommPort
:設置和返回PC機串行端口號;
Settings
:初始化傳輸波特率、奇偶校驗位、數(shù)據(jù)位寬度和停止位寬度;
Input
:從輸入緩沖區(qū)中讀取數(shù)據(jù);
InputLen
:輸入緩沖區(qū)數(shù)據(jù)長度;
InputMode
:輸入模式,ASCII字符或二進制數(shù)據(jù);
Output
:將數(shù)據(jù)寫入輸出緩沖區(qū);
InBufferSize
:設置并返回接收緩沖區(qū)的字節(jié)數(shù);
OutBufferSize
:設置并返回輸出緩沖區(qū)的字節(jié)數(shù);
PortOpen
:布爾型,用于打開或關閉串行通信端口;
OnComm
:在發(fā)生通訊事件或錯誤時,將觸發(fā)OnComm事件,CommEvent屬性值將被改變;
Rthreshold
:引發(fā)接收事件的字節(jié)數(shù),為0時不引發(fā)接收事件;
Sthreshold
:引發(fā)發(fā)送事件的字節(jié)數(shù),為0時不引發(fā)發(fā)送事件;
…… ……
2
實例
本例主要介紹以MCS-51系列單片機為基礎的智能化儀表與微機的數(shù)據(jù)通信軟件的設計方法。系統(tǒng)主站為一臺微機,子站為16個以單片機為主并利用串口可收發(fā)數(shù)據(jù)的智能儀器組成,采用RS-232通信標準的半雙工通信模式。主站與子站之間為總線型網絡結構,以主站輪詢子站的方式進行數(shù)據(jù)通信。由于16個子站與主站的同一串口連接,為了避免爭奪通信權現(xiàn)象,通信時,由上位機首先發(fā)一地址幀(1),建立連接,接著發(fā)出數(shù)據(jù)幀(0),下位機在接收到上位機發(fā)來的數(shù)據(jù)后,進行糾錯后,回發(fā)數(shù)據(jù)(0),如果在規(guī)定的時間內上位機收不到應答數(shù)據(jù),即認為本次通信失敗。
在系統(tǒng)軟件窗體(Form)中加入一個通信控件(Mscomm)和二個定時器控件(Timer)。通信控件用于發(fā)送和接收數(shù)據(jù),定時器控件(Timer1)用于控制主站定時向每個子站發(fā)送下行命令,定時器控件(Timer2)用于主站接收子站數(shù)據(jù)超時控制。
1
控件的初始化
在窗體事件中對Mscomm的一些屬性進行設置
Mscomm.Commport=2 '
利用串口COM2進行通訊
Mscomm.InputLen=0 '
讀取接收緩沖區(qū)的所有字符
Mscomm.OutBuffersize=1024 '
設置發(fā)送緩沖區(qū)為512字節(jié)
Mscomm.InBufferSize=1024 '
設置接收緩沖區(qū)為2048字節(jié)
Mscomm.OutBufferCount=0 '
清除發(fā)送緩沖區(qū)
Mscomm.InBufferCount=0 '
清除接收緩沖區(qū)
Mscomm.InputMode=comInputModeBinary '
數(shù)據(jù)傳輸設置為二進制格式
Mscomm.Rthreshold=Receive_byte '
設置為主站每次接收Receive_Byte字節(jié),
'
可觸發(fā)On_Comm
Mscomm.PortOpen=True'
打開通信口COM2
Timer1.Inteval=2000'
設置2秒發(fā)送定時時間間隔
Timer2.Enabled=False '
在發(fā)送下行命令后啟動Timer2超時定時
'
數(shù)據(jù)發(fā)送尚未開始
Mscomm_send=False'
下行命令傳輸尚未開始
Mscomm_Receive=False'
接收數(shù)據(jù)尚未開始
2
數(shù)據(jù)的發(fā)送和接收
MSComm
控件支持以文本和二進制格式傳輸數(shù)據(jù),由于下位機為單片機,處理二進制數(shù)據(jù)方便快速,因此本例以二進制格式發(fā)送和接收數(shù)據(jù)。為此,先定義三個用來存放發(fā)送和接收數(shù)據(jù)的Byte類型數(shù)組OutAa(2),OutBb(n),InAa()n依所發(fā)數(shù)據(jù)長度而定),還要定義三個用來發(fā)送和接收數(shù)據(jù)的Variant類型變量OutA,OutB,InA。在接收數(shù)據(jù)時采用事件驅動法,當接收緩沖區(qū)有RTHreshold個數(shù)據(jù)時,CommEvent屬性被置為comEvReceive,并觸發(fā)OnComm事件,因此,RTHreshold的值即為要接收的數(shù)據(jù)。如果在規(guī)定時間內上位機得不到應答信息,將觸發(fā)時鐘控件的定時事件報錯。
1 數(shù)據(jù)發(fā)送程序
Mscomm.RTSEnable=False '
置為發(fā)送狀態(tài)
Mscomm .Setting="9600,m,8,1" '
設置波特率、校驗位(1)、數(shù)據(jù)位、停止位
Mscomm .OutBufferCount=0 '
清除發(fā)送緩沖區(qū)
OutA=OutAa '
Mscomm .Output=OutA '
發(fā)送地址幀數(shù)據(jù)
Do 
DoEAvents '
轉交控制權
Loop Until Mscomm .OutBufferCount=0 '
發(fā)送緩沖區(qū)清空
Mscomm .Setting="9600,s,8,1" '
設置校驗位(0
OutB=OutBb'
Mscomm .Output=OutB '
發(fā)送數(shù)據(jù)
Do
DoEvents '
轉交控制權
Loop Until Mscomm .OutBufferCount=0 '
Mscomm .InBufferCount=0 '
清除接收緩沖區(qū) 
Mscomm .RTHreshold=8 '
所要接收的數(shù)據(jù)長度
Mscomm .RTSEnabled=True '
轉為接收狀態(tài)
Timer.Enabled=True '
啟動定時器
2)數(shù)據(jù)接收程序
Sub Mscomm_OnComm()
Select Case Mscomm .CommEvent
CasecomEventBreak
Case comEventCDTO
Case comEventCTSTO
CasecomEventDSRTO
Case comEventFrame
Case comEventOverrun
CasecomEventRxOver
Case comEventRxParity
Case comEventTxFull
CasecomEventDCB
Case comEvCD
Case comEvCTS
Case comEvDSR
CasecomEvRing
Case comEvEOF
Case comEvReceive
InA=Mscomm.Input
InAa=InA
Mscomm.PortOpen=False
Timer.Enabled=False
Call process
CasecomEvSend
End Select
End Sub
Private Sub Timer.Timer()
Timer.Enabled=False
Mscomm.PortOpen=False
MsgBox "
超時!通信失敗!"
End Sub
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
基于PC機的DNC傳輸軟件的開發(fā)--中國自動化網文庫中心
RS232接口與單片機串行通信程序設計
通訊串口:VB/C++/C#串口通信源代碼+詳細注釋用的是axMSComm控件,通信方式...
利用VB實現(xiàn)PC機與多單片機通訊
用VC 6.0實現(xiàn)串行通信的三種方法
VC++.NET和VC++6.0串行通信控件的使用區(qū)別(精華)
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服