寫這一篇串列埠通訊基礎的契機是最近剛剛完成乙個溫箱的儀器控制程式,labview通過串列埠與溫箱微控制器通訊,我打算將過程中遇到的一些問題和收穫列在這裡方便有需求的網友比對、尋找答案。
學labview時間並不久,這個儀器控制程式也比較簡單,行文中若有錯誤還望指出。
labview串列埠通訊基礎
利用labview實現串列埠通訊需要進行以下四部分準備:
1) 必要的硬體裝置;
2)串列埠通訊相關基礎知識;
3)通訊協議;
4)基本的程式編寫能力。
一、必要的硬體裝置
在我的專案中,下位機的資料傳輸用的rs485,上位機是我的膝上型電腦,所以我的硬體裝置只有三件:膝上型電腦、下位機和一根usb轉rs485的轉換線。
二、串列埠通訊相關基礎知識
1. 並行通訊和序列通訊
計算機通訊可分為兩大類:並行通訊和序列通訊。
並行通訊通常是將資料位元組的各位用多條資料線同時進行傳送,如下圖所示。
並行通訊的特點是:控制簡單、傳輸速度快。由於傳輸線較多,長距離傳送時成本高且接收方的各位同時接收存在困難。
序列通訊是將資料位元組分成一位一位的形式在一條傳輸線上逐個地傳送,如下圖。
序列通訊的特點是:傳輸線少,長距離傳送時成本低,且可以利用**網等現成的裝置。但資料的傳送控制比並行通訊複雜。
串列埠通訊即序列通訊。
2. 非同步通訊和同步通訊
本文主要涉及非同步通訊。
非同步通訊是以字元幀為單位進行傳輸,字元幀與字元幀之間的時間間隔是任意的,但每個字元中的各位是以固定的時間傳送的,即字元之間是非同步的,但同乙個字元內的各位是同步的。
為了實現非同步傳輸字元的同步,採用的辦法是使傳送的每乙個字元都以起始位「0」開始,以停止位「1」結束。這樣,傳送的每乙個字元都用起始位來進行收發雙方的同步。非同步通訊的資料格式如下圖所示。
由圖可見,非同步通訊的每幀資料由4部分組成:起始位(1位)、字元資料位(5-8位)、奇偶校驗位(1位,也可以沒有校驗位)和停止位(1或2位)。空閒位和停止位均為高電平,接收裝置一旦監視到「0」電平的到來,說明起始位出現,就開始接收所規定的資料位和奇偶校驗位以及停止位。
同步通訊時要建立傳送方時鐘對接收方時鐘的直接控制,使雙方達到完全同步。此時,傳輸資料的位之間的距離均為「位間隔」的整數倍,同時傳送的字元間不留空隙,即保持位同步關係,也保持字元同步關係。
3. 序列通訊的傳輸方向
序列通訊依資料傳輸的方向及時間關係可分為:單工、半雙工和全雙工。
單工是指資料傳輸僅能沿乙個方向,不能實現反向傳輸。
半雙工是指資料傳輸可以沿兩個方向,但需要分時進行。
全雙工是指資料可以同時進行雙向傳輸。
本文中採用的rs485為半雙工。
4. 串列埠配置引數
序列通訊中幾個引數要格外注意:位元率、資料位、停止位和奇偶校驗位。
位元率描述資料的傳輸速率,是每秒鐘傳輸二進位制**的位數,單位是位/秒。如每秒鐘傳送240個字元,而每個字元格式包含10位,則此時的位元率為2400bps。
資料位是乙個位元組中包含的有效資料資訊的位數。
停止位用於判斷某個字元是否傳輸結束,以便開始進入監視狀態準備接收下乙個字元。
奇偶校驗位則用於判斷字元在傳輸過程中是否有錯誤,包括奇校驗、偶校驗和無校驗。當約定為奇校驗時,資料中1的個數與校驗位中1的個數之和應為奇數,偶校驗同理。接收方和傳送方的校驗方式應一致,接收字元時,對1的個數進行校驗,若發現不一致,則說明傳輸資料過程**現了差錯。
資料位、停止位和奇偶校驗位共同確定了串列埠通訊中資料編碼的方式,即字元結構。在概念上要和通訊協議中的起始碼、終止碼和校驗碼區分開。和英語寫作做個模擬,串列埠引數(資料位、停止位和奇偶校驗位)確定了每個單詞中各個字母的排列規則,而通訊協議規定的報文格式(起始碼、終止碼和校驗碼等)確定了句子的語法,是各個單詞排列組合的規則。
另外,在實際操作中會遇見低n位、高n位的說法。比如串列埠引數為1個起始位、8個資料位、1個停止位和1個奇偶校驗位。
當需要傳輸的數值為6000時,它的二進位制表示為:00010111 01110000,顯然需要占用2個位元組。
則計算機編碼的資料為兩個各含11個位的位元組,各包括1個起始位、8個資料位、1個停止位和1個奇偶校驗位,其中8個資料位分別為00010111 和 01110000。
其中00010111為高八位,01110000為低八位。
根據通訊協議的要求,有時會是低位在前、高位在後,有時是高位在前、低位在後。資料處理中需格外注意。
三、通訊協議
儀器方會提供該儀器使用的通訊協議,所以這一部分只要搞清楚協議內容就好了。串列埠引數確定了每個資料怎麼被計算機編碼並傳輸,而通訊協議中的報文格式則會告訴我們怎樣排列必要的資料以向下位機傳達我們的命令。
比如每一條報文第乙個位元組寫下位機的位址;第二個位元組寫功能碼;第
三、四兩個位元組寫相關的暫存器位址等。上下位機之間基於這樣的一種約定向彼此傳送報文,同樣基於這樣一種約定解析對方傳送來的報文,從而實現通訊。
這是乙個crc-ccitt的校驗程式合集,另外pudn.com似乎是個不錯的資源**。
校驗碼的計算中如果出現明明選擇了對應的子vi並進行了正確的修改仍然無法正確輸出校驗碼的情況,請務必檢查一下資料輸入、輸出控制項是正常顯示的還是十六進製制顯示的,更改一下顯示方式或許能解決問題。
四、labview串列埠通訊實現方法
其中提到要安裝下位機的驅動,可能因為我的下位機比較低端,我是在連線下位機和筆記本後啟動驅動精靈,自動掃瞄安裝了乙個對應的驅動。可以作為一種補充的方法吧。
另外個人感覺在串列埠通訊中虛擬串列埠軟體的用處並不大,其主要是用來檢驗下行報文的正確性,但其實在我編碼完下行報文之後,寫入visa之前,只要輸出一下我的下行報文不需要虛擬串列埠軟體也是能夠進行檢查的。
(i16是有符號十六進製制;u16是無符號十六進製制。)
Labview串列埠通訊
學習labview有一段時間了,發現了其中功能的強大和程式設計的簡潔性,高效性 現在初步實現了串列埠的通訊,把其中的體會和實現過程寫出來,權當拋磚引玉 其中的串列埠採用的是rs 232,d型口,共九跟針,其中能用的就是三跟針腳,2,3,5,乙個是傳送乙個是接受,乙個是接地,如果做乙個串列埠線延長線的...
Labview中串列埠通訊的研究
一 介紹labview labvie是實驗室虛擬儀器工程工作台 labview virtual instruments engineering workbench 的簡稱,是美國國家儀器公司開發的虛擬儀器開發平台軟體,它的功能強大靈活,可以廣泛應用於自動測量系統 工業過程自動化 實驗室 等各個領域。...
LabVIEW上位機與串列埠通訊
大一的時候,學校開了門公共選修課,叫labview程式設計,當時的我當然還不知道labview是啥東東,但還是選了。上課的老師是機械學院的乙個副教授,他給我們展示了好幾個用labview做的專案,譬如油箱監控上位機等,已經不太記得了。後來隨著學習微控制器 arm等的串列埠操作,有時候乙個漂亮的上位機...