RS-232/RS-485/RS-422 接口簡介與編程

RS-232/RS-485/RS-422 接口簡介與編程

 

   一、什麼是RS-232 接口?

(1) RS-232 的歷史和作用

在串行通訊時,要求通訊雙方都採用一個標準接口,使不同的設備可以方便地連接起來進行通訊。RS-232-C接口(又稱EIA RS-232-C)是目前最常用的一種串行通訊接口。(“RS-232-C”中的“-C”只不過表示RS-232的版本,所以與“RS-232”簡稱是一樣的)它是在1970 年由美國電子工業協會(EIA)聯合貝爾系統、調制解調器廠家及計算機終端生產廠家共同制定的用於串行通訊的標準。它的全名是"數據終端設備(DTE)和數據通訊設備(DCE)之間串行二進制數據交換接口技術標準"該標準規定採用一個25 個腳的DB-25 連接器,對連接器的每個引腳的信號內容加以規定,還對各種信號的電平加以規定。後來IBM的PC 機將RS-232 簡化成了DB-9 連接器,從而成爲事實標準。而工業控制的RS-232 口一般只使用RXD、TXD、GND 三條線。

(2)RS-232 接口的電氣特性

在RS-232-C 中任何一條信號線的電壓均爲負邏輯關係。即:邏輯"1"爲-3 到-15V;邏輯"0"爲+3 到+15V 。RS-232-C 最常用的9 條引線的信號內容如下所示

DB-9 1 2 3 4 5 6 7 8 9

DB-25 8 3 2 20 7 6 4 5 22

定義DCD RXD TXD DTR GND DSR RTS CTS RI

(3) RS-232 接口的物理結構

RS-232-C 接口連接器一般使用型號爲DB-9 插頭座,通常插頭在DCE端,插座在DTE端.

PC 機的RS-232 口爲9 芯針插座。而波士RS-232/RS-485轉換器的RS-232 爲DB-9 孔插頭。一些設備與PC 機連接的RS-232 接口,因爲不使用對方的傳送控制信號,只需三條接口線,即"發送數據TXD"、"接收數據RXD"和"信號地GND"。RS-232 傳輸線採用屏蔽雙絞線。

(4)RS-232 傳輸電纜長度

由RS-232C標準規定在碼元畸變小於4%的情況下,傳輸電纜長度應爲50 英尺,其實這個4%的碼元畸變是很保守的,在實際應用中,約有99%的用戶是按碼元畸變10-20%的範圍工作的,所以實際使用中最大距離會遠超過50英尺,美國DEC公司曾規定允許碼元畸變爲10%而得出下面實驗結果。其中1 號電纜爲屏蔽電纜,型號爲DECP.NO.9107723 內有三對雙絞線,每對由22# AWG 組成,其外覆以屏蔽網。2 號電纜爲不帶屏蔽的電纜。型號爲DECP.NO.9105856-04是22#AWG 的四芯電纜。

DEC 公司的實驗結果

波特率bps    1號電纜傳輸距離(米)    2號電纜傳輸距離(米)

110         1500                        900

300         1500                        900

1200         900                        900

2400         300                        150

4800         300                        75

9600         75                         75

經過許多年來RS-232 器件以及通信技術的改進,RS-232 的通信距離已經大大增加。波士電子的RS-232 增強器可以將普通的RS-232 口的通信距離直接延長到1000米。

二、什麼是RS-485 接口?

1. RS-485 的電氣特性:

發送端:邏輯"1"以兩線間的電壓差爲+(2 至6) V 表示;邏輯"0"以兩線間的電壓差爲-(2 至6)V 表示。接收端:A比B高200mV以上即認爲是邏輯"1",A 比B 低200mV 以上即認爲是邏輯"0"。

2. RS-485(或 RS-422)的接線:

RS-485(或 RS-422)通信建議一定要接地,因爲RS-485(或 RS-422)通信要求通信雙方的地電位差小於1V。即:半雙工通信接3根線(+A、-B、地),全雙工通信接5根線(+發、-發、+收、-收、地)。爲了安全起見,建議通信機器的外殼接大地。RS-485(或 RS-422)光隔轉換器的所有外接電源的“地”必須全部連在一起但不要與計算機外殼地相連,因爲電源“地”同時也是RS-485或 RS-422的信號“地”。當通信距離超過100米時建議最好使用光電隔離的通信接口轉換器。

3. RS-485 的數據最高傳輸速率爲10Mbps。但是由於RS-485 常常要與PC 機的RS-232口通信,所以實際上一般最高115.2Kbps。又由於太高的速率會使RS-485 傳輸距離減小,所以往往爲9600bps 左右或以下。

4. RS-485 接口是採用平衡驅動器和差分接收器的組合,抗噪聲干擾性好。

5. RS-485接口的最大傳輸距離標準值爲1200米(9600bps時),實際上可達3000米,RS-485 接口在總線上是允許連接多達128個收發器、即RS-485 具有多機通信能力,這樣用戶可以利用單一的RS-485 接口方便地建立起設備網絡。因RS-485 接口具有良好的抗噪聲干擾性,長的傳輸距離和多站能力等上述優點就使其成爲首選的串行接口。因爲RS485 接口組成的半雙工網絡,一般只需二根信號線,所以RS485 接口均採用屏蔽雙絞線傳輸。RS-485 的國際標準並沒有規定RS485 的接口連接器標準、所以採用接線端子或者DB-9、DB-25 等連接器都可以。波士RS-485 接口是事實工業標準。

6. 採用RS485 接口時,傳輸電纜的長度如何考慮?

在使用RS485 接口時,對於特定的傳輸線經,從發生器到負載其數據信號傳輸所允許的最大電纜長度是數據信號速率的函數,這個長度數據主要是受信號失真及噪聲等影響所限制。最大電纜長度與信號速率的關係曲線是使用24AWG 銅芯雙絞電話電纜(線徑爲0。51mm),線間旁路電容爲52。5PF/M,終端負載電阻爲100 歐時所得出。(引自GB11014-89附錄A)。當數據信號速率降低到90Kbit/S 以下時,假定最大允許的信號損失爲6dBV 時, 則電纜長度被限制在1200M。實際上,在實用時是完全可以取得比它大的電纜長度。當使用不同線徑的電纜。則取得的最大電纜長度是不相同的。例如:當數據信號速率爲600Kbit/S

時,採用24AWG 電纜,最大電纜長度是200m,若採用19AWG 電纜(線徑爲0.91mm)則電纜長度將可以大於200m; 若採用28AWG 電纜(線徑爲0.32mm)則電纜長度只能小於200m。RS-485的遠距離通信建議採用屏蔽電纜,並且將屏蔽層作爲地線。

三、什麼是RS-422 接口?

RS-422 的電氣性能與RS-485完全一樣。主要的區別在於:

RS-422 有4 根信號線:兩根發送(Y、Z)、兩根接收(A、B)。由於RS-422 的收與發

是分開的所以可以同時收和發(全雙工)。RS-485 有2 根信號線:發送和接收都是A 和B。由於RS-485 的收與發是共用兩根線所以不能夠同時收和發(半雙工)。能否將RS-422 的Y-A 短接作爲RS-485 的A、將RS-422 的Z-B 短接作爲RS-485 的B呢?回答:不一定。條件是RS-422 必須是能夠支持多機通信的。波士電子的所有接口轉換器的RS-422 口都能夠支持全雙工多機通信,所以可以這樣簡單轉換爲RS-485。

四、RS-485 比RS-232接口相比有何特點?

由於RS-232 接口標準出現較早,難免有不足之處,主要有以下四點:

(1) 接口的信號電平值較高,易損壞接口電路的芯片,又因爲與TTL 電平不兼容故需使用電平轉換電路方能與TTL 電路連接。

(2) 傳輸速率較低,在異步傳輸時,波特率爲20Kbps。現在由於採用新的UART 芯片16C550 等,波特率達到115.2Kbps。

(3) 接口使用一根信號線和一根信號返回線而構成共地的傳輸形式, 這種共地傳輸容

易產生共模干擾,所以抗噪聲干擾性弱。

(4) 傳輸距離有限,最大傳輸距離標準值爲50 米,實際上也只能用在15米左右。

(5)RS-232 只允許一對一通信,而RS-485 接口在總線上是允許連接多達128個收發器。

 

五、串口通信功能的實現

利用VC++實現串口通信的方法有多種,我們採取直接調用Window API中的一系列標準的串口通信函數,直接用這些標準函數來完成Windows下面的串口通信編程[11]。利用WindowsAPI函數控制利用API函數實現對RS232串口通信的訪問,在實現控制通信中,我們必定要調動3個函數來實現對串口的控制:

CreatFile()函數實現串口初始化並打開串口;

ReadFile()函數接收串口傳遞過來的二進制流並返回數據到接收緩衝區中

WriteFile()把應用程序發出的指令送到發送緩衝區以供串口接收1. 打開串口

以下程序用於以同步方式打開串口COM1;

HANDLE hCom;

DWORD dwErrorHcomm=CreateFile(“COM1”,GENERIC_READ|GENERIC_WRITE

,0, NULL,OPEN_EXISTING, 0, NULL);

if (hComm==(HANDLE)0Xffff)

{

dwError=GetLastError();

MessageBox(dwError);

}

2. 配置串口

配置串口是通過改變設備控制塊DCB(Device Control Block)的成員變量值來實現的,程序實現如下:

DCB dcb

dcb.BaudRate=9600;//波特率爲9600bps

dcb.ByteSize=8;//數據位8位

dcb.Parity=EVENPARTTY;//有校驗

dcb.StopBits=ONESTOPRTT; //一個停止位

SetCommState(hCom,&dcb);

3. 數據讀寫

對串口進行讀寫與對文件進行讀寫所用的函數相同,具體爲可採用查詢、同步、異步或事件驅動等方法對串口進行讀寫所用函數如下所示:

bReadStatus=ReadFile(hCom,buffer,length,&length &m_lpOverlapped);

if(!bReadStatus)

{

if(GetLastError()=ERROR_IO_PENDING)

{

WaitForSingleObject(m_lpOverlapped,hEvent,1000);

return((char)length);

}

return 0;

}

//寫入函數程序爲:

bWriteStatus=WriteFile(hCom,buffer,length,&length,&m_lpOverlapped)

if(!bWriteStatus)

{

if(GetLastError()=ERROR_IO_PENDING)

{

WaitForSingleObject(m_lpOverlapped, hEvent,1000);

return((char)length);

}

return 0;

}

4. 程序的編制

用VC++進行程序的編制首先要對串口進行初始化,設定端口,通信速率和校驗方式,並在使用前打開串口,程序部分如下:

{

Cdialog::OnInitDialog();//TODO: Add extra initialization here

m_comm.SetCommPort(1);//選擇串口1

if(! m_comm.GetPortOpen())

m_comm.SetPortOpen(TRUE);//打開串口1

m_comm.SetSettings(“9600,n,8,1”); //設置串口參數

m_comm.SetRThreshold(1);

m_comm.SetInputMode(1);//設置二進制模式

return TRUE;

}

除了串口的位置和基本串口參數(數據傳輸速率9600bps,1位開始位,8位數據位,1位停止位,一位奇偶校驗)設置外,爲了實現實時數據採集功能,接受數據的讀寫要儘可能的快速,則設置RTHreshold=1即接收緩衝區收到一個字節產生OnComm事件InputLen=1每次讀取一個字節。如果PC上位機在一定時間內不能將數據處理完,接收緩衝區會滯留數據,數據會產生丟失現象,我們必須對接受緩衝區進行適當的設置。我們利用API函數實現串口通信的方法,實現了羅經及發射機對上位機串行通信的功能。

 
發佈了56 篇原創文章 · 獲贊 2 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章