手機(jī)訪問(wèn)更快捷
更多流量 更易傳播
隨時(shí)掌握行業(yè)動(dòng)態(tài)
網(wǎng)絡(luò)課堂 行業(yè)直播
產(chǎn)品推薦:水表|流量計(jì)|壓力變送器|熱電偶|液位計(jì)|冷熱沖擊試驗(yàn)箱|水質(zhì)分析|光譜儀|試驗(yàn)機(jī)|試驗(yàn)箱
一、什么是RS-232 接口?
(1) RS-232 的歷史和作用
在串行通訊時(shí),要求通訊雙方都采用一個(gè)標(biāo)準(zhǔn)接口,使不同的設(shè)備可以方便地連接起來(lái)進(jìn)行通訊。RS-232-C接口(又稱EIA RS-232-C)是目前zui常用的一種串行通訊接口。(“RS-232-C”中的“-C”只不過(guò)表示RS-232的版本,所以與“RS-232”簡(jiǎn)稱是一樣的)它是在1970 年由美國(guó)電子工業(yè)協(xié)會(huì)(EIA)聯(lián)合貝爾系統(tǒng)、調(diào)制解調(diào)器廠家及計(jì)算機(jī)終端生產(chǎn)廠家共同制定的用于串行通訊的標(biāo)準(zhǔn)。它的全名是"數(shù)據(jù)終端設(shè)備(DTE)和數(shù)據(jù)通訊設(shè)備(DCE)之間串行二進(jìn)制數(shù)據(jù)交換接口技術(shù)標(biāo)準(zhǔn)"該標(biāo)準(zhǔn)規(guī)定采用一個(gè)25 個(gè)腳的DB-25 連接器,對(duì)連接器的每個(gè)引腳的信號(hào)內(nèi)容加以規(guī)定,還對(duì)各種信號(hào)的電平加以規(guī)定。后來(lái)IBM的PC 機(jī)將RS-232 簡(jiǎn)化成了DB-9 連接器,從而成為事實(shí)標(biāo)準(zhǔn)。而工業(yè)控制的RS-232 口一般只使用RXD、TXD、GND 三條線。
(2)RS-232 接口的電氣特性
在RS-232-C 中任何一條信號(hào)線的電壓均為負(fù)邏輯關(guān)系。即:邏輯"1"為-3 到-15V;邏輯"0"為+3 到+15V 。RS-232-C zui常用的9 條引線的信號(hào)內(nèi)容如下所示
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 接口的物理結(jié)構(gòu)
RS-232-C 接口連接器一般使用型號(hào)為DB-9 插頭座,通常插頭在DCE端,插座在DTE端.
PC 機(jī)的RS-232 口為9 芯針插座。而波士RS-232/RS-485轉(zhuǎn)換器的RS-232 為DB-9 孔插頭。一些設(shè)備與PC 機(jī)連接的RS-232 接口,因?yàn)椴皇褂脤?duì)方的傳送控制信號(hào),只需三條接口線,即"發(fā)送數(shù)據(jù)TXD"、"接收數(shù)據(jù)RXD"和"信號(hào)地GND"。RS-232 傳輸線采用屏蔽雙絞線。
(4)RS-232 傳輸電纜長(zhǎng)度
由RS-232C標(biāo)準(zhǔn)規(guī)定在碼元畸變小于4%的情況下,傳輸電纜長(zhǎng)度應(yīng)為50 英尺,其實(shí)這個(gè)4%的碼元畸變是很保守的,在實(shí)際應(yīng)用中,約有99%的用戶是按碼元畸變10-20%的范圍工作的,所以實(shí)際使用中zui大距離會(huì)遠(yuǎn)超過(guò)50英尺,美國(guó)DEC公司曾規(guī)定允許碼元畸變?yōu)?/span>10%而得出下面實(shí)驗(yàn)結(jié)果。其中1 號(hào)電纜為屏蔽電纜,型號(hào)為DECP.NO.9107723 內(nèi)有三對(duì)雙絞線,每對(duì)由22# AWG 組成,其外覆以屏蔽網(wǎng)。2 號(hào)電纜為不帶屏蔽的電纜。型號(hào)為DECP.NO.9105856-04是22#AWG 的四芯電纜。
DEC 公司的實(shí)驗(yàn)結(jié)果
波特率bps 1號(hào)電纜傳輸距離(米) 2號(hào)電纜傳輸距離(米)
110 1500 900
300 1500 900
1200 900 900
2400 300 150
4800 300 75
9600 75 75
經(jīng)過(guò)許多年來(lái)RS-232 器件以及通信技術(shù)的改進(jìn),RS-232 的通信距離已經(jīng)大大增加。波士電子的RS-232 增強(qiáng)器可以將普通的RS-232 口的通信距離直接延長(zhǎng)到1000米。
二、什么是RS-485 接口?
1. RS-485 的電氣特性:
發(fā)送端:邏輯"1"以兩線間的電壓差為+(2 至6) V 表示;邏輯"0"以兩線間的電壓差為-(2 至6)V 表示。接收端:A比B高200mV以上即認(rèn)為是邏輯"1",A 比B 低200mV 以上即認(rèn)為是邏輯"0"。
2. RS-485(或 RS-422)的接線:
RS-485(或 RS-422)通信建議一定要接地,因?yàn)?/span>RS-485(或 RS-422)通信要求通信雙方的地電位差小于1V。即:半雙工通信接3根線(+A、-B、地),全雙工通信接5根線(+發(fā)、-發(fā)、+收、-收、地)。為了安全起見(jiàn),建議通信機(jī)器的外殼接大地。RS-485(或 RS-422)光隔轉(zhuǎn)換器的所有外接電源的“地”必須全部連在一起但不要與計(jì)算機(jī)外殼地相連,因?yàn)殡娫?/span>“地”同時(shí)也是RS-485或 RS-422的信號(hào)“地”。當(dāng)通信距離超過(guò)100米時(shí)建議使用光電隔離的通信接口轉(zhuǎn)換器。
3. RS-485 的數(shù)據(jù)zui高傳輸速率為10Mbps。但是由于RS-485 常常要與PC 機(jī)的RS-232口通信,所以實(shí)際上一般zui高115.2Kbps。又由于太高的速率會(huì)使RS-485 傳輸距離減小,所以往往為9600bps 左右或以下。
4. RS-485 接口是采用平衡驅(qū)動(dòng)器和差分接收器的組合,抗噪聲干擾性好。
5. RS-485接口的zui大傳輸距離標(biāo)準(zhǔn)值為1200米(9600bps時(shí)),實(shí)際上可達(dá)3000米,RS-485 接口在總線上是允許連接多達(dá)128個(gè)收發(fā)器、即RS-485 具有多機(jī)通信能力,這樣用戶可以利用單一的RS-485 接口方便地建立起設(shè)備網(wǎng)絡(luò)。因RS-485 接口具有良好的抗噪聲干擾性,長(zhǎng)的傳輸距離和多站能力等上述優(yōu)點(diǎn)就使其成為的串行接口。因?yàn)?/span>RS485 接口組成的半雙工網(wǎng)絡(luò),一般只需二根信號(hào)線,所以RS485 接口均采用屏蔽雙絞線傳輸。RS-485 的標(biāo)準(zhǔn)并沒(méi)有規(guī)定RS485 的接口連接器標(biāo)準(zhǔn)、所以采用接線端子或者DB-9、DB-25 等連接器都可以。波士RS-485 接口是事實(shí)工業(yè)標(biāo)準(zhǔn)。
6. 采用RS485 接口時(shí),傳輸電纜的長(zhǎng)度如何考慮?
在使用RS485 接口時(shí),對(duì)于特定的傳輸線經(jīng),從發(fā)生器到負(fù)載其數(shù)據(jù)信號(hào)傳輸所允許的zui大電纜長(zhǎng)度是數(shù)據(jù)信號(hào)速率的函數(shù),這個(gè)長(zhǎng)度數(shù)據(jù)主要是受信號(hào)失真及噪聲等影響所限制。zui大電纜長(zhǎng)度與信號(hào)速率的關(guān)系曲線是使用24AWG 銅芯雙絞電纜(線徑為0。51mm),線間旁路電容為52。5PF/M,終端負(fù)載電阻為100 歐時(shí)所得出。(引自GB11014-89附錄A)。當(dāng)數(shù)據(jù)信號(hào)速率降低到90Kbit/S 以下時(shí),假定zui大允許的信號(hào)損失為6dBV 時(shí), 則電纜長(zhǎng)度被限制在1200M。實(shí)際上,在實(shí)用時(shí)是*可以取得比它大的電纜長(zhǎng)度。當(dāng)使用不同線徑的電纜。則取得的zui大電纜長(zhǎng)度是不相同的。例如:當(dāng)數(shù)據(jù)信號(hào)速率為600Kbit/S
時(shí),采用24AWG 電纜,zui大電纜長(zhǎng)度是200m,若采用19AWG 電纜(線徑為0.91mm)則電纜長(zhǎng)度將可以大于200m; 若采用28AWG 電纜(線徑為0.32mm)則電纜長(zhǎng)度只能小于200m。RS-485的遠(yuǎn)距離通信建議采用屏蔽電纜,并且將屏蔽層作為地線。
三、什么是RS-422 接口?
RS-422 的電氣性能與RS-485*一樣。主要的區(qū)別在于:
RS-422 有4 根信號(hào)線:兩根發(fā)送(Y、Z)、兩根接收(A、B)。由于RS-422 的收與發(fā)
是分開(kāi)的所以可以同時(shí)收和發(fā)(全雙工)。
RS-485 有2 根信號(hào)線:發(fā)送和接收都是A 和B。由于RS-485 的收與發(fā)是共用兩根線所以不能夠同時(shí)收和發(fā)(半雙工)。能否將RS-422 的Y-A 短接作為RS-485 的A、將RS-422 的Z-B 短接作為RS-485 的B呢?回答:不一定。條件是RS-422 必須是能夠支持多機(jī)通信的。波士電子的所有接口轉(zhuǎn)換器的RS-422 口都能夠支持全雙工多機(jī)通信,所以可以這樣簡(jiǎn)單轉(zhuǎn)換為RS-485。
四、RS-485 比RS-232接口相比有何特點(diǎn)?
由于RS-232 接口標(biāo)準(zhǔn)出現(xiàn)較早,難免有不足之處,主要有以下四點(diǎn):
(1) 接口的信號(hào)電平值較高,易損壞接口電路的芯片,又因?yàn)榕cTTL 電平不兼容故需使用電平轉(zhuǎn)換電路方能與TTL 電路連接。
(2) 傳輸速率較低,在異步傳輸時(shí),波特率為20Kbps。現(xiàn)在由于采用新的UART 芯片16C550 等,波特率達(dá)到115.2Kbps。
(3) 接口使用一根信號(hào)線和一根信號(hào)返回線而構(gòu)成共地的傳輸形式, 這種共地傳輸容
易產(chǎn)生共模干擾,所以抗噪聲干擾性弱。
(4) 傳輸距離有限,zui大傳輸距離標(biāo)準(zhǔn)值為50 米,實(shí)際上也只能用在15米左右。
(5)RS-232 只允許一對(duì)一通信,而RS-485 接口在總線上是允許連接多達(dá)128個(gè)收發(fā)器。
五、串口通信功能的實(shí)現(xiàn)
利用VC++實(shí)現(xiàn)串口通信的方法有多種,我們采取直接調(diào)用Window API中的一系列標(biāo)準(zhǔn)的串口通信函數(shù),直接用這些標(biāo)準(zhǔn)函數(shù)來(lái)完成Windows下面的串口通信編程[11]。利用WindowsAPI函數(shù)控制利用API函數(shù)實(shí)現(xiàn)對(duì)RS232串口通信的訪問(wèn),在實(shí)現(xiàn)控制通信中,我們必定要調(diào)動(dòng)3個(gè)函數(shù)來(lái)實(shí)現(xiàn)對(duì)串口的控制:
CreatFile()函數(shù)實(shí)現(xiàn)串口初始化并打開(kāi)串口;
ReadFile()函數(shù)接收串口傳遞過(guò)來(lái)的二進(jìn)制流并返回?cái)?shù)據(jù)到接收緩沖區(qū)中
WriteFile()把應(yīng)用程序發(fā)出的指令送到發(fā)送緩沖區(qū)以供串口接收1. 打開(kāi)串口
以下程序用于以同步方式打開(kāi)串口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. 配置串口
配置串口是通過(guò)改變?cè)O(shè)備控制塊DCB(Device Control Block)的成員變量值來(lái)實(shí)現(xiàn)的,程序?qū)崿F(xiàn)如下:
DCB dcb
dcb.BaudRate=9600;//波特率為9600bps
dcb.ByteSize=8;//數(shù)據(jù)位8位
dcb.Parity=EVENPARTTY;//有校驗(yàn)
dcb.StopBits=ONESTOPRTT; //一個(gè)停止位
SetCommState(hCom,&dcb);
3. 數(shù)據(jù)讀寫(xiě)
對(duì)串口進(jìn)行讀寫(xiě)與對(duì)文件進(jìn)行讀寫(xiě)所用的函數(shù)相同,具體為可采用查詢、同步、異步或事件驅(qū)動(dòng)等方法對(duì)串口進(jìn)行讀寫(xiě)所用函數(shù)如下所示:
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;
}
//寫(xiě)入函數(shù)程序?yàn)?/span>:
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++進(jìn)行程序的編制首先要對(duì)串口進(jìn)行初始化,設(shè)定端口,通信速率和校驗(yàn)方式,并在使用前打開(kāi)串口,程序部分如下:
{
Cdialog::OnInitDialog();//TODO: Add extra initialization here
m_comm.SetCommPort(1);//選擇串口1
if(! m_comm.GetPortOpen())
m_comm.SetPortOpen(TRUE);//打開(kāi)串口1
m_comm.SetSettings(“9600,n,8,1”); //設(shè)置串口參數(shù)
m_comm.SetRThreshold(1);
m_comm.SetInputMode(1);//設(shè)置二進(jìn)制模式
return TRUE;
}
除了串口的位置和基本串口參數(shù)(數(shù)據(jù)傳輸速率9600bps,1位開(kāi)始位,8位數(shù)據(jù)位,1位停止位,一位奇偶校驗(yàn))設(shè)置外,為了實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)采集功能,接受數(shù)據(jù)的讀寫(xiě)要盡可能的快速,則設(shè)置RTHreshold=1即接收緩沖區(qū)收到一個(gè)字節(jié)產(chǎn)生OnComm事件InputLen=1每次讀取一個(gè)字節(jié)。如果PC上位機(jī)在一定時(shí)間內(nèi)不能將數(shù)據(jù)處理完,接收緩沖區(qū)會(huì)滯留數(shù)據(jù),數(shù)據(jù)會(huì)產(chǎn)生丟失現(xiàn)象,我們必須對(duì)接受緩沖區(qū)進(jìn)行適當(dāng)?shù)脑O(shè)置。我們利用API函數(shù)實(shí)現(xiàn)串口通信的方法,實(shí)現(xiàn)了羅經(jīng)及發(fā)射機(jī)對(duì)上位機(jī)串行通信的功能。
相關(guān)產(chǎn)品
免責(zé)聲明
客服熱線: 15267989561
加盟熱線: 15267989561
媒體合作: 0571-87759945
投訴熱線: 0571-87759942
下載儀表站APP
Ybzhan手機(jī)版
Ybzhan公眾號(hào)
Ybzhan小程序