• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    使用VB開發Windows環境下的串行通信程序

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 24次 | 進入軟件測試論壇討論

    領測軟件測試網 隨著Windows在國內的普及,特別是Windows95的推出,越來越多的微機用戶轉向了Windows操作系統。不過Windows應用軟件的開發對于一般工程技術領域的技術人員來說并非易事,不但Windows的消息循環機制不易理解,而且要開發一個功能強、界面美觀的應用軟件,其編程和調試的工作量是非常大的。許多并非搞軟件出身的工程技術人員對Windows編程望而生畏。然而使用微軟的VisualBasic來開發這些方面的Windows應用軟件就十分方便,一般工程技術人員易于掌握,設計軟件界面非常方便,編程工作量相對較小,只需進行主要應用功能的編程和少量界面控制的編程。本文介紹了筆者使用VB在串行通信編程方面的一些收獲,由于在報刊雜志上對Windows下串行通信編程的介紹多為用MicrosoftC++或BorlandC++,故筆者愿意就VB在該方面的應用與大家探討。對于采用了RS-232接口進行串行通信的計算機測控系統軟件的開發,具有一定的參考價值。
    在該系統中使用了80C31單片機作為下位機采集慣性敏感部件的測量數據,經過一定的預處理后通過RS-232串行口將數據傳送給上位PC機。在PC機上Windows環境下運行檢測軟件,接受串行口傳來的數據,進行數據處理、顯示、存盤等。數據處理結果以表格形式打印輸出。

    在VB3.0中,有許多專業廠商提供用戶定制的控件(Customcontrol),這些控件以.VBX為后綴,其中MSCOMM.VBX即是用于串行通信的控件。對于VB3.0,啟動后該控件就包含于控件工具箱(toolbox)內,否則可以通過File|AddFile將該控件加入控件工具箱。然后就可以利用該控件進行串行通信的程序設計。

    下面舉一個簡單的例子,說明了如何進行串行通信的程序設計,該程序在Windows95環境下,使用VB3.0已經實現:

    1.先建立一個項目文件,其控件如下表所示:

    2.代碼如下:

    SubForm_Load()

    comm1.CommPort=1‘使用串行口1

    '波特率9600,偶校驗,8個數據位,1個停止位。

    comm1.Settings=“9600,E,8,1”

    當使用Comm1.Input時,每次從接收緩沖區取一個字節。

    comm1.InputLen=1

    timer1.interval=20‘定時器的中斷間隔為20ms,用于更新顯示時間。

    EndSub

    SubcmdComm_Click()

    Dimechoch%‘命令變量

    Staticmaxf01&,maxf02&,minf01&,minf02&‘最大值,最小值

    OnErrorResumeNext‘簡單的錯誤處理

    maxf01&=maxf02&=0‘初始化變量

    minf01&=32767

    minf02&=32767

    label2.Caption=comm1.Settings‘顯示串行口的設置。

    Ifcmdcomm.Caption=“通信”Then‘若當前命令按扭的提示為“通信”則開始發送和

    cmdcomm.Caption=“停止”‘接受數據,并將命令按扭提示改為“停止”,以

    cmdexit.Enabled=False‘允許停止通信。使退出命令在通信中失效。

    IfNotcomm1.PortOpenThen‘若串行口沒有打開,則打開串行口

    comm1.PortOpen=True

    EndIf

    Ifcomm1.PortOpenThen

    Ifecho.Text<>“”Then‘若命令輸入框不空,則將其轉換為十六進制數值

    echoch%=Val(“&H”+echo.Text)

    Else

    echoch%=&HF0‘否則確省命令為F0H

    EndIf

    comm1.Output=Chr(echoch%)‘向串行口寫入一字節命令,由WINDOWS

    EndIf‘動將命令發出

    label3.Caption=Hex(echoch%)‘顯示剛發出的命令

    DoWhilecomm1.PortOpen

    Ifcomm1.InBufferCount>0Then‘若comm1.InBufferCount>0表示接受緩沖

    ch$=comm1.Input‘區有數據,并讀出一個字符,

    IfAsc(ch$)=echoch%Then‘若與發出的命令相同,則退出當前循環

    ExitDo‘進入下一循環

    EndIf

    Else

    comm1.Output=Chr(echoch%)‘否則繼續向下位機發命令,通知下位機

    EndIf‘送數據

    dummy=DoEvents()‘讓系統處理其他消息

    Loop

    ‘下位機接受到正確的命令,并回發命令正確時,進入下面循環

    i=1

    DoWhilecomm1.PortOpen

    Ifcomm1.InBufferCount>5Then

    ch$=comm1.Input

    DoWhileAsc(ch$)<>echoch%‘以命令字節同步測試數據

    ch$=comm1.Input

    Loop

    ch1$=comm1.Input‘從WINDOWS串行數據接受緩沖區讀測試數據

    ch2$=comm1.Input

    ch3$=comm1.Input

    ch4$=comm1.Input

    newf01&=CLng(CLng(Asc(ch2$))*16*16+Asc(ch1$))‘合并為一個整數

    newf02&=CLng(CLng(Asc(ch4$))*16*16+Asc(ch3$))

    ifnewf01&>maxf01&Then‘判斷最大值,最小值

    maxf01&=newf01&

    EndIf

    Ifnewf01&<minf01&Then

    minf01&=newf01&

    EndIf

    Ifnewf02&>maxf02&Then

    maxf02&=newf02&

    EndIf

    Ifnewf02&<minf02&Then

    minf02&=newf02&

    EndIf

    labf01.Caption=Str(newf01&)‘顯示數據

    labf02.Caption=Str(newf02&)

    labmaxf01.Caption=Str(maxf01&)

    labminf01.Caption=Str(minf01&)

    labmaxf02.Caption=Str(maxf02&)

    labminf02.Caption=Str(minf02&)

    Else

    comm1.Output=Chr(echoch%)

    EndIf

    dummy=DoEvents()

    Loop

    Else‘在通訊過程中,按下cmdCOMM按鈕則停止通信,發出停止測試

    cmdcomm.Caption=“通信”‘命令,關閉串行口,使退出按鈕有效。

    comm1.Output=Chr(&H5F)

    comm1.PortOpen=False

    cmdexit.Enabled=True

    EndIf

    EndSub

    SubcmdExit_Click()

    Ifcomm1.PortOpenThen‘確認關閉串行口

    comm1.PortOpen=False

    EndIf

    End‘終止整個程序

    EndSub

    SubTimer1_Timer()‘更新顯示時間

    Iflabtime.Caption<>Time&Then

    labtime.Caption=Time$

    EndIf

    EndSub

    3.程序說明:

    a.上述程序的通信協議為:波特率9600,偶校驗,8個數據位,1個停止位。由上位機發送開始測試命令,下位機接收到命令后每隔500ms向上位機發送檢測到的數據。每次發送5個字節,第一個字節為下位機接受到的命令,第二三字節為16Byte的值,第四五字節為16Byte的值。上位機循環接受并處理和顯示數據;

    b.由于在控制軟件中,串行通訊發送和接受的數據多為十六進制,故在命令輸入時為十六進制數,在程序中通過echoch%=Val(“&H”+echo.Text)將輸入的echo.Text轉換為十六進制數,并賦給變量echoch%。而在通過串行口發送時comm1.Output要求接受字符型變量,故通過語句comm1.Output=Chr(echoch%)實現;

    c.接受數據時,每次要判斷第一個字節是否為發出的命令,只有是后面4個字節才為正確的數據,否則查看下一字節。通過設置COMM1.InputLen=1來實現每次從接受緩沖區內讀取一個字節;

    d.當退出程序時,一定要關閉串行口,通過comm1.PortOpen=False完成;

    e.如果需要上位機定時查詢下位機,可以將串行通訊在定時器Timer1-Timer事件中進行;

    f.要實現完善的功能,必須進一步改善程序,甚至要用到WindowsAPI、OLE等,上述程序只是一個簡單的例子;

    上面介紹了筆者在使用VB開發Windows環境下測控軟件的一點收獲,筆者使用上述原理開發了一個界面友好、功能全面、使用方便的衛星控制系統慣性敏感部件檢測軟件,實際使用效果良好,提高了工作效率,甚至實現了測試和數據處理的自動化。

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>