?
?
理解串口通信以及232,485,422常見(jiàn)問(wèn)題
下面先講一講串口通信的一些基本概念,術(shù)語(yǔ)。
這里并不對串口的編程作講解,主要是從應用的角度去講一講。因為更多的時(shí)候,都是產(chǎn)品做好了,比如觸摸屏需要和控制器,PLC通信。理想的情況下,一般只要一上電,不需要太多的操作和配置,就可以通信上。在這里羅列了一些問(wèn)題,待會(huì )對這些問(wèn)題講一講,看是否有類(lèi)似的情況,也許可以一起交流分享。
1.電腦使用USB轉串口可以和設備通信上,換成屏與設備就通信不上了。
2.在A(yíng)家的屏可以和設備通信,換成B家的屏就通信不上了。
3.以前不接地線(xiàn)可以通信,換個(gè)設備為什么需要接地線(xiàn)了。
4. 一個(gè)設備是232,另一個(gè)設備是422,沒(méi)有轉換設備,怎么辦(232與422互轉的簡(jiǎn)單方法)。
5.用232通信沒(méi)問(wèn)題,用485通信沒(méi)問(wèn)題,使用232轉485之后就通信不穩定。
6.485單獨接每個(gè)設備都通信正常,多個(gè)從站接一塊通信就不穩定。7.要想實(shí)現兩個(gè)屏或兩個(gè)主站通過(guò)485訪(fǎng)問(wèn)modbus設備,有什么好的辦法。
8.針對串口通信的弱點(diǎn),在使用上應該要注意哪些地方。當然有可能實(shí)際遇到的還不只是這些問(wèn)題,可能還有一些意想不到的問(wèn)題,如果你還遇到過(guò)什么奇葩奇怪的問(wèn)題,也可以留言,一塊交流探討,一定會(huì )知無(wú)不言,言而無(wú)盡。要回答和解決以上這些問(wèn)題,還需要先了解一下什么是串口通信,232,485,422等。
什么是串口通信?
常見(jiàn)的串口通信一般是指異步串行通信。這里就要說(shuō)一下同步和異步的區別了。在此之前,還是先講一下串行通信的概念。那么,與串行通信相對的是什么呢?與串行通信相對的是并行通信。數據傳輸一般都是以字節傳輸的,一個(gè)字節8個(gè)位。拿一個(gè)并行通信舉例來(lái)說(shuō),也就是會(huì )有8根線(xiàn),每一根線(xiàn)代表一個(gè)位。一次傳輸就可以傳一個(gè)字節,而串口通信,就是傳數據只有一根線(xiàn)傳輸,一次只能傳一個(gè)位,要傳一個(gè)字節就需要傳8次。就像小虎隊那首歌一樣,把你的心,我的心,串一串,再烤一烤。。串口通信就是把數據串在一根線(xiàn)上傳輸,所以就叫串口吧。
與異步通信相對的就是同步通信了。同步通信一般是指有一個(gè)時(shí)鐘信號進(jìn)行數據信號同步。同步通信對接收方來(lái)說(shuō)就相對簡(jiǎn)單一些。因為有時(shí)鐘信號在,每一個(gè)高低電平變化一下,就去取一下數據就行了。通信速率可以由發(fā)送方或者說(shuō)是主站設備進(jìn)行控制。通信速度也相對比串口通信快很多。但是為什么很多設備,屏和plc,控制器不采用這種方式,都使用串口呢。那么,在很多設備上,不方便接太多線(xiàn),比如接8根數據線(xiàn),也不方便接同步時(shí)鐘信號(這個(gè)后面再說(shuō)),于是一種異步串行通信就誕生了。 相對來(lái)說(shuō),異步串口通信,就只需要一根線(xiàn)就可以發(fā)送數據了。在對速率要求不高的情況,使用一根線(xiàn)發(fā)送數據是帶來(lái)大大的方便和實(shí)用價(jià)值的。 那么問(wèn)題來(lái)了,怎么樣才能保證一根線(xiàn)就能發(fā)送正常的數據呢?也就說(shuō)發(fā)送方發(fā)送的數據,接收方是怎么知道是什么數據呢?為了能正常發(fā)送數據和接收正確的數據,那異步串口通信就需要滿(mǎn)足以下幾個(gè)條件:
也就是雙方必要約定一種暗號。也許當時(shí)發(fā)送這個(gè)通信的小組是這樣討論的。經(jīng)理:我要用一根線(xiàn)就能傳輸數據,你來(lái)給我定個(gè)標準。研發(fā):好。經(jīng)理:只有一根線(xiàn),我怎么知道數據什么時(shí)候開(kāi)始呢。研發(fā):就一根線(xiàn),默認是高電平,那就有一個(gè)起始位吧。當檢測到有低電平的時(shí)候,就是開(kāi)始有一個(gè)字節的數據發(fā)送了,起始位之后,先是字節的最低位,傳送一個(gè)字節。經(jīng)理:可是,就一根線(xiàn),過(guò)來(lái)的數據會(huì )不會(huì )有干擾,容易出錯呀。研發(fā):行呀,那就在字節數據后再加一個(gè)校驗位??梢宰髌嫘r?,偶校驗,1校驗,0校驗,無(wú)校驗。經(jīng)理:嗯 ,很不錯。有起始位就應該有停止位,那我們就再加個(gè)停止位在后面吧。研發(fā):。。。。。。。。。經(jīng)理:傳輸一串數據,對方要怎么知道數據的拆分呢,怎么按時(shí)間或頻率去解讀數據位,校驗位呢。研發(fā):這樣吧,雙方約定一個(gè)波特率吧,定義一個(gè)每個(gè)位占用多長(cháng)的時(shí)間,這樣雙方按這個(gè)波特率就可以處理了。經(jīng)理:這個(gè)比特率呀。。。研發(fā):老板,是波特率。經(jīng)理:我知道,是比特率嘛。研發(fā):這個(gè)波特率呢,是指1S鐘可以傳輸多個(gè)位,也就知道一個(gè)位占用多長(cháng)時(shí)間。這樣就解決傳輸的問(wèn)題了。經(jīng)理:那萬(wàn)一傳輸過(guò)程,數據太快,判斷失誤停不下來(lái)怎么辦。研發(fā):那就把停止位可以調節為1個(gè)停止位或者2個(gè)停止位。這樣就可以停下來(lái)了。經(jīng)理:嗯,聽(tīng)著(zhù)不錯。就這樣辦吧。于是,串口通信就這樣出來(lái)了。在串口的通信參數上,就有了波特率,數據位,停止位,校驗位這幾個(gè)參數來(lái)確保串口通信的正確性和穩定性。當然,這只是某個(gè)方面保證串口通信的正確性和穩定性,不代表設備間通信的正確性和穩定性。
串口通信主要為分232,485,422 通信三種方式,這三種有什么區別呢?
232:
232 通信主要是由RX,TX,GND三根線(xiàn)組成。RX與TX,TX接RX,GND接GND。這樣還是比較好理解吧。因為發(fā)送和接收分別是由不同的線(xiàn)處理的,也就是能同時(shí)發(fā)送數據和接收數據,這就是所謂的全雙工。 在這里擴展一下,串口通信還有一個(gè)功能叫做全功能串口通信,也叫標準串口。因為在兩個(gè)設備間進(jìn)行數據傳輸,有些設備處理速度比較快,有些數據比較慢。為了保證數據能正常傳輸,在RX,TX的基礎上,還增加了幾個(gè)控制引腳,本來(lái)好端端就R,T,G,三根線(xiàn),湊著(zhù)就湊齊了9個(gè)引腳,召喚出了DB9這個(gè)東西。
這要怪就怪當時(shí)使用電腦的時(shí)候,還沒(méi)有互聯(lián)網(wǎng)這個(gè)概念,但是又想在兩臺電腦間進(jìn)行通信。所以才有這樣一個(gè)東西。在后來(lái)的設備,很多控制器,人機界面,PLC等使用串口通信中,基本上就不使用標準串口,而是就直接使用RX,TX,GND三根線(xiàn)來(lái)通信了。但是這里為什么要提到這個(gè)呢。因為只是很多設備這樣用,也就是還存在少數設備還保留了標準串口的功能。這就是為什么會(huì )遇到明明電腦通信是好的,換成觸摸屏通信就不行了。因為很多觸摸屏只使用了RX,TX,GND通信,遇到一些還保留標準串口功能的就比較討厭了。485:485是為了解決232通信距離的問(wèn)題。原理什么之類(lèi)的就不多講了。
反正232通信距離就是不長(cháng)。485主要是以一種差分信號進(jìn)行傳輸,只需要兩根線(xiàn),+,-兩根線(xiàn),或者也叫A,B兩根線(xiàn)。A,B兩根線(xiàn)的差分電平信號就是作為數據信號傳輸。那么問(wèn)題來(lái)了,那是不是就沒(méi)有RX和TX的概念了。是的,發(fā)送和接收就不能分開(kāi)了。發(fā)送和接收都是靠這兩根的來(lái)傳輸,也就是每次只能作發(fā)送或者只能作接收,這就是半雙工的概念了,這在效率上就比232弱很多了。就像對講機一樣,經(jīng)常是某個(gè)人講完之后,都要說(shuō)一個(gè)over,確保當前說(shuō)完了,等待對方回復。
485就是這樣犧牲了232全雙工的效率來(lái)達到自己傳輸距離遠的代價(jià)。那有沒(méi)有即保留了232的全雙工,又可以像485這樣提高傳輸距離呢,于是,422出來(lái)了。422:422呢,有些標注為485-4。而485就標注為485-2。有什么區別呢。就是為了好記呢。485-2就是2根線(xiàn)。485-4就是4根線(xiàn)。
422就是把232的RX分成兩根線(xiàn),RX+,RX-,把TX分成TX+,TX-。這樣就可以同時(shí)發(fā)送和同時(shí)接收了,還可以像485這樣,有較遠的傳輸距離??墒沁@樣一種很有優(yōu)勢的通信方式,為什么用的不多呢。我個(gè)人的答案和理解就是:線(xiàn)太多了。特別是像我這樣懶得接線(xiàn)的人,超過(guò)3根線(xiàn)就頭暈的。搞個(gè)通信還需要接這么多線(xiàn),什么TX,RX,正啊負啊。交換來(lái)交換去。因為在很多設備通信中,基本上是屬于一問(wèn)一答式的,因此,232的全雙工通信優(yōu)勢其實(shí)也并沒(méi)有發(fā)揮出來(lái)。就像現在打電話(huà),雖然兩個(gè)人可以同時(shí)說(shuō)話(huà),但是兩個(gè)人同時(shí)說(shuō)話(huà),嘰嘰歪歪的,誰(shuí)知道說(shuō)什么呀。特別是一個(gè)主站與多個(gè)從站通信的時(shí)候,485的接線(xiàn)就就方便多了,反正大家就兩根線(xiàn),把+都接一塊,把-都接一塊。如果是422作一主多從,接線(xiàn)上還要理半天呢,而且通信異常了也不好解決。下面就對剛上提到的問(wèn)題進(jìn)行講一講!
1、電腦使用USB轉串口可以和設備通信上,換成屏與設備就通信不上了:①有可能電腦USB轉串口接到設備上,使用的是標準串口功能,也就是除了RX,TX,GDN外,還使用了其它引腳。比如像歐姆龍PLC,三菱PLC,在實(shí)際與屏的通信中,就需要接某些引腳短接的情況。②電腦與控制器或PLC通信時(shí),是掃描波特率參數,自適應的,屏通信可能參數沒(méi)有設備好。在三菱,基恩士等PLC,就存在變化波特率進(jìn)行通信交互的過(guò)程。③也有可能是接線(xiàn)方式不對。因為有些DB9,還需要公頭,母頭。如果不注意的話(huà),也會(huì )存在把TX接到TX上,把RX接到RX上,這樣需要注意的地方。④ 在這里補充一下,有時(shí)候可能會(huì )使用一些串口助手發(fā)送測試數據與控制器通信,有些串口助手的奇偶校驗是不起作用,這個(gè)要提醒一下。
2、在A(yíng)家的屏可以和設備通信,換成B家的屏就通信不上了:① 首先確認一下接線(xiàn)是否正確了,RX和TX是否兼容。② 地線(xiàn)是否沒(méi)有接。③除了RX,TX,GND,是否還有其它引腳需要短接的。④通信協(xié)議是否一致或不完善,波特率是否一樣。
3、以前不接地線(xiàn)可以通信,換個(gè)設備為什么需要接地線(xiàn)了:這個(gè)問(wèn)題和上一個(gè)有類(lèi)似的。因為有些設備使用了隔離電源。以前不接地可以通信,有可能是地線(xiàn)已經(jīng)在另外一個(gè)環(huán)路已經(jīng)共地了,實(shí)際地線(xiàn)已經(jīng)接了,所以才可以通信??赡軗Q了個(gè)帶隔離電源的,兩個(gè)設備的地是隔離的,就需要在串口上把地線(xiàn)接起來(lái)。這個(gè)我是自身經(jīng)歷過(guò)的,有個(gè)客戶(hù)老說(shuō)他的設備通信不上,后來(lái)拍個(gè)照我給我,他地線(xiàn)沒(méi)有接,他說(shuō)以前不接地線(xiàn)可以通信的。于是我就給他科普了一下。
4、一個(gè)設備是232,另一個(gè)設備是422,沒(méi)有轉換設備,怎么辦(232與422互轉的簡(jiǎn)單方法);這個(gè)情況我遇到過(guò),客戶(hù)的設備是422通信的,但是我手上并沒(méi)有422設備,只有232通信可以測試。因此就需要把422轉成232進(jìn)行通信。剛才也講了422和232的接線(xiàn),因為這兩個(gè)都是全雙工的,接收和發(fā)送都是分到的,而422只是以一種差分信號進(jìn)行傳輸。把422的Rx+與232的TX接,422的RX-與232的GND接。把422的TX+與232的RX接,422的TX-與232的GDN接。這樣,422設備要發(fā)送數據的,就可以發(fā)送到了232的RX上。232的TX發(fā)數據后,由于TX和GND也形成了差分信號給422,422就可以接收到數據了。
5、用232通信沒(méi)問(wèn)題,用485通信沒(méi)問(wèn)題,使用232轉485之后就通信不穩定。232和485從通信原理上,最大一個(gè)差別是全雙工和半雙工的區別??墒菓脤影l(fā)送數據和接收數據才不管底下是全雙工還是半雙工。但是485就得管了。因為既然是半雙工,就得嚴格保證通路上只能有發(fā)送或只能有接收的數據,一旦同時(shí)有發(fā)送和接收,數據就會(huì )沖突了。所以解決的辦法就是主站設備,也就是主動(dòng)命令的一方就需要嚴格控制好發(fā)送數據命令的節奏了。當然有些232轉485的設備做的比較好了,可以?xún)?yōu)化這個(gè),但是主站還是要控制,比較把通信速率調節慢一些(不是調節波特率)。
6、485單獨接每個(gè)設備都通信正常,多個(gè)從站接一塊通信就不穩定。
7、要想實(shí)現兩個(gè)屏或兩個(gè)主站通過(guò)485訪(fǎng)問(wèn)modbus設備,有什么好的辦法。在485通信中,基本上是一主多從。但是遇到一些客戶(hù)實(shí)際使用中,有客戶(hù)想用兩個(gè)屏來(lái)訪(fǎng)問(wèn)一個(gè)modbus設備的。目前暫時(shí)還沒(méi)有好的辦法。等這個(gè)功能出來(lái)后,再來(lái)給大家演示操作吧。
8、針對串口通信的弱點(diǎn),在使用上應該要注意哪些地方。說(shuō)來(lái)串口通信的弱點(diǎn),那就說(shuō)來(lái)話(huà)長(cháng)了。不過(guò)還是長(cháng)話(huà)短說(shuō)吧。①信號干擾的問(wèn)題。建議使用帶屏蔽線(xiàn),接線(xiàn)要嚴格,比如要接地。有些485通信上,還考慮接上終端電阻來(lái)匹配。如果是232,盡量不要讓線(xiàn)太長(cháng)。通信協(xié)議上盡量避免長(cháng)報文的數據通信。②波特率匹配的問(wèn)題。因為有些設備的計算的波特率是存在誤差的,特別是一些控制器,由于使用的晶振不一樣。因此在一些波特率比如9600波特率就存在誤差。存在誤差帶來(lái)的影響是什么呢。因為接收方是通過(guò)時(shí)間來(lái)計算一個(gè)位的。那么如果一個(gè)報文過(guò)長(cháng),就會(huì )存在誤差積累的問(wèn)題,算著(zhù)算著(zhù)就偏了。所以,這也是串口通信不穩定的一些地方,在使用上應注意避免發(fā)送太長(cháng)數據的包。③在一些可能會(huì )存在干擾的情況,在有的選的情況,可以考慮使用奇校驗或者偶校驗。因為雖說(shuō)出現錯誤的可能性不大,但既然存在干擾,如果加了校驗,至少可以把錯誤的報文過(guò)濾掉??偤帽葲](méi)有校驗然后通信數據錯了不知道?;蛘弑M量使用一些帶校驗的協(xié)議,防止數據出錯。④ 串口通信本來(lái)就比較慢,請降低對數據響應的要求。因為串口通信本身就比以太網(wǎng)慢。而且,串口通信并不是能像CPU那樣多線(xiàn)程處理。因為就一個(gè)口一個(gè)線(xiàn)數據出去,即便你應用到程序再怎么用多線(xiàn)程處理數據,但是最底下也只有一個(gè)口出去,一次也只能傳一個(gè)位,一個(gè)字節過(guò)去。因為有客戶(hù)在使用9600的波特率通信,但是又希望多少的數據可以在多少毫秒內得到響應。但是串口通信還是要事實(shí)求是,所以正確認識串口通信對應用,對開(kāi)發(fā),對溝通都有著(zhù)很大的幫助的。
為什么不用同步通信呢?
同步通信需要依賴(lài)于時(shí)鐘信號。這就存在一個(gè)問(wèn)題,這個(gè)時(shí)鐘信號是誰(shuí)來(lái)發(fā)起呢。在同步通信中,往往需要一個(gè)主設備發(fā)起時(shí)鐘信號讀從模塊的數據。在實(shí)際中,有屏讀PLC,有屏讀屏的數據。而單純地從異步串口通信來(lái)說(shuō),是沒(méi)有主從之說(shuō),雙方都是平等的角色,都可以互發(fā)信息,互收信息。而同步通信一般是應用于CPU讀一些模塊,由CPU發(fā)起時(shí)鐘信號,比如讀SD卡模塊,就可以通過(guò)SPI方式,還有一些傳感器模塊。
審核編輯:黃飛
評論
查看更多