聊聊RS232串口通訊的應用

聊聊RS232串口通訊的應用

今天我們來聊聊RS232的應用。一提到RS232相信大家都會聯想到RS485,都是串口通訊很多時候都會放在一起來講,但是今天我們只講232。以前基本不用rs232,因為知道它的通訊距離太短了,最好不要超過10米,在實際應用中很難滿足它這個要求。而rs485通訊的距離能有1000米,所以rs485的應用比rs232廣多了。其實,rs232的距離是可以通過串口服務器(比如moxa)轉換成網線,從而延長通訊距離。

我們都知道串口通訊需要設置波特率,停止位,數據位,奇偶校驗,除了這些基本的設置,如果你經常使用232你肯定常常看到RTS/CTS和XON/XOFF這兩個選項,這就是兩個流控制的選項,目前流控制主要應用於調制解調器的數據通訊中,但對普通RS232編程,瞭解一點這方面的知識是有好處的。那麼,流控制在串行通訊中有何作用,在編制串行通訊程序怎樣應用呢?這裡我們就來談談這個問題。

1.流控制在串行通訊中的作用

這裡講到的“流”,當然指的是數據流。數據在兩個串口之間傳輸時,常常會出現丟失數據的現象,或者兩臺計算機的處理速度不同,如臺式機與單片機之間的通訊,接收端數據緩衝區已滿,則此時繼續發送來的數據就會丟失。現在我們在網絡上通過MODEM進行數據傳輸,這個問題就尤為突出。流控制能解決這個問題,當接收端數據處理不過來時,就發出“不再接收”的信號,發送端就停止發送,直到收到“可以繼續發送”的信號再發送數據。因此流控制可以控制數據傳輸的進程,防止數據的丟失。 PC機中常用的兩種流控制是硬件流控制(包括RTS/CTS、DTR/CTS等)和軟件流控制XON/XOFF(繼續/停止),下面分別說明。

2.硬件流控制

硬件流控制常用的有RTS/CTS流控制和DTR/DSR(數據終端就緒/數據設置就緒)流控制。

硬件流控制必須將相應的電纜線連上,用RTS/CTS(請求發送/清除發送)流控制時,應將通訊兩端的RTS、CTS線對應相連,數據終端設備(如計算機)使用RTS來起始調制解調器或其它數據通訊設備的數據流,而數據通訊設備(如調制解調器)則用CTS來起動和暫停來自計算機的數據流。這種硬件握手方式的過程為:我們在編程時根據接收端緩衝區大小設置一個高位標誌(可為緩衝區大小的75%)和一個低位標誌(可為緩衝區大小的25%),當緩衝區內數據量達到高位時,我們在接收端將CTS線置低電平(送邏輯0),當發送端的程序檢測到CTS為低後,就停止發送數據,直到接收端緩衝區的數據量低於低位而將CTS置高電平。RTS則用來標明接收設備有沒有準備好接收數據。

常用的流控制還有還有DTR/DSR(數據終端就緒/數據設置就緒)。我們在此不再詳述。由於流控制的多樣性,我個人認為,當軟件裡用了流控制時,應做詳細的說明,如何接線,如何應用。

3.軟件流控制

由於電纜線的限制,我們在普通的控制通訊中一般不用硬件流控制,而用軟件流控制。一般通過XON/XOFF來實現軟件流控制。常用方法是:當接收端的輸入緩衝區內數據量超過設定的高位時,就向數據發送端發出XOFF字符(十進制的19或Control-S,設備編程說明書應該有詳細闡述),發送端收到XOFF字符後就立即停止發送數據;當接收端的輸入緩衝區內數據量低於設定的低位時,就向數據發送端發出XON字符(十進制的17或Control-Q),發送端收到XON字符後就立即開始發送數據。一般可以從設備配套源程序中找到發送的是什麼字符。

應該注意,若傳輸的是二進制數據,標誌字符也有可能在數據流中出現而引起誤操作,這是軟件流控制的缺陷,而硬件流控制不會有這個問題。

總結一下,不管用硬件流控制還是軟件流控制肯定需要在設備中選擇或者設備指定了哪種流控制,因為流控制方式的不同其本質是232通訊程序的不同。當然也可以沒有流控制,只是數據沒有流控制那麼可靠。

4.串口通訊方式

串口通訊方式分為異步和同步,我碰到的只有異步方式,同步方式還沒碰到過。我們來說說異步方式。

異步串行通訊規定了每個字符以幀的格式傳送, 每一幀信息由起始位、 數據位、 奇偶校

驗位和停止位組成。

聊聊RS232串口通訊的應用

聊聊RS232串口通訊的應用

1) 起始位起始位的作用就是表示通訊開始。 在串口通訊中, 通訊線上沒有數據傳送的時候信號處於邏輯“ 1”的狀態,當發送設備要發送一個字符數據的時候,首先發出一個邏輯“ 0”信號, 這個邏輯低電平就是起始位。 接收設備檢測到這個邏輯低電平以後, 就開始準備接收數據信號。

2) 數據位當接收設備收到起始位信號後, 緊接著就是數據位。數據位的個數可以是 5、 6、 7 或 8

位的二進制數據。在字符數據傳送過程中,數據位從最小有效位(最低位)開始傳送。

3) 奇偶校驗位

數據位發送完成以後, 可以在傳送字符的各位之外, 再傳送 1 位奇偶校驗位, 使用通訊

雙方在通訊時約定一致的奇偶檢驗方式, 進行有限的差錯檢驗。 即, 通過判斷所有傳送的數

位(含字符的各數位和校驗位)中“ 1”的個數為奇數還是偶數進行檢驗。奇偶校驗僅能檢

測不能糾錯。在發現錯誤後,只能要求重發。但由於其實現簡單,仍得到了廣泛使用。

4) 停止位

當奇偶校驗位或數據位 (無奇偶校驗時) 發送完成以後, 系統發送停止位作為一個字符

數據結束的標誌。停止位可以是 1 位、 1.5 位或者 2 位。因為位數的本質含義是信號出現的

時間,故可有分數位,如停止位可以是 1.5 位

FANUC 系統使用的串口通訊方式

FANUC 系統使用異步串行通訊方式,標準設定為:數據位 7 位、奇偶校驗位 1 位、停

止位 2 位。其中數據位是固定的, 奇偶校驗可以通過參數 134# 1 設定是否使用,停止位通

過參數 101 # 0 選擇使用 1 位或是 2 位。

另外,除了上述標準串行通訊信號, FANUC 系統還使用了一些自己的控制碼,主要用

於數據傳送的流控制:

DC1 ,代碼 0x11h ,表示 NC 讀入數據開始

DC2 ,代碼 0x12h ,表示 NC 輸出數據開始

DC3 ,代碼 0x93h (或 0x13h ,最高為視為符號位) ,表示 NC 讀入數據結束

DC4 ,代碼 0x14h ,表示 NC 輸出數據結束

FANUC 系統 RS-232-C 串口的流控制

根據《FANUC 連接說明書 (硬件) 》 中的相關描述, FANUC 對串口數據控制方式如下:

v NC 接收數據的控制流程

1) NC 輸出 DC1 。

2) 在接受到 DC1 控制碼後,外部設備開始傳輸數據。

3) 若 NC 來不及進行處理,則 NC 送出 DC3 控制碼。

4) 外部設備在收到 NC 送出的 DC3 控制碼後, 停止發送數據。外部設備在收到 DC3

控制信號後,最多可發送 10 個字符,如果送出的字符多於 10 個,就會發生 087

報警(緩衝區溢出) 。

5) NC 在結束延時處理後,送出 DC1 控制碼。

6) 外部設備在接受到 DC1 控制信號後,重新開始傳送數據(數據必須是下一個要處

理的數據) 。

7) NC 在結束接收數據後,送出 DC3 控制信號。

8) 外部設備停止送出數據。

v NC 發送數據的控制流程

1) NC 送出 DC2 控制代碼。

2) NC 連續地輸出穿孔數據。

3) 若 I/O 設備延時處理數據( I/O 速度慢)時。

a) 當 CS 信號 OFF 時,包括當前正在傳輸的字符, NC 在傳送 2 個字符後停止

傳送。

當 CS 信號再次 ON 時,數據傳輸重新開始。

b) 如果控制代碼 DC3 送入 NC , NC 在傳輸 10 個字符後停止數據輸出。當控制

代碼 DC1 送入 NC 後, NC 重新開始送出數據。

4) 外部設備傳輸數據完成後且 CS 信號 ON 時, NC 開始送出下一組數據。

5) 數據輸出完成後, NC 送出 DC4 控制代碼。

根據上面的敘述, 可以得出,系統讀入數據的時候,使用軟件流控制方式; 輸出數據的

時候,同時使用軟件和硬件流控制方式,具體方式可通過參數 102 #選擇(0,使用 DC1 -

DC4 ; 4,不使用) 。

因為剛好項目上用到了FANUC機床的232串口傳輸,所以這裡特別寫了一點,工作中碰不到FANUC機床的可以忽略。

好了,今天就寫這麼多了,歡迎各位大佬來噴。


分享到:


相關文章: