TCP/IP 入門經(jīng)典、OSI模型、典型工業(yè)以太網(wǎng)對(duì)比、區(qū)別

第一部分:TCP/IP 基礎(chǔ)知識(shí)
第二部分:TCP/IP 協(xié)議系統(tǒng)
第三部分:TCP/IP連網(wǎng)
第四部分:工具
第五部分:Internet
第六部分:運(yùn)行中的TCP




OSI 模型

OSI模型,即開(kāi)放式通信系統(tǒng)互聯(lián)參考模型(Open System Interconnection),這是一種事實(shí)上被TCP/IP 4層模型淘汰的協(xié)議。在當(dāng)今世界上沒(méi)有大規(guī)模使用,但對(duì)于理解網(wǎng)絡(luò)協(xié)議有幫助。OSI是一種理論下的模型,而TCP/IP已被廣泛使用,成為網(wǎng)絡(luò)互聯(lián)事實(shí)上的標(biāo)準(zhǔn)。


OSI將計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)(architecture)劃分為以下七層:

物理層: 將數(shù)據(jù)轉(zhuǎn)換為可通過(guò)物理介質(zhì)傳送的電子信號(hào)相當(dāng)于

郵局中的搬運(yùn)工人

數(shù)據(jù)鏈路層: 決定訪問(wèn)網(wǎng)絡(luò)介質(zhì)的方式

在此層將數(shù)據(jù)分幀,并處理流控制。本層 指定拓?fù)浣Y(jié)構(gòu)并提供硬件尋 址。相當(dāng)于郵局中的裝拆箱工人

網(wǎng)絡(luò)層: 使用權(quán)數(shù)據(jù)路由經(jīng)過(guò)大型網(wǎng)絡(luò) 相當(dāng)于郵局中的排序工人

傳輸層: 提供終端到終端的可靠連接 相當(dāng)于公司中跑郵局的送信職員

會(huì)話層: 允許用戶使用簡(jiǎn)單易記的名稱建立連接 相當(dāng)于公司中收寄信、寫信封與拆信封的秘書

表示層: 協(xié)商數(shù)據(jù)交換格式 相當(dāng)公司中簡(jiǎn)報(bào)老板、替老板寫信的助理

應(yīng)用層: 用戶的應(yīng)用程序和網(wǎng)絡(luò)之間的接口老板

網(wǎng)絡(luò)分層對(duì)比


工業(yè)協(xié)議的再總結(jié)

狹義上,可類似看成 profinet=profibus+ethernet,profinet 是一種新的以太網(wǎng)通訊系統(tǒng),是由西門子公司和 profibus 用戶協(xié)會(huì)開(kāi)發(fā)。 profinet 具有多制造商產(chǎn)品之間的通訊能力,自動(dòng)化和工程模式,并針對(duì)分布式智能自動(dòng)化系統(tǒng)進(jìn)行了優(yōu)化。其應(yīng)用結(jié)果能夠大大節(jié)省配置和調(diào)試費(fèi)用。 profinet 系統(tǒng)集成了基于 profibus 的系統(tǒng),提供了對(duì)現(xiàn)有系統(tǒng)投資的保護(hù)。它也可以集成其它系統(tǒng)。參考文章


Ethernet/IP:
是一個(gè)面向工業(yè)自動(dòng)化應(yīng)用的工業(yè)應(yīng)用層協(xié)議。它建立在標(biāo)準(zhǔn)UDP/IP與TCP/IP協(xié)議之上,利用固定的以太網(wǎng)硬件和軟件,為配置、訪問(wèn)和控制工業(yè)自動(dòng)化設(shè)備定義了一個(gè)應(yīng)用層協(xié)議西蒙公司開(kāi)發(fā)。


PROFINET:
由PROFIBUS國(guó)際組織(PROFIBUS International,PI)推出,是新一代基于工業(yè)以太網(wǎng)技術(shù)的自動(dòng)化總線標(biāo)準(zhǔn)。作為一項(xiàng)戰(zhàn)略性的技術(shù)創(chuàng)新,PROFINET為自動(dòng)化通信領(lǐng)域提供了一個(gè)完整的網(wǎng)絡(luò)解決方案,囊括了諸如實(shí)時(shí)以太網(wǎng)、運(yùn)動(dòng)控制、分布式自動(dòng)化、故障安全以及網(wǎng)絡(luò)安全等當(dāng)前自動(dòng)化領(lǐng)域的熱點(diǎn)話題,并且,作為跨供應(yīng)商的技術(shù),可以完全兼容工業(yè)以太網(wǎng)和現(xiàn)有的現(xiàn)場(chǎng)總線(如PROFIBUS)技術(shù),保護(hù)現(xiàn)有投資。

PROFINET是適用于不同需求的完整解決方案,其功能包括8個(gè)主要的模塊,依次為實(shí)時(shí)通信、分布式現(xiàn)場(chǎng)設(shè)備、運(yùn)動(dòng)控制、分布式自動(dòng)化、網(wǎng)絡(luò)安裝、IT標(biāo)準(zhǔn)和信息安全、故障安全和過(guò)程自動(dòng)化


MODBUS/TCP:
是簡(jiǎn)單的、中立廠商的用于管理和控制自動(dòng)化設(shè)備的MODBUS系列通訊協(xié)議的派生產(chǎn)品。顯而易見(jiàn),它覆蓋了使用TCP/IP協(xié)議的 “Intranet”和“Internet”環(huán)境中MODBUS 報(bào)文的用途。協(xié)議的最通用用途是為諸如PLC’s,I/O模塊,以及連接其它簡(jiǎn)單域總線或I/O模塊的網(wǎng)關(guān)服務(wù)的。
MODBUS/TCP協(xié)議是作為一種(實(shí)際的)自動(dòng)化標(biāo)準(zhǔn)發(fā)行的。既然MODBUS已經(jīng)廣為人知,該規(guī)范只將別處沒(méi)有收錄的少量信息列入其中。然而,本規(guī)范力圖闡明MODBUS中哪種功能對(duì)于普通自動(dòng)化設(shè)備的互用性有價(jià)值,哪些部分是MODBUS作為可編程的協(xié)議交替用于PLC’s的“多余部分”。
  它通過(guò)將配套報(bào)文類型“一致性等級(jí)”,區(qū)別那些普遍適用的和可選的,特別是那些適用于特殊設(shè)備如PLC’s的報(bào)文。


雖然這些工業(yè)以太網(wǎng)都是國(guó)際標(biāo)準(zhǔn),但是指的是IEC 61784里的標(biāo)準(zhǔn),但是這些工業(yè)以太網(wǎng)不都是標(biāo)準(zhǔn)的以太網(wǎng)。即這些工業(yè)以太網(wǎng)并不都是符合IEEE802.3U的標(biāo)準(zhǔn),這當(dāng)中只有Modbus-TCP和EtherNet/IP是符合IEEE802.3U的,只有符合IEEE802.3U標(biāo)準(zhǔn)的,才能與IT和以太網(wǎng)將來(lái)的發(fā)展相兼容。而不符合IEEE802.3U標(biāo)準(zhǔn)的,基本上可以講不是以太網(wǎng),它們都對(duì)以太網(wǎng)進(jìn)行了修改,或者是硬件或者是軟件,已經(jīng)不是以太網(wǎng)了。


各種工業(yè)以太網(wǎng)的區(qū)別:
其實(shí)主要就是協(xié)議的區(qū)別,其中最主要的還是應(yīng)用層協(xié)議的區(qū)別,我們知道,按照OSI的參考模型,網(wǎng)絡(luò)被劃分為7層。

a. Modbus TCPEtherNet/IP的區(qū)別主要是應(yīng)用層不相同,ModbusTCP的應(yīng)用層采用Modbus協(xié)議,而EtherNet/IP采用CIP協(xié)議,這兩種工業(yè)以太網(wǎng)的數(shù)據(jù)鏈路層采用的是CSMA/CD,因此是標(biāo)準(zhǔn)的以太網(wǎng),另外,這兩種工業(yè)以太網(wǎng)的網(wǎng)絡(luò)層和傳輸層采用TCP/IP協(xié)議族。還有一個(gè)區(qū)別是,Modbus協(xié)議中迄今沒(méi)有協(xié)議來(lái)完成功能安全、高精度同步和運(yùn)功控制等,而EtherNet/IP有CIPSafety、CIP Sync和CIP Motion來(lái)完成上述功能,所以才有Schneider加入ODVA,成為ODVA的核心成員來(lái)推廣EtherNet/IP。由于這兩種網(wǎng)絡(luò)都是標(biāo)準(zhǔn)的TCP/IP以太網(wǎng),所以所有標(biāo)準(zhǔn)以太網(wǎng)節(jié)點(diǎn)都可以接入這兩種網(wǎng)絡(luò)。

b. PROFINET分為原來(lái)劃分為v1,v2,v3,現(xiàn)在一般稱為ProfiNetCBAProfiNet IOProfiNet IRT.也就是通過(guò)以太網(wǎng)來(lái)實(shí)現(xiàn)對(duì)等通訊、實(shí)時(shí)控制和運(yùn)動(dòng)控制。v1采用TCP/IP協(xié)議,采用標(biāo)準(zhǔn)的以太網(wǎng),而V2和V3不采用tcp/ip協(xié)議,這兩種都繞過(guò)tcp/ip協(xié)議,采用另外的網(wǎng)絡(luò)層和傳輸層協(xié)議,開(kāi)發(fā)ProfiNet采用開(kāi)發(fā)人員人員認(rèn)為tcp/ip協(xié)議增加了數(shù)據(jù)在網(wǎng)絡(luò)中的傳輸延遲,其實(shí)這是一種誤解,據(jù)美國(guó)密歇根大學(xué)的教授研究后認(rèn)為數(shù)據(jù)在TCP/IP中的傳輸延遲很小,他們研究得出數(shù)據(jù)在經(jīng)過(guò)TCP,IP棧時(shí)延遲只有不到100微秒,如果采用UDP/IP時(shí)就更小,同時(shí)他們研究也得出數(shù)據(jù)在不同應(yīng)用層延時(shí)比較大,不同的協(xié)議延遲不一樣,但是相差不是很大,從200us-800us不等,他們經(jīng)過(guò)實(shí)驗(yàn)后認(rèn)為以太網(wǎng)的基礎(chǔ)設(shè)施(指交換機(jī)、網(wǎng)卡等)和TCP/IP協(xié)議并不是影響工業(yè)以太網(wǎng)實(shí)時(shí)性的主要原因,而認(rèn)為應(yīng)用層協(xié)議才是主要原因。所以密歇根大學(xué)的教授認(rèn)為繞開(kāi)TCP/IP協(xié)議沒(méi)有絲毫的意義,反而由于缺少了TCP/IP協(xié)議,使得設(shè)備也就缺少了IT功能,與其它現(xiàn)場(chǎng)總線沒(méi)有區(qū)別。 ProfiNet V3就更特別了,它不完全采用標(biāo)準(zhǔn)以太網(wǎng)的數(shù)據(jù)鏈路層,有一不時(shí)間采用以太網(wǎng)的數(shù)據(jù)鏈路層(CSMA/CD),而另外一部分時(shí)間采用自己的數(shù)據(jù)鏈路層,通過(guò)一個(gè)高精度的時(shí)間來(lái)完成。所以ProfiNet V3也就不是標(biāo)準(zhǔn)的以太網(wǎng)了,也就給Profinet v3帶來(lái)如下的問(wèn)題:不能采用標(biāo)準(zhǔn)的交換機(jī)、不能采用標(biāo)準(zhǔn)的以太網(wǎng)芯片、與企業(yè)網(wǎng)相連可能會(huì)出現(xiàn)問(wèn)題,與標(biāo)準(zhǔn)以太網(wǎng)相連還要特殊的網(wǎng)關(guān)、添加和刪除一個(gè)節(jié)點(diǎn)都需要重新組態(tài)網(wǎng)絡(luò)和重新啟動(dòng)網(wǎng)絡(luò)、至今沒(méi)有千兆網(wǎng)絡(luò),還有最重要的是,當(dāng)標(biāo)準(zhǔn)以太網(wǎng)以后發(fā)展了后,它不能與標(biāo)準(zhǔn)以太網(wǎng)相兼容,不具有將來(lái)以太網(wǎng)所應(yīng)具有的功能。


作者對(duì)工業(yè)協(xié)議的看法:
我認(rèn)為Ethernet/IPProfiNet這兩種工業(yè)以太網(wǎng)都適合各個(gè)行業(yè),并不象heidai講的應(yīng)用的行業(yè)不一樣。首先這兩種工業(yè)以太網(wǎng)都用于傳輸非實(shí)時(shí)數(shù)據(jù),還可傳輸實(shí)時(shí)數(shù)據(jù),即可以用于離散控制,也可用于過(guò)程控制(當(dāng)然現(xiàn)在還不能用于本安應(yīng)用)。其次,這兩種工業(yè)以太網(wǎng)都可用于網(wǎng)絡(luò)功能安全傳輸,Ethernet/IPCIP Safety協(xié)議,而ProfiNetProfisafe協(xié)議,還有在運(yùn)動(dòng)控制方面ProfiNetProfiNet IRT,而EtherNet/IP則有CIP Safety,二者都可以用于中高端的運(yùn)動(dòng)控制。最后兩者都有基于IEEE1588的高精度時(shí)鐘同步。而Modbus TCP,EtherCatPowerLink,都只能完成部分控制任務(wù),如Modbus TCP一般只作常規(guī)IO實(shí)時(shí)和非實(shí)時(shí)數(shù)據(jù)。而EtherCat和PowerLink則更象是為運(yùn)動(dòng)控制而開(kāi)發(fā)的,這二者好像沒(méi)有功能安全、在PLC和DCS控制方面也沒(méi)有得到大自動(dòng)化公司的支持,況且這兩者又對(duì)以太網(wǎng)進(jìn)行修改,一個(gè)在軟件,另一個(gè)在軟件和硬件方面都進(jìn)行了修改,都不能兼容標(biāo)準(zhǔn)的以太網(wǎng)設(shè)備,個(gè)人認(rèn)為這樣做得不償失,為滿足運(yùn)動(dòng)控制而不能兼容已有的標(biāo)準(zhǔn)的以太網(wǎng)設(shè)備而開(kāi)發(fā)的工業(yè)以太網(wǎng)并不是以太網(wǎng),與其說(shuō)是工業(yè)以太網(wǎng)還不如說(shuō)是另一種現(xiàn)場(chǎng)總線。
我認(rèn)為工業(yè)以太網(wǎng)的競(jìng)爭(zhēng)將會(huì)在Ethernet/IPProfiNet間進(jìn)行,而其它工業(yè)以太網(wǎng)都是這兩者的陪襯,將會(huì)逐漸退出市場(chǎng)。

EtherNet/IP以后將由羅克韋爾自動(dòng)化、Omron、施耐德和思科公司來(lái)推動(dòng),而ProfiNet將由業(yè)界老大西門子公司帶領(lǐng)一些小公司去奮斗,由國(guó)內(nèi)PLC廠商中的老二、老三和老五對(duì)老大,不知誰(shuí)將引導(dǎo)未來(lái)。

中國(guó)用戶和制造商應(yīng)選擇Ethernet/IP還是ProfiNet,各人的看法有所不同,不過(guò)我認(rèn)為firstrazor所說(shuō)的沒(méi)錯(cuò),由于ProfiNet采用了專門的芯片、網(wǎng)卡、交換機(jī)等以太網(wǎng)基礎(chǔ)設(shè)施,雖然ProfiNet應(yīng)用層協(xié)議是公開(kāi)的,但這些芯片卻是專用,國(guó)內(nèi)的制造商要想開(kāi)發(fā)符合ProfiNet標(biāo)準(zhǔn)的設(shè)備,確要依賴于這些芯片,受制于提供芯片的公司,也就是西門子公司,因此可以將ProfiNet并不是完全開(kāi)放的。而相反,Ethernet/IP不論是在軟件還是硬件上都是標(biāo)準(zhǔn)和開(kāi)放的,國(guó)內(nèi)的工業(yè)以太網(wǎng)制造商還是選擇EtherNet/IP為好,至于最終用戶的選擇,當(dāng)然是從可靠性、價(jià)格、兼容性和可替換性方面考慮,可靠性方面,二者沒(méi)有明顯區(qū)別,在其它方面Ethernet/IP具有明顯的優(yōu)勢(shì)。
參考文章


以太網(wǎng)

上述 profinet Ethernet/Ip 是工業(yè)以太網(wǎng),屬于以太網(wǎng)。以太網(wǎng)是局域網(wǎng)的一種。
以太網(wǎng)(Ethernet)指的是由 Xerox(施樂(lè))公司創(chuàng)建并由Xerox、Intel和 DEC公司聯(lián)合開(kāi)發(fā)的基帶局域網(wǎng)規(guī)范,通用的以太網(wǎng)標(biāo)準(zhǔn)于1980年9月30日出臺(tái),是當(dāng)今現(xiàn)有局域網(wǎng)采用的最通用的通信協(xié)議標(biāo)準(zhǔn)。

通常 數(shù)據(jù)鏈路層遵從CSMA/CD協(xié)議通信,那么 它就可以被稱為以太網(wǎng)。

ethernet采用無(wú)源的介質(zhì),按廣播方式傳播信息。它規(guī)定了 物理層和 數(shù)據(jù)鏈路層協(xié)議,規(guī)定了物理層數(shù)據(jù)鏈路層的接口以及數(shù)據(jù)鏈路層與更高層的接口。


知乎大神關(guān)于232、485、Modbus等的總結(jié)

RS232RS485是物理層的協(xié)議,定義了各線的針腳功能,連接的物理結(jié)構(gòu)。就好像各國(guó)對(duì)馬路上行車要求左行或右行一樣,規(guī)定大家都照著一個(gè)規(guī)則走。RJ45是物理接口,俗稱的水晶頭,網(wǎng)口。但并不是要求一定是網(wǎng)絡(luò)協(xié)議,比如有些設(shè)備只用了兩個(gè)針腳來(lái)連接RS485的兩線。這時(shí)候雖然是用RJ45,但走的物理協(xié)議是485。MODBUS協(xié)議是數(shù)據(jù)層的協(xié)議,打個(gè)比方來(lái)解釋下和物理層的差別:都是用聲音這種方式來(lái)交流,兩人也需要都用同一種語(yǔ)言,聲音是物理層而語(yǔ)言就是數(shù)據(jù)層。同樣,一種語(yǔ)言可以是聲音也可以是文字,MODBUS也根據(jù)在不同物理協(xié)議上通訊,可以分成MODBUS-RTU(MODBUS-ASCII)MODBUS-TCP/IP。串行口本義是包括所有串行通信在內(nèi)的所有接口,但國(guó)內(nèi)經(jīng)常用來(lái)特指電腦上的9針RS232接口,也就是DB-9。



我們先來(lái)看接口:
設(shè)想直流電源,它的輸出端插座接口有三個(gè)管腳,分別是正極、負(fù)極和接地極。相應(yīng)地,負(fù)載的插頭也應(yīng)當(dāng)有三個(gè)管腳與電源側(cè)一一對(duì)應(yīng),這樣才能正確地獲得電能供應(yīng)。
注意到這里有三個(gè)必須滿足的條件:
第一是插頭和插座管腳的形狀、大小和插針直徑及長(zhǎng)度必須一一對(duì)應(yīng),否則無(wú)法完成接插操作。這一點(diǎn)規(guī)定了插頭組合的物理結(jié)構(gòu)和管腳定義。
第二是電源的輸出電壓值必須滿足載側(cè)的需求值,否則無(wú)法完成電參量的要求。這一點(diǎn)決定了插頭組合的電平規(guī)范。
第三是電源的輸出阻抗與負(fù)載的輸入阻抗必須匹配,否則不能實(shí)現(xiàn)完善的供電。這一點(diǎn)決定了電源的工作性質(zhì)。
這三點(diǎn)其實(shí)就是電源插頭組合在物理層面上的規(guī)范性協(xié)議。
再看通信接口。在有關(guān)計(jì)算機(jī)信息交換的ISO(國(guó)際標(biāo)準(zhǔn)化組織)OSI模型里,物理層是最底層(第一層),它規(guī)定了接口的機(jī)械外形、接口管腳定義、接口電平和字節(jié)格式。
這里的字節(jié)格式,指的是一個(gè)字節(jié)中有幾個(gè)數(shù)據(jù)位,有幾個(gè)起始位/停止位,有幾個(gè)奇偶校驗(yàn)位。一般地,一個(gè)字節(jié)有8個(gè)數(shù)據(jù)位,1個(gè)起始位(停止位),和1個(gè)奇偶校驗(yàn)位。注意:起始位和停止位可以合并。
再看通信接口和通信網(wǎng)絡(luò)的工作制問(wèn)題。
當(dāng)我們拿手機(jī)掛電話時(shí),我們發(fā)現(xiàn)通信雙方在通話的同時(shí)也可以接聽(tīng),這叫做全雙工(雙向工作制);如果說(shuō)話的時(shí)候不能聽(tīng),而接聽(tīng)的時(shí)候不能說(shuō),但任何一方都具有說(shuō)和聽(tīng)的能力,也即對(duì)講機(jī)的通話型式,這叫做半雙工。

RS422接口和RS232接口是全雙工接口,而RS485則是半雙工接口。
對(duì)于半雙工接口,顯然需要有通信的發(fā)起者,所以RS485接口和網(wǎng)絡(luò)一定具有主站和若干從站,并且從站的數(shù)量也有規(guī)定。一般地,從站的數(shù)量是32個(gè)。
RS485主站與從站的關(guān)系問(wèn)題,看似只是通信工作制的不同,其本質(zhì)是通信各方對(duì)通信總線控制權(quán)的合理分配。
我們?cè)倏纯偩€連接問(wèn)題。
我們還是以電源為例。我們可以從電源引出一條主干線,然后再并聯(lián)若干個(gè)支路并分別送到若干個(gè)負(fù)載。只要滿足電源的功率要求,顯然這是可行的。
如果我們用同樣的方法來(lái)引出RS485的通信線,是否可行呢?答案是否定的。我們必須從通信主站先引一條線到第一個(gè)通信子站,再?gòu)牡谝蛔诱疽诙l線到第二子站,如此循環(huán)直到最后一個(gè)子站。在通信線的終端,還要配一個(gè)終端電阻。在這條通信線路上,任何一點(diǎn)如果發(fā)生斷路,則后續(xù)的通信鏈路上的通信也就斷了。這種接線方法形象地被稱為菊花瓣連接方法,或者鏈形連接方法,而電源的接線方法則被稱為星形連接方法。



我們發(fā)現(xiàn),從電氣接線來(lái)看,鏈路是并聯(lián)的。但從通信來(lái)看,鏈路是菊花瓣的,屬于一個(gè)接一個(gè)的有秩序的連接。
現(xiàn)在我們可以總結(jié)一下了:RS485的總線網(wǎng)絡(luò)接線方式必須是鏈形菊花瓣的接線方式,并且屬于半雙工的通信方式;RS232是點(diǎn)到點(diǎn)的接線方式,屬于全雙工通信。不管是RS232接口,還是RS485接口,它們必須符合物理層的通信規(guī)約。
再看MODBUS-RTU通信協(xié)議:
有了物理層通信接口,是不是就能通信呢?答案是否定的。物理層通信接口只是使得通信雙方具備通信條件而已。但若雙方說(shuō)的話誰(shuí)都聽(tīng)不懂,或者通信雙方的說(shuō)話方式及語(yǔ)法結(jié)構(gòu)不相符,顯然這也無(wú)法通信。
在OSI模型中,物理層之上是數(shù)據(jù)鏈路層。MODBUS-RTU協(xié)議就是數(shù)據(jù)鏈路層協(xié)議,只要通信雙方都采用了MODBUS-RTU協(xié)議,則能確保通信語(yǔ)言是雙方都能聽(tīng)得懂的語(yǔ)句格式。
注意這里的詞匯“語(yǔ)句”。物理層定義的是字節(jié),相當(dāng)于語(yǔ)言中的字,數(shù)據(jù)鏈路層則把字節(jié)組織成語(yǔ)句,也即幀。幀規(guī)定了通信雙方所用語(yǔ)句的語(yǔ)法結(jié)構(gòu)。
MODBUS也是主從式的。和物理層的總線控制是一樣的,這里的主從關(guān)系,就是對(duì)通信總線的控制權(quán)做了規(guī)定。主站先下達(dá)命令,占用總線;接著把總線空置,交給從站去寫回應(yīng)碼;從站完成后,再把總線還給主站。
現(xiàn)在我們來(lái)看看ISO的HDLC規(guī)定的幀結(jié)構(gòu),也即通信語(yǔ)句的語(yǔ)法結(jié)構(gòu),如下:


在MODBUS通信協(xié)議下,不同的命令功能碼它的幀結(jié)構(gòu)不盡相同。對(duì)于讀寄存器命令,MODBUS的主站幀結(jié)構(gòu)是:2個(gè)字節(jié)的地址碼,1個(gè)字節(jié)的功能碼,2個(gè)字節(jié)的數(shù)據(jù)地址碼,2個(gè)字節(jié)的CRC校驗(yàn)碼;MODBUS的從站回應(yīng)幀結(jié)構(gòu)是:2個(gè)字節(jié)的功能碼,1個(gè)字節(jié)的回應(yīng)區(qū)字節(jié)總數(shù),N個(gè)字節(jié)的回應(yīng)數(shù)據(jù),2個(gè)字節(jié)的CRC校驗(yàn)碼。
雖然物理層協(xié)議與數(shù)據(jù)鏈路層協(xié)議不同,但數(shù)據(jù)鏈路層協(xié)議的執(zhí)行必須建立在通信雙方物理層連接已經(jīng)符合要求,并且已經(jīng)可以無(wú)障礙地實(shí)現(xiàn)信息交互的基礎(chǔ)上。
這個(gè)規(guī)則在ISO/OSI模型的七層協(xié)議中必須完全徹底地得到執(zhí)行。在ISO/OSI模型中,通信雙方的低層次協(xié)議必須為上層協(xié)議建立透明的無(wú)故障的連接和信息交換關(guān)系。也就是說(shuō),各層次的上下級(jí)關(guān)系必須是絕對(duì)的。
從數(shù)據(jù)鏈路層再往上,就是網(wǎng)絡(luò)層了。它的任務(wù)是構(gòu)成現(xiàn)場(chǎng)總線的信息交換網(wǎng)。
網(wǎng)絡(luò)層的功能包括:把通信幀打包成數(shù)據(jù)分組,然后把數(shù)據(jù)分組發(fā)送給對(duì)方。
由于通信雙方的網(wǎng)絡(luò)結(jié)構(gòu)可能不同,于是對(duì)于同種網(wǎng)就需要用網(wǎng)橋來(lái)連接,而異種網(wǎng)則需要用網(wǎng)關(guān)來(lái)連接。
網(wǎng)絡(luò)之間的信道可能有多條。數(shù)據(jù)分組在發(fā)送時(shí)有多種路徑可以選擇。負(fù)責(zé)選擇路徑的元件稱為路由器。路由器不但決定了真實(shí)的數(shù)據(jù)交換網(wǎng)絡(luò)路徑,還可以構(gòu)建虛擬的網(wǎng)絡(luò)路徑,還要決定數(shù)據(jù)分組的發(fā)送秩序。因此,路由器是網(wǎng)絡(luò)層中最復(fù)雜最關(guān)鍵的裝備。
OSI模型中,把物理層+數(shù)據(jù)鏈路層+網(wǎng)絡(luò)層合并稱為現(xiàn)場(chǎng)總線,其通信接口就是8針的RJ45水晶頭。顯見(jiàn),RJ45與RS232/RS485/RA422完全不是一回事。
網(wǎng)絡(luò)層的數(shù)據(jù)分組是數(shù)據(jù)幀的組合。通俗地說(shuō),數(shù)據(jù)分組是一篇短文,或者是一頁(yè)待傳遞的數(shù)據(jù)組合單元。
網(wǎng)絡(luò)層在發(fā)送數(shù)據(jù)分組時(shí),其路由問(wèn)題和接收組合問(wèn)題見(jiàn)下圖:



我們看到網(wǎng)絡(luò)層在通信時(shí)先由路由器確定路由路徑,然后把分組發(fā)送到對(duì)方。對(duì)方接收到分組后,把分組按前后秩序組合起來(lái),再解包為實(shí)際文檔。
指的注意的是:由于網(wǎng)絡(luò)層有了路由器,因此網(wǎng)絡(luò)層支持星形網(wǎng)絡(luò)結(jié)構(gòu)。
現(xiàn)在我們來(lái)關(guān)注一下ISO/OSI的7層模型,如下:


值得注意的是:RS232/RS485/RS422通信接口以及它們的定義,是非常明確的。包括管腳的電平,管腳的功能定義,以及接口在信息發(fā)送和接收信息時(shí)的數(shù)據(jù)流時(shí)序關(guān)系,這些都必須準(zhǔn)確和嚴(yán)格,否則就無(wú)法執(zhí)行信息交換。

當(dāng)PLC與某電力儀表交換信息,并且這些電力儀表符合RS485/MODBUS-RTU通信規(guī)范。我們要做什么事呢?
第一,我們按菊花瓣結(jié)構(gòu)的通信鏈路要求去接線,將PLC的通信接口與N個(gè)電力儀表接口連接起來(lái)。最后一個(gè)電力儀表的末端要配100歐的終端電阻。
第二,我們把這N個(gè)電力儀表按地址遞增的原則確定各自的地址,例如01H、02H、1FH等等。這里的H表示是16進(jìn)制,1F表示16+15=31。
第三,我們?cè)赑LC編程軟件中設(shè)定好電力儀表規(guī)定的通信速率
第四,我們?cè)赑LC編程軟件中按電力儀表的數(shù)據(jù)區(qū)地址碼設(shè)定好MODBUS通信碼,以及各個(gè)子站的循環(huán)關(guān)系。
注意,這里的MODBUS通信碼滿足PLC的IEC61131-3編程模塊要求,一般的PLC梯形圖沒(méi)有此功能。梯形圖滿足IEC 61131-1要求,但不滿足IEC 61131-3要求。
第五,在PLC的內(nèi)存中開(kāi)辟專用數(shù)據(jù)區(qū),存放從電力儀表讀取到并處理后的信息,以便讓更高層的總站來(lái)讀取信息。此數(shù)據(jù)區(qū)有一個(gè)名稱,叫做數(shù)據(jù)點(diǎn)表,有時(shí)也簡(jiǎn)稱通信協(xié)議。
最后,當(dāng)然就是開(kāi)機(jī)測(cè)試了。其中的內(nèi)容很多,限于篇幅不再介紹。

我們來(lái)看一個(gè)在RS485網(wǎng)絡(luò)上用MODBUS-RTU讀取數(shù)據(jù)的例子,如下:
某電力儀表,地址是01H。在電力儀表內(nèi)存第2000的位置上,放置了三相電流和三相電壓等6個(gè)數(shù)據(jù),每個(gè)數(shù)據(jù)占用兩個(gè)字節(jié),共12個(gè)字節(jié)。
此電力儀表的通信速率是9600bps。什么意思呢?bps表示一個(gè)0/1,也就是比特,這說(shuō)明每秒鐘這條總線上可以發(fā)送9600個(gè)比特。我們已經(jīng)知道一個(gè)字節(jié)有8個(gè)數(shù)據(jù)位,1個(gè)起始位,1個(gè)奇偶校驗(yàn)位,剛好10位或者10個(gè)比特,所以,如果電力儀表的通信速率是9600bps,那么1秒鐘就可以發(fā)送:
9600/10=960個(gè)字節(jié)。
我們還知道,主站的讀數(shù)據(jù)的幀結(jié)構(gòu)(下行幀)中,有1個(gè)字節(jié)的地址,1個(gè)字節(jié)的功能碼,2個(gè)字節(jié)的內(nèi)存地址,2個(gè)字節(jié)的數(shù)據(jù)數(shù)量,2個(gè)字節(jié)的CRC校驗(yàn)碼,總共有8個(gè)字節(jié),所以主站發(fā)送讀數(shù)據(jù)MODBUS通信幀占用的時(shí)間是:8X10/9600=8.33毫秒。
對(duì)于本例,我們知道MODBUS-RUT讀數(shù)據(jù)的命令是0X03H,也即03命令。注意這里的寫法:0X是字頭,中間的03是命令,最后的H表示是16進(jìn)制。
具體通信幀的是:01 03 07 D0 00 06 C5 45,其中0X01H是地址,0X03H是命令,0X07D0H是內(nèi)存地址2000,0X0006H表示讀取連續(xù)6個(gè)字,也即內(nèi)存中的電流和電壓參數(shù),0XC545H是01 03 07 D0 00 06的CRC校驗(yàn)碼。
那么電力儀表的回應(yīng)幀(上行幀)的幀結(jié)構(gòu)是:1個(gè)字節(jié)的地址,1個(gè)字節(jié)的功能碼,1個(gè)字節(jié)的數(shù)據(jù)區(qū)字節(jié)數(shù),12個(gè)字節(jié)的數(shù)據(jù),2個(gè)字節(jié)的CRC校驗(yàn)碼,總共17個(gè)字節(jié),占用時(shí)間是:17X10/9600=17.7毫秒。
具體的儀表回應(yīng)通信幀是:01 03 0C 00 64 0064 0064 00 DC 00 DC 00 DC D6 F5,其中0X01H和0X03H的意義同前,0X0CH表示上傳數(shù)據(jù)區(qū)有12個(gè)字節(jié),0X0064H表示A相電流為100A,后面的兩組為B相和C相電流,均為100A,0X00DCH表示A相電壓為220V,其后兩組為B相和C相電壓,均為220V,最后0XD6F5H為CRC校驗(yàn)碼。
從主站發(fā)起下行通信幀,再等待10毫秒讓從站回應(yīng),再接收到從站發(fā)還的上行通信幀,總歷時(shí)為:

如果有31個(gè)相同的儀表等待主站一一訪問(wèn),則主站從訪問(wèn)第一個(gè)儀表開(kāi)始,到最后回應(yīng)完畢,總歷時(shí):

這里的1.12秒就是在通信速率為9600bps下這31臺(tái)儀表的讀數(shù)據(jù)循環(huán)周期,且忽略了主站再次發(fā)送下行通信幀的等待時(shí)間,實(shí)際時(shí)間會(huì)略微再長(zhǎng)一些。
相信,看到這里,大家對(duì)MODBUS-RTU下的通信幀應(yīng)當(dāng)有了較為深刻的認(rèn)識(shí)。
提醒大家:一個(gè)字有兩個(gè)字節(jié)。一般地,字節(jié)只能用來(lái)表達(dá)8個(gè)開(kāi)關(guān)量。但對(duì)于模擬量,則要用字來(lái)表達(dá)。例如電流1250A,16進(jìn)制下是04E2H,要用2個(gè)字節(jié)才能表達(dá)完整。也因此,各種電力儀表中,模擬量都是用字來(lái)表達(dá)的。
以下是MODBUS的部分常用功能碼,也即命令碼:



幾個(gè)相關(guān)的問(wèn)題解釋一下:
1)有些現(xiàn)場(chǎng)總線,用令牌解決了總線的控制權(quán)問(wèn)題。
大家很容易想到,如果從站有緊急事項(xiàng)需要主站來(lái)服務(wù),可是MODBUS規(guī)定了輪詢規(guī)則,等到自己的時(shí)候,可能會(huì)太遲了。于是許多現(xiàn)場(chǎng)總線就發(fā)明了一個(gè)特殊的東西,叫做令牌。令牌很短,只有一個(gè)字節(jié),它可以很快地在總線上傳遞。令牌在各站點(diǎn)中傳遞,誰(shuí)拿到令牌,誰(shuí)就是主站,就可以發(fā)布信息。如果本站沒(méi)有事情需要發(fā)布,就把令牌交給下一個(gè)站點(diǎn),由此解決了總線占用問(wèn)題。
2)當(dāng)鏈路發(fā)生斷路時(shí),為了避免出現(xiàn)通信中斷,可采用雙主站措施。雙主站(PLC的兩個(gè)主站RS485接口)之間用握手線連接,平時(shí)主用RS485開(kāi)通,而輔助RS485浮空。浮空的RS485雖然接在總線上,但它處于高阻態(tài)等效于完全脫離。當(dāng)發(fā)生斷路時(shí),從站確認(rèn)后立即開(kāi)通通信,從鏈路兩頭進(jìn)行連接通信。
有時(shí),還采取環(huán)狀通信措施。限于篇幅,不做介紹。
3)MODBUS可工作在網(wǎng)絡(luò)層,此時(shí)協(xié)議變?yōu)镸ODBUS-TCP,但還是符合主從結(jié)構(gòu)。
4)MODBUS協(xié)議是美國(guó)莫迪康公司發(fā)明的,該公司的宗旨是:MODBUS協(xié)議為不收費(fèi)的公開(kāi)協(xié)議。后來(lái)莫迪康公司被施耐德公司收購(gòu)了,施耐德公司繼承了莫迪康公司的做法,MODBUS是不收費(fèi)的公開(kāi)協(xié)議。既然MODBUS已經(jīng)成為施耐德的協(xié)議,施耐德把它延伸到網(wǎng)絡(luò)層,構(gòu)建了網(wǎng)絡(luò)層的MODBUS-TCP協(xié)議,以及內(nèi)部專用的MODBUS-PLUS協(xié)議。限于篇幅,對(duì)于這兩個(gè)協(xié)議的描述此處從略。
5)關(guān)于RS232和RS485的區(qū)別
學(xué)過(guò)模電和數(shù)電的人都知道差分電路。差分電路具有共模抑制比,能夠消除共模誤差。RS485接口就具有此特征。因此RS232接口的傳輸距離僅為十幾米,而RS485/RS422接口的傳輸距離為1200米。




我們從圖中看到,雖然RS232和RS485接口的外形是一致的,但它們的性能和信息交換模式不同,因此抗干擾能力也不同。
6)當(dāng)距離很長(zhǎng)的時(shí)候,RS485接口還可以接入光纖,但需要配備1對(duì)光纖轉(zhuǎn)換器。之所以要1對(duì),是因?yàn)槠渲幸恢挥糜陔娹D(zhuǎn)光,而第二只則用于光轉(zhuǎn)電。光纖收發(fā)器中間的通信介質(zhì)就是光纜或者光纖。(注意哦,光纖是光纜的芯線,不要以為是兩種東西)
光纖分為單模和多模。單模的光纖較細(xì),光在傳輸過(guò)程中反射較少,因而失真小,其傳輸距離可達(dá)15km以上;多模的光纖較粗,光在傳輸過(guò)程中反射較多,因而失真大,其傳輸距離為1.5km。




注意這里的f(x)就是除去CRC校驗(yàn)碼的MODBUS通信幀,除數(shù)是CRC16。幀中的CRC是運(yùn)算后的余數(shù)。
主站在發(fā)送幀之前,把幀先做CRC計(jì)算,再把CRC運(yùn)算的余數(shù)附在幀尾發(fā)送給從站。從站接收到幀后,先對(duì)幀除去CRC的部分做CRC運(yùn)算來(lái)檢驗(yàn)是否正確,若不正確,從站要求主站重發(fā)。
同理,當(dāng)從站發(fā)送信息給主站時(shí),主站也根據(jù)CRC來(lái)檢查數(shù)據(jù)的正確性。若發(fā)現(xiàn)錯(cuò)誤,則要求從站重發(fā)。
8)關(guān)于MODBUS-RTU、MODBUS-ASC和MODBUS-TCP
如果MODBUS中字節(jié)表達(dá)數(shù)據(jù)的方式采取BCD碼,則被稱為MODBUS-RTU;如果MODBUS中字節(jié)表達(dá)數(shù)據(jù)的方式采取ASCII碼,則被稱為MODBUS-ASC;如果MODBUS運(yùn)行在網(wǎng)絡(luò)層上,則被稱為MODBUS-TCP。
ASCII碼的內(nèi)容如下:


MODBUS在實(shí)際使用中,大多數(shù)都采用BCD碼,因此MODBUS-RTU得到廣泛應(yīng)用。
BCD碼如下:


知乎鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,533評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,055評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 175,365評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 62,561評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,346評(píng)論 6 404
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 54,889評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評(píng)論 3 439
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 42,118評(píng)論 0 286
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,637評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,558評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,739評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評(píng)論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 43,980評(píng)論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 34,362評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 35,619評(píng)論 1 280
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,347評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,702評(píng)論 2 370

推薦閱讀更多精彩內(nèi)容