欧美另类日韩中文色综合,天堂va亚洲va欧美va国产,www.av在线播放,大香视频伊人精品75,奇米777888,欧美日本道免费二区三区,中文字幕亚洲综久久2021

VisualBasic串口通信程序設(shè)計(jì) -電腦資料

電腦資料 時(shí)間:2019-01-01 我要投稿
【www.lotusphilosophies.com - 電腦資料】

   

    1mscomm.vbx通信控件描述

    mscomm.vbx通信控件可直接從vb的toolbox中加入窗體form,即可用其進(jìn)行通信,

VisualBasic串口通信程序設(shè)計(jì)

。若toolbox中無此控件,則用tools的customcontrols將mscomm.vbx從windows的system子目錄中加入vb的toolbox中。

    1.1通信方式

    mscomm.vbx有2種不同的方式來處理和解決各類通信軟件的開發(fā)和設(shè)計(jì)問題

    1、事件驅(qū)動(dòng)。它與c/c 寫windows軟件時(shí)的窗口回調(diào)函數(shù)類似,是1種功能強(qiáng)大的處理問題的方法。在實(shí)際工作中,往往要處理許多通信中的相關(guān)事件,例如:當(dāng)線路數(shù)據(jù)到達(dá)本端或cd線和rts信號(hào)線狀態(tài)發(fā)生變化時(shí),要求我們使用相應(yīng)的事件來跟蹤和處理,該控件是使用oncomm事件來實(shí)現(xiàn)的,它也包括檢測(cè)和處理通信錯(cuò)誤等方面的問題,commevent值返回最近的通信事件或錯(cuò)誤的數(shù)字代碼。通信控件詳細(xì)的錯(cuò)誤和事件舉例有:

    mscomm-er-break收到1個(gè)breaksignal

    mscomm-er-cdtocd信號(hào)超時(shí)

    ……

    mscomm-ev-cdcd信號(hào)改變

    ……

    2、查詢方式。由程序設(shè)計(jì)者負(fù)責(zé)讀取commevent的值并處理所發(fā)生的錯(cuò)誤或事件。通常簡(jiǎn)單的應(yīng)用程序設(shè)計(jì)可采用這種辦法。

    1.2通信控件的屬性

    利用通信控件編制通信程序,關(guān)鍵是準(zhǔn)確理解設(shè)置通信控件的屬性。mscomm.vbx提供了27個(gè)關(guān)于通信控件方面的屬性,例如:

    commport:設(shè)置或返回通信口編號(hào)。

    settings:設(shè)置或返回以字符串形式出現(xiàn)的數(shù)據(jù)通信格式:波特率、校驗(yàn)、數(shù)據(jù)位和停止位。

    portopen:設(shè)置或返回通信口狀態(tài)(包括打開和關(guān)閉1個(gè)通信口)

    ……

    3、實(shí)例

    本程序應(yīng)用背景為dcc95型靜電除塵器自動(dòng)監(jiān)控系統(tǒng)軟件,解決1個(gè)pc工控機(jī)(主站)與32個(gè)單片機(jī)(子站)之間的通信問題。主站與子站之間這總線式網(wǎng)絡(luò)結(jié)構(gòu),采用rs-485通信標(biāo)準(zhǔn),以問答方式進(jìn)行數(shù)據(jù)通信。由于32個(gè)子站與主站發(fā)送通信命令(下行命令),主站在接收子站發(fā)回的相應(yīng)回答命令(上行命令)后繼續(xù)發(fā)送下行命令的通信形式。根據(jù)系統(tǒng)功能的要求,主站需發(fā)送2種類型的命令:(1)同期命令,它由定時(shí)器觸發(fā)引起,每隔ls周期發(fā)送1次;(2)非周期性命令,它由操作者按動(dòng)相應(yīng)命令按鈕引起,非周期性發(fā)送。自動(dòng)監(jiān)控系統(tǒng)軟件安裝在主站上,而通信程序作為自動(dòng)監(jiān)控系統(tǒng)軟件的一部分也安裝在主站上。

    本文僅列出調(diào)試通信程序時(shí)進(jìn)行試驗(yàn)用的基本演示程序清單。試驗(yàn)時(shí),用1臺(tái)pc機(jī)作為主站,另一臺(tái)pc機(jī)模擬32個(gè)子站的工作,兩臺(tái)pc機(jī)之間采用rs232c串口通信。往主站的通信演示程序窗體(form)中加入1個(gè)通信控件、2個(gè)定時(shí)器控件和1個(gè)命令按鈕控件,通信控件(mscomm1)用于訪問串口,發(fā)送和接收數(shù)據(jù);periodic定時(shí)器控件(periodic)用于控制每秒由主站向各子站發(fā)送周期性命令;命令按鈕控件(nonperiodic-command)與nonperiodic定時(shí)器控件(nonperiodic)用于發(fā)送非周期性命令。數(shù)據(jù)傳送采用事件驅(qū)動(dòng)的通信方式,根據(jù)不同的發(fā)送命令設(shè)置rtreshlod屬性,從而引起oncomm事件以接收數(shù)據(jù)。

    2.1窗體各控件初始化程序

    設(shè)置通信串口工作參數(shù),設(shè)置periodic定時(shí)器的在斷間隔為ls,nonperiodic定時(shí)器的中斷間隔為0.5s。

    subform-load()

    mscomm1.commport=2'選用com2串行口

    mscomm1.settings="9600,n8,1"'波特率9600,無奇偶校驗(yàn)位,8位數(shù)據(jù)位1位停止位

    mscomm1.inputlen=0'input將讀取接收緩沖區(qū)的全部?jī)?nèi)容

    mscomm1.inbuffersize=1024'設(shè)置接收緩沖區(qū)的字節(jié)長(zhǎng)度

    mscomm1.portopen=true'打開通信口

    mscomm1.inbuffercount=0'清除發(fā)送緩沖區(qū)數(shù)據(jù)

    mscomm1.outbuffercount=0'清除接收緩沖區(qū)數(shù)據(jù)

    periodic.inteval=100'設(shè)置ls定時(shí)間隔,使遙測(cè)命令每隔ls發(fā)送1次

    nonperiodic.inteval=500'設(shè)置0.5s定時(shí)間隔,查詢命令按鈕是否處于激活狀態(tài)以確定是否發(fā)送周期性命令

    command-pressed=false'命令按鈕為未激活狀態(tài)

    during-periodic=false'周期性命令數(shù)據(jù)傳輸尚未開始

    during-nonperiodic=false'非周期性命令數(shù)據(jù)傳輸尚未開始

    endsub

    2.2非周期性命令發(fā)送程序

    根據(jù)命令按鈕狀態(tài)及周期性命令數(shù)據(jù)傳輸狀態(tài),在nonperiodic定時(shí)器的中斷程序中發(fā)送非周期性命令,

電腦資料

VisualBasic串口通信程序設(shè)計(jì)》(http://www.lotusphilosophies.com)。

    subnonperiodic-command-click()

    command-pressed=true'命令按鈕激活

    endsub

    subnonperiodic-timer()

    ifduring-periodic=trueorcommand-pressed=false

    thenexitsub'若周期性命令數(shù)據(jù)傳輸尚未結(jié)束或命令按鈕處于激活狀態(tài),則退出發(fā)送非周期性命令程序。

    command-pressed=false'命令按鈕恢復(fù)為未激活狀態(tài)

    callsenddata(nonperiodic-command)'發(fā)送非周期性命令

    mscomm1.rthreshold=r-nonperiodic-byte'發(fā)送非周期性命令后,設(shè)置rthreshold屬性,使主站接收所設(shè)定的字節(jié)數(shù)后引發(fā)oncomm事件

    endsub

    2.3periodic定時(shí)器程序

    在periodic定時(shí)器的中斷程序中發(fā)送周期性命令:

    subperiodic-timer()

    ifduring-nonperiodic=truethenexitsub'若非周期性命令數(shù)據(jù)傳輸尚未結(jié)束,則退出發(fā)送非周期性命令程序。

    during-periodic=true'設(shè)置周期性命令數(shù)據(jù)傳輸狀態(tài)為正在進(jìn)行中

    callsenddata(periodic-command)'發(fā)送周期性命令

    mscomm1.rthreshold=r-periodic-byte'發(fā)送周期性命令后,主站接收r-remot-edata-byte個(gè)字節(jié),可引發(fā)oncomm事件

    endsub

    2.4oncomm事件程序

    根據(jù)rthreshold屬性設(shè)置值,當(dāng)接收緩存區(qū)內(nèi)接收到相應(yīng)字節(jié)的字符時(shí),引發(fā)oncomm事件,在中斷程序中接收數(shù)據(jù)。

    submscomm1-oncomm()

    selectcasemscomm1.commevent'在此可插入處理各種不同錯(cuò)誤或事件的代碼

    casemscomm-ev-receive

    receivestring$=mscomm1.input

    selectcasemscomm1.rthreshold

    caser-periodic-byte'周期性命令的應(yīng)答數(shù)據(jù)

    calldisposedata(periodic-command)'處理接收數(shù)據(jù)

    duringperiodic=false'設(shè)置周期性命令數(shù)據(jù)傳輸狀態(tài)為結(jié)束

    caser-nonperiodic-byte'非周期性命令的應(yīng)答數(shù)據(jù)

    calldisposedata(nonperiodic-command)'處理接收數(shù)據(jù)

    during-nonperiodic=false'設(shè)置非周期性命令數(shù)據(jù)傳輸狀態(tài)為結(jié)束

    endselect

    endselect

    endsub

    隨著vb版本的不斷升級(jí),vb將成為最快速、易用、強(qiáng)勁的應(yīng)用開發(fā)工具,是企業(yè)級(jí)客戶/服務(wù)器應(yīng)用軟件開發(fā)的首選工具之一。

最新文章