6ES7317-6TK13-0AB0安裝調(diào)試
6ES7317-6TK13-0AB0安裝調(diào)試
串口通信基本接線方法
目前較為常用的串口有9針串口(DB9)和25針串口(DB25),,通信距離較近時(shí)(<12m),,可以用電纜線直接連接標(biāo)準(zhǔn)RS232端口(RS422,RS485較遠(yuǎn)),,若距離較遠(yuǎn),,需附加調(diào)制解調(diào)器(MODEM),。最為簡單且常用的是三線制接法,,即地,、接收數(shù)據(jù)和發(fā)送數(shù)據(jù)三腳相連,,本文只涉及到最為基本的接法,,且直接用RS232相連。
1.DB9和DB25的常用信號(hào)腳說明
9針串口(DB9) 25針串口(DB25)
針號(hào) 功能說明 縮寫 針號(hào) 功能說明 縮寫
1 數(shù)據(jù)載波檢測(cè) DCD 8 數(shù)據(jù)載波檢測(cè) DCD
2 接收數(shù)據(jù) RXD 3 接收數(shù)據(jù) RXD
3 發(fā)送數(shù)據(jù) TXD 2 發(fā)送數(shù)據(jù) TXD
4 數(shù)據(jù)終端準(zhǔn)備 DTR 20 數(shù)據(jù)終端準(zhǔn)備 DTR
5 信號(hào)地 GND 7 信號(hào)地 GND
6 數(shù)據(jù)設(shè)備準(zhǔn)備好 DSR 6 數(shù)據(jù)準(zhǔn)備好 DSR
7 請(qǐng)求發(fā)送 RTS 4 請(qǐng)求發(fā)送 RTS
8 清除發(fā)送 CTS 5 清除發(fā)送 CTS
9 振鈴指示 DELL 22 振鈴指示 DELL
2.RS232C串口通信接線方法(三線制)
首先,,串口傳輸數(shù)據(jù)只要有接收數(shù)據(jù)針腳和發(fā)送針腳就能實(shí)現(xiàn):同一個(gè)串口的接收腳和發(fā)送腳直接用線相連,,兩個(gè)串口相連或一個(gè)串口和多個(gè)串口相連
· 同一個(gè)串口的接收腳和發(fā)送腳直接用線相連 對(duì)9針串口和25針串口,均是2與3直接相連,;
· 兩個(gè)不同串口(不論是同一臺(tái)計(jì)算機(jī)的兩個(gè)串口或分別是不同計(jì)算機(jī)的串口)
上面表格是對(duì)微機(jī)標(biāo)準(zhǔn)串行口而言的,,還有許多非標(biāo)準(zhǔn)設(shè)備,如接收GPS數(shù)據(jù)或電子羅盤數(shù)據(jù),,只要記住一個(gè)原則:接收數(shù)據(jù)針腳(或線)與發(fā)送數(shù)據(jù)針腳(或線)相連,,彼此交叉,,信號(hào)地對(duì)應(yīng)相接,就能百戰(zhàn)百勝,。
3.串口調(diào)試中要注意的幾點(diǎn):
串口調(diào)試時(shí),,準(zhǔn)備一個(gè)好用的調(diào)試工具,如串口調(diào)試助手,、串口精靈等,,有事半功倍之效果; 強(qiáng)烈建議不要帶電插撥串口,,插撥時(shí)至少有一端是斷電的,,否則串口易損壞。
單工,、半雙工和全雙工的定義
如果在通信過程的任意時(shí)刻,,信息只能由一方A傳到另一方B,則稱為單工,。
如果在任意時(shí)刻,,信息既可由A傳到B,又能由B傳A,,但只能由一個(gè)方向上的傳輸存在,,稱為半雙工傳輸。
如果在任意時(shí)刻,,線路上存在A到B和B到A的雙向信號(hào)傳輸,,則稱為全雙工,。
電話線就是二線全雙工信道。 由于采用了回波抵消技術(shù),雙向的傳輸信號(hào)不致混淆不清,。雙工信道有時(shí)也將收、發(fā)信道分開,,采用分離的線路或頻帶傳輸相反方向的信號(hào),,如回線傳輸。
奇偶校驗(yàn)
串行數(shù)據(jù)在傳輸過程中,,由于干擾可能引起信息的出錯(cuò),,例如,傳輸字符‘E’,,其各位為:
0100,0101=45H
D7 D0
由于干擾,,可能使位變?yōu)?,這種情況,,我們稱為出現(xiàn)了“誤碼",。我們把如何發(fā)現(xiàn)傳輸中的錯(cuò)誤,,叫“檢錯(cuò)"。發(fā)現(xiàn)錯(cuò)誤后,,如何消除錯(cuò)誤,,叫“糾錯(cuò)"。
的檢錯(cuò)方法是“奇偶校驗(yàn)",即在傳送字符的各位之外,,再傳送1位奇/偶校驗(yàn)位??刹捎闷嫘r?yàn)或偶校驗(yàn),。
奇校驗(yàn):所有傳送的數(shù)位(含字符的各數(shù)位和校驗(yàn)位)中,“1"的個(gè)數(shù)為奇數(shù),如:
1 0110,,0101
0 0110,,0001
偶校驗(yàn):所有傳送的數(shù)位(含字符的各數(shù)位和校驗(yàn)位)中,“1"的個(gè)數(shù)為偶數(shù),,如:
1 0100,,0101
0 0100,0001
奇偶校驗(yàn)?zāi)軌驒z測(cè)出信息傳輸過程中的部分誤碼(1位誤碼能檢出,,2位及2位以上誤碼不能檢出),,同時(shí),它不能糾錯(cuò),。在發(fā)現(xiàn)錯(cuò)誤后,,只能要求重發(fā)。但由于其實(shí)現(xiàn)簡單,,仍得到了廣泛使用,。
有些檢錯(cuò)方法,,具有自動(dòng)糾錯(cuò)能力。如循環(huán)冗余碼(CRC)檢錯(cuò)等,。
串口通訊流控制
我們?cè)诖型ㄓ嵦幚碇?,常常看到RTS/CTS和XON/XOFF這兩個(gè)選項(xiàng),,這就是兩個(gè)流控制的選項(xiàng),,目前流控制主要應(yīng)用于調(diào)制解調(diào)器的數(shù)據(jù)通訊中,但對(duì)普通RS232編程,,了解一點(diǎn)這方面的知識(shí)是有好處的,。那么,流控制在串行通訊中有何作用,,在編制串行通訊程序怎樣應(yīng)用呢,?這里我們就來談?wù)勥@個(gè)問題。
1.流控制在串行通訊中的作用
這里講到的“流",,當(dāng)然指的是數(shù)據(jù)流,。數(shù)據(jù)在兩個(gè)串口之間傳輸時(shí),常常會(huì)出現(xiàn)丟失數(shù)據(jù)的現(xiàn)象,,或者兩臺(tái)計(jì)算機(jī)的處理速度不同,,如臺(tái)式機(jī)與單片機(jī)之間的通訊,接收端數(shù)據(jù)緩沖區(qū)已滿,,則此時(shí)繼續(xù)發(fā)送來的數(shù)據(jù)就會(huì)丟失?,F(xiàn)在我們?cè)诰W(wǎng)絡(luò)上通過MODEM進(jìn)行數(shù)據(jù)傳輸,這個(gè)問題就尤為突出,。流控制能解決這個(gè)問題,,當(dāng)接收端數(shù)據(jù)處理不過來時(shí),就發(fā)出“不再接收"的信號(hào),,發(fā)送端就停止發(fā)送,,直到收到“可以繼續(xù)發(fā)送"的信號(hào)再發(fā)送數(shù)據(jù)。因此流控制可以控制數(shù)據(jù)傳輸?shù)倪M(jìn)程,,防止數(shù)據(jù)的丟失,。 PC機(jī)中常用的兩種流控制是硬件流控制(包括RTS/CTS、DTR/CTS等)和軟件流控制XON/XOFF(繼續(xù)/停止),,下面分別說明,。
2.硬件流控制
硬件流控制常用的有RTS/CTS流控制和DTR/DSR(數(shù)據(jù)終端就緒/數(shù)據(jù)設(shè)置就緒)流控制。
硬件流控制必須將相應(yīng)的電纜線連上,,用RTS/CTS(請(qǐng)求發(fā)送/清除發(fā)送)流控制時(shí),,應(yīng)將通訊兩端的RTS、CTS線對(duì)應(yīng)相連,數(shù)據(jù)終端設(shè)備(如計(jì)算機(jī))使用RTS來起始調(diào)制解調(diào)器或其它數(shù)據(jù)通訊設(shè)備的數(shù)據(jù)流,,而數(shù)據(jù)通訊設(shè)備(如調(diào)制解調(diào)器)則用CTS來起動(dòng)和暫停來自計(jì)算機(jī)的數(shù)據(jù)流。這種硬件握手方式的過程為:我們?cè)诰幊虝r(shí)根據(jù)接收端緩沖區(qū)大小設(shè)置一個(gè)高位標(biāo)志(可為緩沖區(qū)大小的75%)和一個(gè)低位標(biāo)志(可為緩沖區(qū)大小的25%),,當(dāng)緩沖區(qū)內(nèi)數(shù)據(jù)量達(dá)到高位時(shí),,我們?cè)诮邮斩藢TS線置低電平(送邏輯0),當(dāng)發(fā)送端的程序檢測(cè)到CTS為低后,,就停止發(fā)送數(shù)據(jù),,直到接收端緩沖區(qū)的數(shù)據(jù)量低于低位而將CTS置高電平。RTS則用來標(biāo)明接收設(shè)備有沒有準(zhǔn)備好接收數(shù)據(jù),。
常用的流控制還有還有DTR/DSR(數(shù)據(jù)終端就緒/數(shù)據(jù)設(shè)置就緒),。我們?cè)诖瞬辉僭斒觥S捎诹骺刂频亩鄻有?,我個(gè)人認(rèn)為,,當(dāng)軟件里用了流控制時(shí),應(yīng)做詳細(xì)的說明,,如何接線,,如何應(yīng)用。
3.軟件流控制
由于電纜線的限制,,我們?cè)谄胀ǖ目刂仆ㄓ嵵幸话悴挥糜布骺刂?,而用軟件流控制。一般通過XON/XOFF來實(shí)現(xiàn)軟件流控制,。常用方法是:當(dāng)接收端的輸入緩沖區(qū)內(nèi)數(shù)據(jù)量超過設(shè)定的高位時(shí),,就向數(shù)據(jù)發(fā)送端發(fā)出XOFF字符(十進(jìn)制的19或Control-S,設(shè)備編程說明書應(yīng)該有詳細(xì)闡述),,發(fā)送端收到XOFF字符后就立即停止發(fā)送數(shù)據(jù),;當(dāng)接收端的輸入緩沖區(qū)內(nèi)數(shù)據(jù)量低于設(shè)定的低位時(shí),就向數(shù)據(jù)發(fā)送端發(fā)出XON字符(十進(jìn)制的17或Control-Q),,發(fā)送端收到XON字符后就立即開始發(fā)送數(shù)據(jù),。一般可以從設(shè)備配套源程序中找到發(fā)送的是什么字符。
應(yīng)該注意,,若傳輸?shù)氖嵌M(jìn)制數(shù)據(jù),,標(biāo)志字符也有可能在數(shù)據(jù)流中出現(xiàn)而引起誤操作,這是軟件流控制的缺陷,,而硬件流控制不會(huì)有這個(gè)問題
Delphi是一種具有功能強(qiáng)大,、簡便易用和代碼執(zhí)行速度快等優(yōu)點(diǎn)的可視化快速應(yīng)用開發(fā)工具,它在構(gòu)架企業(yè)信息系統(tǒng)方面發(fā)揮著越來越重要的作用,,許多程序員愿意選擇 Delphi作為開發(fā)工具編制各種應(yīng)用程序,。但是,美中不足之處是 Delphi沒有自帶的串口通信控件,在它的幫助文檔里也沒有提及串口通信,,這就給編制通信程序的開發(fā)人員帶來許多不便,。
目前,利用 Delphi實(shí)現(xiàn)串口通信的常用的方法有 3種:一是利用控件,,如 MSCOMM控件和 SPCOMM控件,;二是使用 API函數(shù);三是調(diào)用其他串口通信程序,。其中利用 API編寫串口通信程序較為復(fù)雜,,需要掌握大量的通信知識(shí)。相比較而言,,利用 SPCOMM控件則相對(duì)較簡單,,并且該控件具有豐富的與串口通信密切相關(guān)的屬性及事件,提供了對(duì)串口的各種操作,,而且還支持多線程,。下面本文結(jié)合實(shí)例詳細(xì)介紹 SPCOMM控件的使用。
SPCOMM的安裝
1.選擇下拉菜單 Component中的 Install Component選項(xiàng),,彈出如圖 1所示的窗口,。

在 Unit file name處填寫 SPCOMM控件所在的路徑,其他各項(xiàng)可用默認(rèn)值,,點(diǎn)擊 OK按鈕,。
2.安裝后,在 System控件面板中將出現(xiàn)一個(gè)紅色控件 COM?,F(xiàn)在就可以像 Delphi自帶控件一樣使用 COM控件了,。
SPCOMM的屬性、方法和事件
1.屬性
●CommName:表示 COM1,、 COM2等串口的名字,;
●BaudRate:根據(jù)實(shí)際需要設(shè)定的波特率,在串口打開后也可更改此值,,實(shí)際波特率隨之更改,;
●ParityCheck:表示是否需要奇偶校驗(yàn);
●ByteSize:根據(jù)實(shí)際情況設(shè)定的字節(jié)長度,;
●Parity:奇偶校驗(yàn)位,;
●StopBits:停止位;
●SendDataEmpty:這是一個(gè)布爾型屬性,,為 true時(shí)表示發(fā)送緩存為空,,或者發(fā)送隊(duì)列里沒有信息;為 false時(shí)表示發(fā)送緩存不為空,,或者發(fā)送隊(duì)列里有信息,。
2.方法
●Startcomm方法用于打開串口,當(dāng)打開失敗時(shí)通常會(huì)報(bào)錯(cuò)。錯(cuò)誤主要有 7種:⑴串口已經(jīng)打開,;⑵打開串口錯(cuò)誤,;⑶文件句柄不是通信句柄;⑷不能夠安裝通信緩存,;⑸不能產(chǎn)生事件,;⑹不能產(chǎn)生讀進(jìn)程;⑺不能產(chǎn)生寫進(jìn)程,;
●StopComm方法用于關(guān)閉串口,沒有返回值,;
●WriteCommData(pDataToWrite: PChar;dwSizeofDataToWrite:Word )方法是個(gè)帶有布爾型返回值的函數(shù),,用于將一個(gè)字符串發(fā)送到寫進(jìn)程,發(fā)送成功返回 true,,發(fā)送失敗返回 false,。執(zhí)行此函數(shù)將立即得到返回值,發(fā)送操作隨后執(zhí)行,。該函數(shù)有兩個(gè)參數(shù),,其中 pDataToWrite是要發(fā)送的字符串, dwSizeofDataToWrite是發(fā)送字符串的長度,。
3.事件
●OnReceiveData :procedure (Sender: Tbbbbbb;Buffer: Pointer;BufferLength: Word) of bbbbbb
當(dāng)有數(shù)據(jù)輸入緩存時(shí)將觸發(fā)該事件,,在這里可以對(duì)從串口收到的數(shù)據(jù)進(jìn)行處理。 Buffer中是收到的數(shù)據(jù),, BufferLength是收到的數(shù)據(jù)長度,。
●OnReceiveError : procedure(Sender: Tbbbbbb; EventMask : DWORD)
當(dāng)接收數(shù)據(jù)出現(xiàn)錯(cuò)誤時(shí)將觸發(fā)該事件