謝子馨
(湖北大學(xué),湖北 武漢 430062)
計(jì)算機(jī)通信是指計(jì)算機(jī)與外部設(shè)備或計(jì)算機(jī)與計(jì)算機(jī)之間的信息交換。通信一般分為串行通信和并行通信。串行通信最顯著的優(yōu)點(diǎn)就是信號(hào)線較少,可以?xún)筛€并行同步發(fā)送數(shù)據(jù)和接收數(shù)據(jù),常用于遠(yuǎn)距離傳輸[1]。本文介紹計(jì)算機(jī)常用的串口通信接口RS-232,RS-422/RS-485,分析了接口的特點(diǎn),并對(duì)常用的通信協(xié)議——Modbus的特點(diǎn)進(jìn)行分析,給出改進(jìn)方向。
RS-232接口標(biāo)準(zhǔn)是現(xiàn)階段非常普及的串行通信接口的一種標(biāo)準(zhǔn),是美國(guó)電子工業(yè)協(xié)會(huì)(Electronic Industry Association,EIA)聯(lián)合通信工業(yè)協(xié)會(huì)(Telecommunications Industry Association,TIA)制定的串行通信標(biāo)準(zhǔn)EIA/TIA-232的簡(jiǎn)稱(chēng)[2]。
RS-232起源于為遠(yuǎn)程通信連接數(shù)據(jù)終端設(shè)備(Data Terminal Equipment,DTE)以及常見(jiàn)的數(shù)據(jù)通信設(shè)備(Data Communications Equipment,DCE)制定的標(biāo)準(zhǔn)。RS-232標(biāo)準(zhǔn)中所提到的“發(fā)送”和“接收”,都是站在DTE立場(chǎng)上,而不是站在DCE的立場(chǎng)上定義的。
在TXD和RXD上,邏輯1(MARK)為-3~-15 V;邏輯 0(SPACE)為 +3~ +15 V。在 RTS、CTS、DSR及DTR等控制線上,信號(hào)有效是正電壓+3~+15 V;信號(hào)無(wú)效是負(fù)電壓-3~-15 V。實(shí)際工作時(shí),應(yīng)保證電平的絕對(duì)值在3~15 V[3]。
RS-232總線標(biāo)準(zhǔn)指定了25腳的DB25連接器,包括一個(gè)主通道和一個(gè)輔助通道。
RS-232接口標(biāo)準(zhǔn)中,最常用的編碼格式是異步起停格式(Asynchronous Start-stop)。
波特率是指每一秒鐘設(shè)備間傳送的比特?cái)?shù)(bit/s)。RS-232有一系列波特率標(biāo)準(zhǔn),常用的有2 400 b/s、4 800 b/s及9 600 b/s等。
奇偶校驗(yàn)Parity主要用于數(shù)據(jù)準(zhǔn)確性檢驗(yàn)。傳輸過(guò)程中通常都會(huì)設(shè)定奇偶性校驗(yàn)。具體地,如果設(shè)定為偶校驗(yàn),奇偶校驗(yàn)位所處位置的傳送數(shù)字位中“1”的個(gè)數(shù)就是偶數(shù);如果設(shè)定為奇校驗(yàn),相應(yīng)位置的“1”的個(gè)數(shù)就是奇數(shù)。
停止位主要是用于接受信號(hào)方硬件重同步。
盡管設(shè)置波特率和停止位可以解決多數(shù)應(yīng)用的問(wèn)題,但是會(huì)受限于接收方過(guò)載的情況,此時(shí)必須采用握手。握手分為3種,軟件握手、硬件握手及Xmodem握手。其中,硬件握手需要用到5個(gè)針腳RTS/CTS、DTR/DSR、DCD、RTS/CTS和 DTR/DSR一起工作,一個(gè)作為輸出,另一個(gè)作為輸入。Xmodem握手通常使用在Modem通信中,也叫XModem文件傳輸協(xié)議,現(xiàn)在應(yīng)用較少。
RS-232雖然是常用的一種串行通信接口標(biāo)準(zhǔn),但仍存在幾點(diǎn)不足[3-4]。
(1)接口的信號(hào)容易造成接口電路芯片位置的損壞,且與TTL電平不兼容。
(2)傳輸速率較低,異步傳輸時(shí)一般為9 600 b/s,或者115 200 b/s。
(3)傳輸距離較短,且通信距離會(huì)受到相應(yīng)的電容約束。
考慮到RS-232串口標(biāo)準(zhǔn)存在的局限性問(wèn)題,產(chǎn)生了RS-485/422接口。RS-422標(biāo)準(zhǔn)全稱(chēng)是“平衡電壓數(shù)字接口電路的電氣特性”,隨后出現(xiàn)了更高級(jí)的RS-485。相對(duì)于RS-232,RS-485/422接口可以進(jìn)行多機(jī)通信,允許一條總線上可以連接多達(dá)32個(gè)設(shè)備,甚至可以達(dá)到256個(gè)設(shè)備。
RS-422有4根信號(hào)線,兩根發(fā)送(Y、Z)、兩根接收(A、B),可以同時(shí)收和發(fā)(全雙工)。
RS-485有2根信號(hào)線,發(fā)送和接收都是A和B,不能夠同時(shí)收和發(fā)(半雙工)。
RS-485的電氣特性驅(qū)動(dòng)器至少能輸出電壓1.5 V(終端電阻的大小與所用雙絞線的參數(shù)有關(guān))。
RS-232、RS-422及RS-485串口通信協(xié)議如表1所示。
表1 串口通信協(xié)議比較
RS-233和RS-485只定義了串行總線標(biāo)準(zhǔn),主要是電氣標(biāo)準(zhǔn)、機(jī)械結(jié)構(gòu)以及基本數(shù)據(jù)鏈路格式等,但沒(méi)有具體的數(shù)據(jù)協(xié)議。
Modbus允許多個(gè)(約240個(gè))設(shè)備連接在同一個(gè)網(wǎng)絡(luò)上進(jìn)行通信,標(biāo)準(zhǔn)的Modbus信息幀格式為起始,信息,功能,數(shù)據(jù),校驗(yàn),結(jié)束。傳輸模式有兩種,ASCII(American Standard Code for Information Interchange)和 RTU(Remote Terminal Unit)模式[5]。ASCII模式的主要優(yōu)點(diǎn)是發(fā)送的兩個(gè)字符之間間隔時(shí)間可以達(dá)到1 s。RTU模式中,兩個(gè)16進(jìn)制字符包含在一個(gè)8位的信息字節(jié)中。起始位至少要靜默3.5倍的字符時(shí)間[6]。
(1)Modbus不支持大型二進(jìn)制對(duì)象數(shù)據(jù),只能支持有限的數(shù)據(jù)類(lèi)型。
(2)速率較低,無(wú)法要求設(shè)備“報(bào)告異常”。
(3)Modbus協(xié)議并沒(méi)有足夠的加密,相應(yīng)功能碼濫用[6]。
(4)Modbus由于只能在單條數(shù)據(jù)鏈路上處理少量有限地址,因此極大程度上限制了連接到主控站點(diǎn)的有效設(shè)備數(shù)量。
(5)對(duì)于各個(gè)節(jié)點(diǎn),Modbus并沒(méi)有標(biāo)準(zhǔn)化方法匹配數(shù)據(jù)對(duì)象的描述信息。
(6)Modbus的傳輸避免了傳輸過(guò)程中存在的緩沖區(qū)漏洞的問(wèn)題,因此對(duì)于通信是一定、連續(xù)的限制。
3.3.1 安全性
首先,從源頭開(kāi)始控制,從Modbus系統(tǒng)的需求設(shè)計(jì)、開(kāi)發(fā)實(shí)現(xiàn)及內(nèi)部測(cè)試和部署等階段,全生命周期地介入安全手段,融入安全設(shè)計(jì)、安全編碼以及安全測(cè)試等技術(shù)。
其次,異常行為檢測(cè)。針對(duì)Modbus系統(tǒng),要分析其存在的各種操作行為,依據(jù)“主體,地點(diǎn),時(shí)間,訪問(wèn)方式,操作,客體”等行為描述成一個(gè)六元組模型;然后分析其行為是否屬于異常,并決定采取記錄或者報(bào)警等措施。
再次,Modbus的安全審計(jì)就是對(duì)協(xié)議數(shù)據(jù)進(jìn)行深度解碼分析,記錄操作的時(shí)間、地點(diǎn)、操作者及操作行為等關(guān)鍵信息,實(shí)現(xiàn)對(duì)Modbus系統(tǒng)的安全審計(jì)日志記錄和審計(jì)功能,從而提供安全事件爆發(fā)后的事后追查能力。
最后,使用入侵防御和防火墻等網(wǎng)絡(luò)安全設(shè)備。
3.3.2 接 線
由于某些廠家正、負(fù)極混亂,通信前要確認(rèn)線路正常:從站線接好,用萬(wàn)用表量線間電壓。
3.3.3 信號(hào)源
信號(hào)源的問(wèn)題通常是信號(hào)衰減或者有干擾源。Modbus通信的理論距離是1 200 m,距離越長(zhǎng),信號(hào)衰減越厲害,加上有一些電纜質(zhì)量較差,衰減更厲害。
3.3.4 通信地址
對(duì)于地址偏移,有時(shí)會(huì)發(fā)現(xiàn)第三方設(shè)備給的地址表和讀取的不一致,甚至無(wú)法讀出,可以嘗試往前或往后讀一位。
對(duì)于讀取數(shù)量,有些設(shè)備寄存器較小,讀太多會(huì)通信錯(cuò)誤;還有一些設(shè)備,主站讀取數(shù)量必須與從站一致。
對(duì)于從站并聯(lián),通常相同設(shè)備可以采用并聯(lián)的方式,最后通過(guò)一根電纜接到主站通信卡上。
對(duì)于主從站數(shù)據(jù)不一致,有時(shí)發(fā)現(xiàn)通信正常,但是數(shù)據(jù)與從站數(shù)據(jù)不一致,除檢查地址偏移問(wèn)題外,還要檢查數(shù)據(jù)格式是否正確。
對(duì)于數(shù)據(jù)轉(zhuǎn)換,通信中,經(jīng)常為了提高精度,從站設(shè)備數(shù)據(jù)會(huì)乘以10或者100,所以通信后,主站顯示時(shí)需要相應(yīng)地除以10或者100。
隨著工業(yè)化與信息化進(jìn)程的不斷交叉融合,計(jì)算機(jī)串口通信應(yīng)用越來(lái)越廣泛,本文給出了常用的計(jì)算機(jī)串行接口標(biāo)準(zhǔn)RS-232和RS-485的發(fā)展過(guò)程,指出了各自的優(yōu)缺點(diǎn),并分析了常用的應(yīng)用層Modbus協(xié)議,給出了詳細(xì)的數(shù)據(jù)通信格式,分析了Modbus協(xié)議的不足,指出了改進(jìn)的方向。