<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 測試測量 > 設(shè)計應(yīng)用 > 使用MSCOMM32控件編寫串口程序

          使用MSCOMM32控件編寫串口程序

          作者: 時間:2017-01-09 來源:網(wǎng)絡(luò) 收藏

          本文引用地址:http://www.ex-cimer.com/article/201701/337119.htm

          在此基礎(chǔ)上,我們看一個例子:

          下面兩張圖 是一個 利用MsCom進(jìn)行串口通訊(中斷方式)的程序框圖和回調(diào)VI的程序框圖





          使用RTThrsehold屬性設(shè)置觸發(fā)接收中斷事件的觸發(fā)條件,本程序設(shè)置為1,當(dāng)緩沖器接收到一個字符時,就會發(fā)生中斷事件——oncomm事件中斷,很多條件都可以產(chǎn)生oncomm事件,區(qū)分產(chǎn)生中斷的原因有Comevent的屬性值來確定,當(dāng)conevent為2時,表示是由于接收到字符產(chǎn)生的中斷,由此進(jìn)入接受中斷處理程序。

          而中斷處理程序,接收到的數(shù)據(jù)是變體數(shù)據(jù),轉(zhuǎn)換為數(shù)組型數(shù)據(jù),發(fā)送數(shù)組中,最后送到返回變量中,供顯示和繪制實時圖使用。

          commevent的參數(shù) 對比表!

          根據(jù)應(yīng)用程序的用途和功能,在連接到其它設(shè)備過程中,以及接收或發(fā)送數(shù)據(jù)過程中,可能需要監(jiān)視并響應(yīng)一些事件和錯誤。
          可以使用OnComm事件和CommEvent屬性捕捉并檢查通訊事件和錯誤的值。
          在發(fā)生通訊事件或錯誤時,將觸發(fā)OnComm事件,CommEvent屬性的值將被改變。因此,在發(fā)生OnComm事件的時候,如果有必要,可以檢查CommEvent屬性的值。由于通訊(特別是通過電話線的通訊)是不可預(yù)料的,捕捉這些事件和錯誤將有助于使應(yīng)用程序?qū)@些情況作出相應(yīng)的反應(yīng)。
          下表列出了可能觸發(fā)OnComm事件的通訊事件。對應(yīng)的值將在發(fā)生事件時被寫入CommEvent屬性。

          常數(shù)

          描述

          ComEvSend

          1

          發(fā)送緩沖區(qū)中的字符數(shù)少于SThreshold。

          ComEvReceive

          2

          接收到Rthreshold個字符。在使用Input屬性移去接收緩沖區(qū)中的數(shù)據(jù)之前,該事件將持續(xù)產(chǎn)生。

          ComEvCTS

          3

          CTS信號發(fā)生變化。

          ComEvDSR

          4

          DSR信號發(fā)生變化。該事件僅在DSR由1變?yōu)?時觸發(fā)。

          ComEvCD

          5

          CD信號發(fā)生變化。

          ComEvRing

          6

          檢測到電話振鈴。某些UART(通用異步收發(fā)器)可能不支持本事件。

          ComEvEOF

          7

          收到文件結(jié)束符(ASCII字符26)。

          下列錯誤同樣會觸發(fā)OnComm事件,并且在CommEvent屬性中寫入相應(yīng)的值。

           

          設(shè)置值

          描述

          ComEventBreak

          1001

          收到Break信號。

          ComEventFrame

          1004

          幀錯誤。硬件檢測到幀錯誤。

          ComEventOverrun

          1006

          端口超限。在下一個字符到達(dá)端口之前,前一字符還沒有從硬件中讀走,因而丟失。

          ComEventRxOver

          1008

          接收緩沖區(qū)溢出。接收緩沖區(qū)已沒有空間。

          ComEventRxParity

          1009

          奇偶校驗錯誤。硬件檢測到奇偶校驗錯誤。

          comEventTxFull

          1010

          發(fā)送緩沖區(qū)滿。在試圖將字符傳入發(fā)送緩沖區(qū)時,該緩沖區(qū)已滿。

          ComEventDCB

          1011

          在為端口獲取設(shè)備控制塊(DCB)時,發(fā)生不可預(yù)料的錯誤。



          另外: 需要注意的是 給output屬性賦值輸出時,有兩種可用的形式:1是字符串 2是字節(jié)型數(shù)值 數(shù)組,就是占一個字節(jié)的數(shù)值組成的數(shù)組。然后轉(zhuǎn)化為變體數(shù)據(jù)類型。

          如下圖所示:


          U8類型數(shù)值的數(shù)組。

          ————————————————————————————————————————————————

          關(guān)于RTThrsehold 和 inputlen的設(shè)置,我一直搞不明白,所以在實際應(yīng)用中出現(xiàn)過這樣那樣的問題。

          例如 接收到的數(shù)據(jù)遠(yuǎn)遠(yuǎn)小于發(fā)送的數(shù)據(jù)了,接收到的數(shù)據(jù)出現(xiàn)亂碼了,等等。

          經(jīng)過反復(fù)的實驗

          我發(fā)現(xiàn) 如果將inputlen設(shè)置的過小(如1),同時呢,發(fā)送的波特率過高,就會出現(xiàn)接受到的數(shù)據(jù)小于實際發(fā)送出的數(shù)據(jù)。

          因為將RTHrsehold設(shè)置為1的時候,每收到一個字符就會產(chǎn)生一次中斷,這次中斷會提取 inputlen個數(shù)的字符。

          如果波特率過高,就會導(dǎo)致,中斷不能夠及時發(fā)生(每次中斷只讀取一個字符,而產(chǎn)生的中斷數(shù)目小于實際發(fā)送的字符數(shù)),很多數(shù)據(jù)到最后積累在緩沖區(qū)內(nèi)。

          (這是我通過程序最后讀取緩沖區(qū)的數(shù)據(jù)大小進(jìn)行的判斷)

          因此必要時,可以將RTHrsehold和inputlen的值都設(shè)大一些,才能夠正常。(使得中斷處理函數(shù)的時間遠(yuǎn)遠(yuǎn)小于產(chǎn)生中斷的時間即可)



          上一頁 1 2 下一頁

          關(guān)鍵詞: MSCOMM32控件串口程

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();