版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Modbus
通信協(xié)議Modbus第1
頁(yè)/共46
頁(yè)通訊協(xié)議(RTU
傳輸模式)本說(shuō)明僅做內(nèi)部參考,詳細(xì)請(qǐng)參閱英文版本。Modbus
通信協(xié)議MODBUS
協(xié)議最簡(jiǎn)單又是最直白的解釋Modbus是一種單主站的主/從通信模式。Modbus網(wǎng)絡(luò)上只有一個(gè)主站,主站在Modbus網(wǎng)絡(luò)上沒(méi)有地址,從站的地址范圍為0‐247,其中0
為廣播地址,從站的實(shí)際地址范圍為1‐247。Modbus
通信標(biāo)準(zhǔn)協(xié)議可以通過(guò)各種傳輸線(xiàn)路傳播,如RS232C、RS485、光纖、無(wú)線(xiàn)電等。Modbus具有兩種串行傳輸模式,ASCII
和RTU。它們定義了數(shù)據(jù)如何打包、解碼的不同方式。支持Modbus
協(xié)議的設(shè)備一般都支持RTU
格式。通信雙方必須同時(shí)支持上述模式中的一種。上面說(shuō)的是官話(huà),下面是我說(shuō)的大白話(huà):modbus
協(xié)議也只是通訊協(xié)議的一種,沒(méi)什么神秘的,通訊協(xié)議包括兩個(gè)方面:一、通訊格式,即:波特率,檢驗(yàn)方式,數(shù)據(jù)位,停止位波特
率
:
一秒鐘傳送的位數(shù),也就是通訊速率;比如波特率為
9600,即,一秒種可以傳送
9600
個(gè)位數(shù),位的概念看下面的數(shù)據(jù)位介紹校驗(yàn)方式:奇校驗(yàn)或偶校驗(yàn)或無(wú)校驗(yàn),目的是判斷傳輸過(guò)程中是否有錯(cuò)誤!它只是用于判斷一個(gè)字符(比如八個(gè)位或是七個(gè)位組成一個(gè)字符)傳輸是否有錯(cuò)誤。但是它并不能完全能夠判斷傳輸是否有錯(cuò)。比如偶校驗(yàn),在檢驗(yàn)送八個(gè)“11111111”時(shí),如果到達(dá)接收方,由于干擾而變成了“10111101”,
“1”的個(gè)數(shù)仍然是偶數(shù),接收方就判斷不出來(lái)傳送的字符已經(jīng)錯(cuò)誤!數(shù)據(jù)位:傳輸一個(gè)字符由幾個(gè)位組成,計(jì)算機(jī)的基本單位就是“位”,其值非“0”即“1”,又如傳送A,定義通訊格式時(shí),是定義的八位,其傳送的數(shù)據(jù)可能就是:00001010;停止位:傳輸一個(gè)字符有幾個(gè)停止位,用天判斷某個(gè)字符是否傳輸結(jié)束,以便開(kāi)始接收下一個(gè)字符。通訊格式的作用是規(guī)范發(fā)送方與接收方的傳輸格式,如果雙方通訊格式不一樣,接收方就不可能正確判斷發(fā)送方發(fā)來(lái)的東西是什么。比如,接收方設(shè)置的波特率是10(一秒只接收十個(gè)位)位,而發(fā)送方的波特率是20(一秒發(fā)送二十個(gè)位),那么發(fā)送方一秒種發(fā)送的20
個(gè)字符,接收方就不可能都收到,只能接收到10
個(gè),造成通訊出錯(cuò)。校驗(yàn)方式:雙方校驗(yàn)方式不一樣,就沒(méi)有一個(gè)統(tǒng)一的標(biāo)準(zhǔn)認(rèn)定傳輸是否有錯(cuò)誤。數(shù)據(jù)位,接收方設(shè)定的七位,即它接收到七個(gè)位就認(rèn)為是一個(gè)字符,而實(shí)際發(fā)送方設(shè)定的是八位,那么接收方認(rèn)定的字符與發(fā)送方發(fā)送的字符就不一樣了。***參預(yù)通訊的雙方設(shè)定的通訊格式必須一樣的!!二、通訊規(guī)范(這個(gè)詞是我自己定義的,不能引用,會(huì)被人笑話(huà)的)通訊格式只是保證接收方正確地接收到發(fā)送方傳輸過(guò)來(lái)的每一個(gè)字符(實(shí)際如上所述,檢驗(yàn)方式并不能保證完全正確,還要靠通訊規(guī)范中的校驗(yàn)和計(jì)算來(lái)驗(yàn)證整體正確性,下面會(huì)繼續(xù)說(shuō)明),那么接收到的整串字符做什么用呢,就要靠通訊規(guī)范了MODBUS
的通訊規(guī)范很簡(jiǎn)單!第2
頁(yè)/共46
頁(yè)Modbus
通信協(xié)議先說(shuō)ASCII
方式:ASCII
方式發(fā)送時(shí)的規(guī)范定義如下:
起始符
+
設(shè)備地址
+
功能代碼第3
頁(yè)/共46
頁(yè)+
數(shù)據(jù)
+
校驗(yàn)
+
結(jié)束符1\起始符:接收到一串字符,總要知道這串字符從哪個(gè)地方開(kāi)始吧,這就是起始符的作用,接收方不管以前收到多少個(gè)字符。當(dāng)接收到起始符時(shí),以前的字符就不再理它了,從起始符開(kāi)始分析以后的字符!MODBUS
的ASCII
方式起始符是一個(gè)冒號(hào)“:“2\設(shè)備地址:前面說(shuō)過(guò),MODBUS
是單主站的主/從通信模式,一個(gè)主站下面可以接十多個(gè)從站。大家都掛在一條線(xiàn),如果沒(méi)有一個(gè)設(shè)備地址,就不知道是發(fā)給哪個(gè)從站的,大家都回應(yīng)的話(huà),這條線(xiàn)上的信號(hào)就亂七八糟了,主站也不知道接收到的是什么了。所以,設(shè)這么一個(gè)設(shè)備地址,告訴是給那個(gè)從站的。只要這個(gè)從站回答,其他的閉嘴!“二號(hào),請(qǐng)您回答,其他人就不要吱聲了?!睆V播地址(0)是命令式的,不要求從站回答的。“都聽(tīng)著,晚上全體到我家喝酒去,不去者死,散會(huì)!”設(shè)備地址是要求兩個(gè)字符,比如發(fā)給2
號(hào)站,則是“02”現(xiàn)在的組合是“:02”3\功能代碼:告訴從站應(yīng)該做什么,比如讀數(shù)據(jù)的命令是“3”,從站接收到這個(gè)命令,再根據(jù)下面數(shù)據(jù)要求的具體地址,把具體地址的數(shù)據(jù)返回給主站。功能代碼也是要求兩個(gè)字符,比如讀命令3,則是“03”現(xiàn)在的組合是“:0203”4\數(shù)據(jù):1、告訴從站具體的元件通訊地址,寫(xiě)入到哪里,從哪里讀。如讀變頻器的設(shè)定頻率的通訊地址是00A0元件的通訊地址要求是:四個(gè)字符,當(dāng)控制器的元件地址不足四個(gè)字符,則在前面補(bǔ)0,比如元件通訊地址是A0,則在前面補(bǔ)足兩個(gè)0:“00A0”
2、數(shù)據(jù)又有可能包括您要讀取的字節(jié)數(shù)(有的控制器是字?jǐn)?shù)),比如連續(xù)讀取PLC
的兩個(gè)十六位寄存器,其字節(jié)數(shù)為四個(gè),則是“0004”。您看出來(lái)了吧,讀取個(gè)數(shù)也是要求四個(gè)字符,不足四個(gè),前面補(bǔ)零現(xiàn)在的組合是“:020300A00004“3、而當(dāng)您要實(shí)現(xiàn)寫(xiě)入功能時(shí),數(shù)據(jù)又可能包括寫(xiě)入的數(shù)據(jù),比如寫(xiě)入一個(gè)十六位寄存器的值,則要包括是寫(xiě)入的數(shù)值,如“0D98”現(xiàn)在的組合是“:020600A00D98“
06
是單個(gè)寄存器的寫(xiě)入命令Modbus
通信協(xié)議4、當(dāng)連續(xù)寫(xiě)入多個(gè)寄存器時(shí),這個(gè)數(shù)據(jù)包括的內(nèi)容又不一樣,它可能是:寄存器通訊地址
(四個(gè)字符) +
字?jǐn)?shù)(四個(gè)字符)+
字節(jié)數(shù)(兩個(gè)字符)+
要寫(xiě)入的數(shù)值您看亂了嗎?沒(méi)關(guān)系的,等您拿到具體控制器時(shí),此控制器的通訊說(shuō)明上會(huì)告訴您此數(shù)據(jù)都包括什么內(nèi)容,以什么樣的格式排列!您一定為我上面四點(diǎn)中的可能字樣而生氣,您認(rèn)為講解就應(yīng)該講解的具體,而不是可能什么又可能什么!重復(fù)說(shuō)明一下MODBUS(ASCII
方式)的通訊規(guī)范,起始符
+
設(shè)備地址
+
功能代碼
+
數(shù)據(jù)
+
校驗(yàn)
+
結(jié)束符MODBUS
是一種標(biāo)準(zhǔn)通訊協(xié)議,這種標(biāo)準(zhǔn)定義了上面紅色字符的通訊規(guī)范,除了數(shù)據(jù)項(xiàng),其他的都是固定字符個(gè)數(shù)。數(shù)據(jù)呢,因?yàn)楣δ艽a的不同,其包含的內(nèi)容也不同!所以我只好說(shuō)可能包含這個(gè),可能包含那個(gè)。您無(wú)須擔(dān)心此數(shù)據(jù)變來(lái)變?nèi)?,造成接收方不知道如何分析。接收方在接收到功能代碼時(shí),就已經(jīng)知道此數(shù)據(jù)包含多少個(gè)字符了!5\檢驗(yàn)和:前面說(shuō)過(guò),通訊格式里的校驗(yàn)方式并不能保證每個(gè)字符都正確,所以這里就把所有字符的值加在一起,其和(檢驗(yàn)值)傳給接收方,接收再把接收到的字符的值加在一起,與發(fā)送方傳送過(guò)來(lái)的檢驗(yàn)值比較,如果相等,就算接收正確了。"這種方式極大地提高了傳輸?shù)目煽啃?,保證了傳輸?shù)捻樌M(jìn)行,為傳輸事業(yè)做出了巨大貢獻(xiàn)"這樣的描述讓您想到了什么?假話(huà)唄,檢驗(yàn)只是提高了校驗(yàn)的可靠性。并不能完全判斷傳輸是否正確。想要最大限度的提高傳輸?shù)目煽啃?,唯有最大限度地降低干擾!于是產(chǎn)生了232,485,422
傳輸方式,他們的區(qū)別就在于傳輸?shù)目煽啃裕?+2+3=6
3+2+1=6
這兩個(gè)字符串的作用肯定是不一樣的!但是其校驗(yàn)和是一樣的,如果在傳輸過(guò)程中,由于干擾,1
變3,3
變1,根據(jù)校驗(yàn)和的計(jì)算,接收方并不知道由于干擾而造成傳輸錯(cuò)誤,此時(shí),或是出現(xiàn)通訊錯(cuò)誤,或是出現(xiàn)通訊混亂。如,命令碼03,由于干擾而變成了30,此時(shí)校驗(yàn)和是一樣的,而MODBUS
并沒(méi)有30
這個(gè)命令碼,接收不認(rèn)識(shí),于是出現(xiàn)通訊錯(cuò)誤。再如,讀變頻器的設(shè)定頻率通訊地址是0001,由于干擾而變成了0010,此時(shí)校驗(yàn)和是一樣的,但是通訊地址卻變了,變頻器就可能返回的是其他數(shù)據(jù),造成通訊混亂!校驗(yàn)字符是要求:兩個(gè)字符,如果計(jì)算結(jié)果超過(guò)兩個(gè)字符,則取后兩位!**參加校驗(yàn)計(jì)算的字符是
起始符與校驗(yàn)符之間的字符串(不含起始符與校驗(yàn)符)現(xiàn)在的組合是“:02030A000004FB“ (假設(shè)校驗(yàn)和為
FB)02030A000004
參加校驗(yàn)和計(jì)算第4
頁(yè)/共46
頁(yè)Modbus
通信協(xié)議6\結(jié)束符:接收到一串字符,總要知道在那個(gè)地方結(jié)束吧,這就是結(jié)束符的作用,接收方不管以后還會(huì)收到多少個(gè)字符。當(dāng)接收到結(jié)束符時(shí),以后再接收的字符就算是下一輪的東西了,從起始符到結(jié)束符之間的字符就是它要分析的字符!MODBUS
的ASCII
方式結(jié)束符是‐‐‐Chr$(13)+Chr$(10)現(xiàn)在的組合是“:02030A000004FB“+Chr$(13)+Chr$(10)至此,ASCII
方式的發(fā)送就完成了,控制器接收到此串字符后,根據(jù)MODBUS
協(xié)議定義的通訊規(guī)范分析此串字符的作用,然后返回相應(yīng)的字符!注意:發(fā)送的字符都是以十六進(jìn)制數(shù)表示!控制器返回的字符根據(jù)命令的不同而不同,此處不好講解,在下面具體例子中會(huì)有說(shuō)明!再說(shuō)RTU
方式:RTU
方式發(fā)送時(shí)的規(guī)范定義如下:至少3.5
個(gè)字符傳輸時(shí)間的停頓間隔時(shí)間標(biāo)定消息的開(kāi)始定了消息的結(jié)束設(shè)備地址
+
功能代碼+
數(shù)據(jù)
+
校驗(yàn)+
至少3.5
個(gè)字符傳輸時(shí)間的停頓間隔時(shí)間標(biāo)其他的就不用說(shuō)了,與ASCII
方式一樣的作用,唯獨(dú)這3.5個(gè)字符的時(shí)間搞暈了很多人,實(shí)際我也不敢太解釋?zhuān)笾抡f(shuō)一下吧,您就當(dāng)聽(tīng)著玩,比如通訊格式是9600,E,8,1波特率是做什么的?一秒傳輸多少個(gè)位(比如一秒傳送9600
個(gè)位),一個(gè)字符是多少個(gè)位呢?通訊格式已經(jīng)標(biāo)定了(7
個(gè)位或是8
個(gè)位),那3.5
個(gè)字符的傳送時(shí)間就好算了吧:3.5*11(或
10)=39
個(gè)位(35
個(gè)位),
傳
3.5
個(gè)字符需要的時(shí)間是:39/9600=4
毫秒。不是說(shuō)八位嘛,怎么乘
11,記住了,還有一個(gè)起始位,奇或偶的校驗(yàn)位(無(wú)奇偶校驗(yàn),則沒(méi)有此位),停止位(兩個(gè)停止位就是
2
了。)如
9600,N,8,2
為
11個(gè)位,9600,N,7,1.為9
個(gè)位就是說(shuō),您得保證發(fā)送字符串的連續(xù)性,中間停頓時(shí)間超過(guò)4
毫秒,接收方就認(rèn)為您已經(jīng)發(fā)送完了這組消息,開(kāi)始處理了。這就是至少3.5
個(gè)字符傳輸時(shí)間的停頓間隔時(shí)間標(biāo)定了消息的結(jié)束的含義如果您發(fā)送的太連續(xù),下一組消息與上一組消息之間的間隔時(shí)間沒(méi)超過(guò)4
毫秒,接收方就認(rèn)為這些字符是一組消息,按一組消息去處理。所以,您發(fā)送結(jié)束一組命令后,必須間隔4
毫秒才能發(fā)送下一組命令.這就是至少3.5個(gè)字符傳輸時(shí)間的停頓間隔時(shí)間標(biāo)定消息的開(kāi)始的含義至此我的大白話(huà)結(jié)束,有什么錯(cuò)誤,請(qǐng)批評(píng),多謝!通訊協(xié)議實(shí)際也就是這回事,任何一個(gè)協(xié)議都大同小異。通訊格式,通訊規(guī)范兩種而已。第5
頁(yè)/共46
頁(yè)Modbus
通信協(xié)議您如果愿意,也可以自己定義一個(gè)通訊規(guī)范,用PLC
或是VB
語(yǔ)言按照您自己定義的這個(gè)規(guī)范處理,如果可靠性超過(guò)modbus,那您的通訊規(guī)范就是最流行的了!我經(jīng)常問(wèn)某些產(chǎn)品推廣人員,“您設(shè)備的通訊協(xié)議是什么”,他回答:“232”或是“485”。今天看了上面這些,請(qǐng)您就不要再這樣回答了。Modbus
通信標(biāo)準(zhǔn)協(xié)議可以通過(guò)各種傳輸方式傳播,如RS232C、RS485、光纖、無(wú)線(xiàn)電等。
“232”或是“485”只是一種線(xiàn)路傳輸方式,與協(xié)議是無(wú)關(guān)的!232
傳輸抗干擾性差,485
傳輸抗干擾相對(duì)強(qiáng)。MODBUS
做為一種標(biāo)準(zhǔn)的協(xié)議,應(yīng)用于各種PLC,控制器,儀表。這些儀表或是控制器應(yīng)用中,元件的通訊地址肯定是不一樣了;各個(gè)命令碼的各部分組成的意義也許也會(huì)不同;但是,它一定會(huì)遵守MODBUS
的協(xié)議規(guī)范。即,每個(gè)命令碼的組成一定符合MODBUS
的規(guī)范!一樣不多,一樣不少!下面針對(duì)某種支持MODBUS
協(xié)議的控制器,說(shuō)一下具體的讀/寫(xiě)例子1\
讀某控制器的十五個(gè)寄存器值,發(fā)送的字符串是:(ASCII
方式)":01031000000FDD"+Chr$(13)+Chr$(10)起始符“:”+站號(hào)(01)
+讀命令(03)+起始寄存器通訊地址(1000)+字?jǐn)?shù)(15;轉(zhuǎn)換成十六進(jìn)制000F)+校驗(yàn)和(DD)+結(jié)束符控制器返回的字符數(shù)是71
個(gè)起始符“:”
+
站號(hào)(01)
+
讀命令(03)+
字?jǐn)?shù)(0F)+
60
個(gè)數(shù)據(jù)字符(一個(gè)寄存器是
4
個(gè),一共十五個(gè))
+
校驗(yàn)和(DD)+
結(jié)束符(兩個(gè))2\
分別向某控制器兩個(gè)寄存器寫(xiě)入數(shù)值,發(fā)送的字符串是:(ASCII
方式)":
01101000000204"+
寫(xiě)入的數(shù)值(8
個(gè)字符)+
校驗(yàn)和
+ Chr$(13)
+
Chr$(10)起始符“:”
+
站號(hào)(01)
+
寫(xiě)命令(10)+
起始寄存器通訊地址(1000)+
字?jǐn)?shù)(2;轉(zhuǎn)換成十六進(jìn)制
0002)+
字節(jié)數(shù)(04) +
校驗(yàn)和(因?yàn)閷?xiě)入數(shù)值是變化的,需要得經(jīng)過(guò)計(jì)算得出校驗(yàn)和)+
結(jié)束符控制器返回的字符數(shù)是17個(gè)第6
頁(yè)/共46
頁(yè)Modbus
通信協(xié)議起始符“:”
+
站號(hào)(01)
+
寫(xiě)命令(10)+
起始寄存器通訊地址(1000)+
字?jǐn)?shù)(02)+
錯(cuò)誤碼(2
個(gè))
+
校驗(yàn)和(DD)+
結(jié)束符(兩個(gè))***錯(cuò)誤碼,當(dāng)通訊正確時(shí)是什么,通訊錯(cuò)誤時(shí)是什么,具體控制器會(huì)有說(shuō)明讀其他儀表的某值時(shí),參照上述讀的規(guī)范,也就是更改一下起始寄存器通訊地址、字?jǐn)?shù)、校驗(yàn)和(校驗(yàn)和是編制程序塊自動(dòng)計(jì)算的。)要讀多個(gè)儀表的同一個(gè)檢測(cè)值更簡(jiǎn)單,更改站號(hào)就可以了。MODBUS
是以串行通信為基礎(chǔ),通過(guò)一位接著一位的方式進(jìn)行傳送數(shù)據(jù)。MODBUS
有三種PDU
類(lèi)型‐‐通信過(guò)程請(qǐng)求
--
來(lái)自(控制器)
主機(jī)的請(qǐng)求響應(yīng)
--
從站做出的無(wú)差錯(cuò)處理過(guò)程異常響應(yīng)
--
從站做出的將請(qǐng)求的原始功能碼修改后(將最高位置位為邏輯一)
返回第7
頁(yè)/共46
頁(yè)Modbus
通信協(xié)議第一章
Modbus
協(xié)議簡(jiǎn)介Modbus
協(xié)議是應(yīng)用于控制器上的一種通用語(yǔ)言。通過(guò)此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)(例如以太網(wǎng))和其它設(shè)備之間可以通信。它已經(jīng)成為一通用工業(yè)標(biāo)準(zhǔn)。有了它,不同廠(chǎng)商生產(chǎn)的控制設(shè)備可以連成工業(yè)網(wǎng)絡(luò),進(jìn)行集中監(jiān)控。此協(xié)議定義了一個(gè)控制器能認(rèn)識(shí)使用的消息結(jié)構(gòu),而不管它們是經(jīng)過(guò)何種網(wǎng)絡(luò)進(jìn)行通信的。它描述了一控制器請(qǐng)求訪(fǎng)問(wèn)其它設(shè)備的過(guò)程,如果回應(yīng)來(lái)自其它設(shè)備的請(qǐng)求,以及怎樣偵測(cè)錯(cuò)誤并記錄。它制定了消息域格局和內(nèi)容的公共格式。當(dāng)在一個(gè)Modbus網(wǎng)絡(luò)上通信時(shí),此協(xié)議決定了每個(gè)控制器須要知道它們的設(shè)備地址,識(shí)別按地址發(fā)來(lái)的消息,決定要產(chǎn)生何種行動(dòng)。如果需要回應(yīng),控制器將生成反饋信息并用Modbus
協(xié)議發(fā)出。在其它網(wǎng)絡(luò)上,包含了Modbus
協(xié)議的消息轉(zhuǎn)換為在此網(wǎng)絡(luò)上使用的幀或包結(jié)構(gòu)。這種轉(zhuǎn)換也擴(kuò)展了根據(jù)具體的網(wǎng)絡(luò)解決節(jié)地址、路由路徑及錯(cuò)誤檢測(cè)的方法。協(xié)議在一根通訊線(xiàn)上使用應(yīng)答式連接(半雙工),這意味著在一根單獨(dú)的通訊線(xiàn)上信號(hào)沿著相反的兩個(gè)方向傳輸。首先,主計(jì)算機(jī)的信號(hào)尋址到一臺(tái)唯一的終端設(shè)備(從機(jī)),然后,在相反的方向上終端設(shè)備發(fā)出的應(yīng)答信號(hào)傳輸給主機(jī)。第8
頁(yè)/共46
頁(yè)協(xié)議只允許在主計(jì)算機(jī)和終端設(shè)備之間,而機(jī)的查詢(xún)信號(hào)。1.1
傳輸方式不允許獨(dú)立的設(shè)備之間的數(shù)據(jù)交換。這就不會(huì)在使它們初始化時(shí)占據(jù)通訊線(xiàn)路,而僅限于響應(yīng)到達(dá)本傳輸方式是一個(gè)信息幀內(nèi)一系列獨(dú)立的數(shù)據(jù)結(jié)構(gòu)以及用于傳輸數(shù)據(jù)的有限規(guī)則,以RTU
模式在Modbus
總線(xiàn)上進(jìn)行通訊時(shí),信息中的每8
位字節(jié)分成2個(gè)4
位16
進(jìn)制的字符,每個(gè)信息必須連續(xù)傳輸下面定義了與Modebus
協(xié)議–RTU
方式相兼容的傳輸方式。代碼系統(tǒng)8位二進(jìn)制,十六進(jìn)制數(shù)0...9,A...F消息中的每個(gè)8位域都是一個(gè)兩個(gè)十六進(jìn)制字符組成每個(gè)字節(jié)的位1個(gè)起始位8個(gè)數(shù)據(jù)位,最小的有效位先發(fā)送1個(gè)奇偶校驗(yàn)位,無(wú)校驗(yàn)則無(wú)Modbus
通信協(xié)議1
個(gè)停止位(有校驗(yàn)時(shí)),2
個(gè)Bit(無(wú)校驗(yàn)時(shí))錯(cuò)誤檢測(cè)域CRC(循環(huán)冗長(zhǎng)檢測(cè))協(xié)議當(dāng)信息幀到達(dá)終端設(shè)備時(shí),它通過(guò)一個(gè)簡(jiǎn)單的“口”進(jìn)入尋址到的設(shè)備,該設(shè)備去掉數(shù)據(jù)幀的“信封”(數(shù)據(jù)頭),讀取數(shù)據(jù),如果沒(méi)有錯(cuò)誤,就執(zhí)行數(shù)據(jù)所請(qǐng)求的任務(wù),然后,它將自己生成的數(shù)據(jù)加入到取得的“信封”中,把數(shù)據(jù)幀返回給發(fā)送者。返回的響應(yīng)數(shù)據(jù)中包含了以下內(nèi)容:終端從機(jī)地址(Address)、被執(zhí)行了的命令(Function)、執(zhí)行命令生成的被請(qǐng)求數(shù)據(jù)(Data)和一個(gè)校驗(yàn)碼(Check)。發(fā)生任何錯(cuò)誤都不會(huì)有成功的響應(yīng)。信息幀第9
頁(yè)/共46
頁(yè)AddressFunctionDataCheck8‐Bits8‐BitsNx8‐Bits16‐Bits圖1–1.信息幀格式特注:Modbus
信息幀所允許的最大長(zhǎng)度為256個(gè)字節(jié),即N的范圍是大于等于零且小于等于252(
N{0,252})。即,所有的數(shù)據(jù)一共256
個(gè),數(shù)據(jù)剩下253
個(gè)。地址(Address)域信息幀地址域(信息地址)在幀的開(kāi)始部分,由8
位組成,有效的從機(jī)設(shè)備地址范圍0‐247(十進(jìn)制),各從機(jī)設(shè)備的尋址范圍為1‐247。主機(jī)把從機(jī)地址放入信息幀的地址區(qū),并向從機(jī)尋址。從機(jī)響應(yīng)時(shí),把自己的地址放入響應(yīng)信息的地址區(qū),讓主機(jī)識(shí)別已作出響應(yīng)的從機(jī)地址。地址0
為廣播地址,所有從機(jī)均能識(shí)別。當(dāng)Modbus
協(xié)議用于高級(jí)網(wǎng)絡(luò)時(shí),則不允許廣播或其它方式替代。功能(Function)域信息幀功能域代碼告訴了被尋址到的終端執(zhí)行何種功能。有效碼范圍1‐225(十進(jìn)制),有些代碼是適用于所有控制器,有些適應(yīng)于某種控制器,還有些保留以備后用。有關(guān)功能代替碼的全部?jī)?nèi)容見(jiàn)附錄A
。當(dāng)主機(jī)向從句發(fā)送信息時(shí),功能代碼向從機(jī)說(shuō)明應(yīng)執(zhí)行的動(dòng)作。如讀一組離散式線(xiàn)圈或輸入信號(hào)的ON/OFF
狀態(tài),讀一組寄存器的數(shù)據(jù),讀從機(jī)的診斷狀態(tài),寫(xiě)線(xiàn)圈(或寄存器),允許下截、記錄、確認(rèn)從機(jī)內(nèi)的程序等。當(dāng)從機(jī)響應(yīng)主機(jī)時(shí),功能代碼可說(shuō)明從機(jī)正常響應(yīng)或出現(xiàn)錯(cuò)誤(即不正常響應(yīng)),正常響應(yīng)時(shí),從句簡(jiǎn)單返回原始功能代碼;不正常響應(yīng)時(shí),從機(jī)返回與原始代碼相等效的一個(gè)碼,并把最高有效位設(shè)定為“1”。Modbus
通信協(xié)議如,主機(jī)要求從機(jī)讀一組保持寄存器時(shí),則發(fā)送信息的功能碼為:0000
0011(十六進(jìn)制03)若從機(jī)正確接收請(qǐng)求的動(dòng)作信息后,則返回相同的代碼值作為正常響應(yīng)。發(fā)現(xiàn)錯(cuò)時(shí),則返回一個(gè)不正常響信息:1000
0011(十六進(jìn)制83)從機(jī)對(duì)功能代碼作為了修改,此外,還把一個(gè)特殊碼放入響應(yīng)信息的數(shù)據(jù)區(qū)中,告訴主機(jī)出現(xiàn)的錯(cuò)誤類(lèi)型和不正常響應(yīng)的原因,不正常響應(yīng)見(jiàn)附錄B。主機(jī)設(shè)備的應(yīng)用程序負(fù)責(zé)處理不正常響應(yīng),典型處理過(guò)程是主機(jī)把對(duì)信息的測(cè)試和診斷送給從機(jī),并通知操作者。表1–1
列出了所有設(shè)備常用的功能碼、它們的意義及它們的初始功能。表1–1
常用功能碼第10
頁(yè)/共46
頁(yè)代碼名稱(chēng)作用01讀取線(xiàn)圈狀態(tài)取得一組邏輯線(xiàn)圈的當(dāng)前狀態(tài)(ON/OFF)02讀取輸入狀態(tài)取得一組開(kāi)關(guān)輸入的當(dāng)前狀態(tài)(ON/OFF)03讀取保持寄存器在一個(gè)或多個(gè)保持寄存器中取得當(dāng)前的二進(jìn)制值04讀取輸入寄存器在一個(gè)或多個(gè)輸入寄存器中取得當(dāng)前的二進(jìn)制值05強(qiáng)置單線(xiàn)圈強(qiáng)置一個(gè)邏輯線(xiàn)圈的通斷狀態(tài)06預(yù)置單寄存器放置一個(gè)特定的二進(jìn)制值到一個(gè)單寄存器中07讀取異常狀態(tài)取得8
個(gè)內(nèi)部線(xiàn)圈的通斷狀態(tài)15強(qiáng)置多線(xiàn)圈強(qiáng)置一串連續(xù)邏輯線(xiàn)圈的通斷16預(yù)置多寄存器放置一系列特定的二進(jìn)制值到一系列多寄存器中17報(bào)告從機(jī)標(biāo)識(shí)可使主機(jī)判斷編址從機(jī)的類(lèi)型及該從機(jī)運(yùn)行指示燈的狀態(tài)數(shù)據(jù)域數(shù)據(jù)域包含了終端執(zhí)行特定功能所需要的數(shù)據(jù)或者終端響應(yīng)查詢(xún)時(shí)采集到的數(shù)據(jù)。這些數(shù)據(jù)的內(nèi)容可能是數(shù)值、參考地址或者極限值。他由數(shù)據(jù)區(qū)有
2
個(gè)16
進(jìn)制的數(shù)據(jù)位(2
的8
次方256),數(shù)據(jù)范圍為00‐FF(16
進(jìn)制)。例如:功能域碼告訴終端讀取一個(gè)寄存器,數(shù)據(jù)域則需要指明從哪個(gè)寄存器開(kāi)始及讀取多少個(gè)數(shù)據(jù),內(nèi)嵌的地址和數(shù)據(jù)依照類(lèi)型和從機(jī)之間的不同能力而有所不同。若無(wú)錯(cuò)誤出現(xiàn),從機(jī)向主機(jī)的響應(yīng)信息中包含了請(qǐng)求數(shù)據(jù),若有錯(cuò)誤出現(xiàn),則數(shù)據(jù)中有一個(gè)不正常代碼,使主機(jī)能判斷并作出下一步的動(dòng)作。數(shù)據(jù)區(qū)的長(zhǎng)度可為“零”以表示某類(lèi)信息。錯(cuò)誤校驗(yàn)域Modbus
通信協(xié)議該域允許主機(jī)和終端檢查傳輸過(guò)程中的錯(cuò)誤。有時(shí),由于電噪聲和其它干擾,一組數(shù)據(jù)在從一個(gè)設(shè)備傳輸?shù)搅硪粋€(gè)設(shè)備時(shí)在線(xiàn)路上可能會(huì)發(fā)生一些改變,出錯(cuò)校驗(yàn)?zāi)軌虮WC主機(jī)或者終端不去響應(yīng)那些傳輸過(guò)程中發(fā)生了改變的數(shù)據(jù),這就提高了系統(tǒng)的安全性和效率,出錯(cuò)校驗(yàn)使用了16
位循環(huán)冗余的方法,即CRC
校驗(yàn)。錯(cuò)誤檢測(cè)域包含一個(gè)16Bits
值(用兩個(gè)8
位的字符來(lái)實(shí)現(xiàn))。錯(cuò)誤檢測(cè)域的內(nèi)容是通過(guò)對(duì)消息內(nèi)容進(jìn)行循環(huán)冗長(zhǎng)檢測(cè)方法得出的。CRC
域附加在消息的最后,添加時(shí)先是低字節(jié)然后是高字節(jié)。故CRC
的高位字節(jié)是發(fā)送消息的最后一個(gè)字節(jié)。1.2.6
字符的連續(xù)傳輸當(dāng)消息在標(biāo)準(zhǔn)的Modbus
系列網(wǎng)絡(luò)傳輸時(shí),每個(gè)字符或第11
頁(yè)/共46
頁(yè)字節(jié)按由左到右的次序方式發(fā)送:最低有效位(LSB)...最高有效位(MSB)。位的序列是:有奇偶校驗(yàn)啟始位12345678奇偶位停止位無(wú)奇偶校驗(yàn)啟始位12345678停止位停止位圖1–2.位順序(RTU)1.3
錯(cuò)誤檢測(cè)1、奇偶校驗(yàn)Modbus
通信協(xié)議用戶(hù)可以配置控制器是奇或偶校驗(yàn),或無(wú)校驗(yàn)。這將決定了每個(gè)字符中的奇偶校驗(yàn)位是如何設(shè)置的。如果指定了奇或偶校驗(yàn),“1”的位數(shù)將算到每個(gè)字符的位數(shù)中(ASCII
模式7
個(gè)數(shù)據(jù)位,RTU
中8
個(gè)數(shù)據(jù)位)。例如RTU
字符幀中包含以下8
個(gè)數(shù)據(jù)位:11
0
0
0
10
1整個(gè)“1”的數(shù)目是4
個(gè)。如果便用了偶校驗(yàn),幀的奇偶校驗(yàn)位將是0,便得整個(gè)“1”的個(gè)數(shù)仍是4個(gè)。如果便用了奇校驗(yàn),幀的奇偶校驗(yàn)位將是1,便得整個(gè)“1”的個(gè)數(shù)是5個(gè)。如果沒(méi)有指定奇偶校驗(yàn)位,傳輸時(shí)就沒(méi)有校驗(yàn)位,也不進(jìn)行校驗(yàn)檢測(cè)。代替一附加的停止位填充至要傳輸?shù)淖址麕小?、CRC
檢測(cè)RTU
方式時(shí),采用CRC
方法計(jì)算錯(cuò)誤校驗(yàn)碼,CRC
校驗(yàn)傳送的全部數(shù)據(jù)。它忽略信息中單個(gè)字符數(shù)據(jù)的奇偶校驗(yàn)方法。循環(huán)冗余校驗(yàn)(CRC)域占用兩個(gè)字節(jié),包含了一個(gè)16
位的二進(jìn)制值。CRC
值由傳送設(shè)備計(jì)算出來(lái),然后附加到數(shù)據(jù)幀上,接收設(shè)備在接收數(shù)據(jù)時(shí)重新計(jì)算CRC
值,然后與接收到的CRC
域中的值進(jìn)行比較,如果這兩個(gè)值不相等,就發(fā)生了錯(cuò)誤。CRC
開(kāi)始時(shí)先把寄存器的16位全部置成“1”,然后把相鄰2個(gè)8位字節(jié)的數(shù)據(jù)放入當(dāng)前寄存器中,只有每個(gè)字符的8位數(shù)據(jù)用作產(chǎn)生CRC,起始位,停止位和奇偶校驗(yàn)位不加到CRC
中。在生成CRC
時(shí),每個(gè)8
位字節(jié)與寄存器中的內(nèi)容進(jìn)行異或,然后將結(jié)果向低位移位,高位則用“0”補(bǔ)充,最低位(LSB)移出并檢測(cè),如果是1,該寄存器就與一個(gè)預(yù)設(shè)的固定值進(jìn)行一次異或運(yùn)算,如果最低位為0,不作任何處理。上述處理重復(fù)進(jìn)行,知道執(zhí)行完了8
次移位操作,當(dāng)最后一位(第8
位)移完以后,下一個(gè)8
位字節(jié)與寄存器材的當(dāng)前值進(jìn)行異或運(yùn)算,同樣進(jìn)行上述的另一個(gè)8
次移位異或操作,當(dāng)數(shù)據(jù)幀中的所有字節(jié)都作了處理,生成的最終值就是CRC
值。生成一個(gè)CRC
的流程為:1、 預(yù)置一個(gè)
16
位寄存器為
0FFFFH(全
1),稱(chēng)之為
CRC
寄存器。2、 把數(shù)據(jù)幀中的第一個(gè)
8
位字節(jié)與
CRC
寄存器中的低字節(jié)進(jìn)行異或運(yùn)算,結(jié)果存回
CRC
寄存器。3、 將
CRC寄存器向右移一位,最高位填以
0,最低位移出并檢測(cè)。4、 如果最低位為
0:重復(fù)第
3
步(下一次移位)。如果最低位為1:將CRC
寄存器與一個(gè)預(yù)設(shè)的固定值(0A001H)進(jìn)行異或運(yùn)算。5、 重復(fù)第
3
步和第
4
步直到
8
次移位。這樣處理完了一個(gè)完整的八位。6、 重復(fù)第
2
步到第
5
步來(lái)處理下一個(gè)八位,直到所有的字節(jié)處理結(jié)束。7、 最終
CRC
寄存器得值就是
CRC
的值。CRC
值附加到信息時(shí),低位在先,高位在后。查閱附錄C
中的一個(gè)實(shí)例,它詳細(xì)說(shuō)明了CRC
的校驗(yàn)。第12
頁(yè)/共46
頁(yè)Modbus
通信協(xié)議第二章
Modbus
數(shù)據(jù)和控制功能詳解Modbus
信息中的所有數(shù)據(jù)地址以“零”作為基準(zhǔn),各項(xiàng)數(shù)據(jù)的第一個(gè)數(shù)據(jù)地址的編號(hào)為0
。若無(wú)特殊說(shuō)明在此節(jié)文中用+進(jìn)制值表示,圖中的數(shù)據(jù)區(qū)則用十六進(jìn)制表示。圖2‐‐1
為一個(gè)例子,說(shuō)明了Modbus
的查詢(xún)信息,圖2‐‐2
為正常響應(yīng)的例子,這兩例子中的數(shù)據(jù)均是16
進(jìn)制的,也表示了以RTU
方式構(gòu)成數(shù)據(jù)幀的方法。主機(jī)查詢(xún)是讀保持寄存器,被請(qǐng)求的從機(jī)地址是06,讀取的數(shù)據(jù)來(lái)自地址40108
保持寄有器。注意,該信息規(guī)定了寄存器的起始地址為0107(006BH)。從機(jī)響應(yīng)返回該功能代碼,說(shuō)明是正常響應(yīng),字節(jié)數(shù)“Bytecount”中說(shuō)明有多少個(gè)8
位字節(jié)被返回。它表明了附在數(shù)據(jù)區(qū)中8
個(gè)字節(jié)的數(shù)量,當(dāng)在緩沖區(qū)組織響應(yīng)信息時(shí),“字節(jié)數(shù)”區(qū)域中的值應(yīng)與該信息中數(shù)據(jù)區(qū)的字節(jié)數(shù)相等。如RTU
方式時(shí),63H
用一個(gè)字節(jié)(01100011)發(fā)送。8
個(gè)位為一個(gè)單位計(jì)算“字節(jié)數(shù)”,它忽略了信息幀用組成的方法。第13
頁(yè)/共46
頁(yè)AddrFunData
startreg
hiData
startreg
loData
#ofregs
hiData
#ofregs
loCRC16hiCRC16lo06H03H00H6BH00H01HXXHXXH圖2–1
Modbus
的查詢(xún)信息AddrFunBytecountData1hiData1LoData
2hiData2loData3hiData3loCRC16hiCRC16lo06H03H06H02H2BH00H00H00H63HXXHXXH圖2–2
Modbus
的響應(yīng)信息2.1
讀取線(xiàn)圈狀態(tài)(功能碼01)讀取從機(jī)離散量輸出口(DO,0X類(lèi)型)的ON/OFF
狀態(tài),不支持廣播。查詢(xún)Modbus
通信協(xié)議查詢(xún)信息規(guī)定了要讀的起始線(xiàn)圈和線(xiàn)圈量,線(xiàn)圈的起始地址為0000H,1‐16個(gè)線(xiàn)圈的尋址地址分為0000H
–0015H(DO1=0000H,DO2=0001H,依此類(lèi)推)。圖2–3
的例子是從地址為17
的從機(jī)讀取DO1
至DO6
的狀態(tài)。第14
頁(yè)/共46
頁(yè)AddrFunDO
startreg
hiDO
startreg
loDO
#ofregs
hiDO
#ofregs
loCRC16hiCRC16lo11H01H00H00H00H06HXXHXXH圖2–3
讀取線(xiàn)圈狀態(tài)‐‐‐‐查詢(xún)響應(yīng)響應(yīng)信息中的各線(xiàn)圈的狀態(tài)與數(shù)據(jù)區(qū)的每一位的值相對(duì)應(yīng),即每個(gè)DO
占用一位(1=ON,
0=OFF),第一個(gè)數(shù)據(jù)字節(jié)的LSB
為查詢(xún)中的尋址地址,其他的線(xiàn)圈按順序在該字節(jié)中由低位向高位排列,直至8
個(gè)為止,下一個(gè)字節(jié)也是從低位向高位排例。若返回的線(xiàn)圈數(shù)不是8
的倍數(shù),則在最后的數(shù)據(jù)字節(jié)中的剩余位至字節(jié)的最高位全部填0,字節(jié)數(shù)區(qū)說(shuō)明全部數(shù)據(jù)的字節(jié)數(shù)。圖2–4
所示為線(xiàn)圈的輸出狀態(tài)響應(yīng)的實(shí)例。AddrFunByte
countDataCRC16
hiCRC16
lo11H01H01H2AHXXHXXH數(shù)據(jù)000000DO2DO1MSB765432LSB圖2–4
讀取線(xiàn)圈狀態(tài)‐‐‐‐響應(yīng)2.2
讀取輸入狀態(tài)(功能碼02)Modbus
通信協(xié)議讀取從機(jī)離散量輸入信號(hào)(DI,0X
類(lèi)型)的ON/OFF狀態(tài),不支持廣播。查詢(xún)查詢(xún)信息規(guī)定了要讀的輸入起始地址,以及輸入信號(hào)的數(shù)量。輸入的起始地址為0000H,1‐16
個(gè)輸入口的地址分別為0‐15(DO1=0000H,DO2=0001H,依此類(lèi)推)。圖2–5
的例子是從地址為17
的從機(jī)讀取DI1
到DI16
的狀態(tài)。第15
頁(yè)/共46
頁(yè)AddrFunDIstartaddr
hiDIstartaddr
loDI
numhiDI
numloCRC16hiCRC16lo11H02H00H00H00H10HXXHXXH圖2–5
讀取輸入狀態(tài)‐‐‐‐查詢(xún)響應(yīng)響應(yīng)信息中的各輸入口的狀態(tài),分別對(duì)應(yīng)于數(shù)據(jù)區(qū)中的每一位值,1=ON;0=OFF,第一個(gè)數(shù)據(jù)字節(jié)的LSB
為查詢(xún)中的尋址地址,其他輸入口按順序在該字節(jié)中由低位向高位排列,直至8
個(gè)位為止。下一個(gè)字節(jié)中的8
個(gè)輸入位也是從低位到高位排列。若返回的輸入位數(shù)不是8
的倍數(shù),則在最后的數(shù)據(jù)字節(jié)中的剩余位直至字節(jié)的最高位全部填零。字節(jié)數(shù)區(qū)說(shuō)明了全部數(shù)據(jù)的字節(jié)數(shù)。圖2–6
所示為讀數(shù)字輸出狀態(tài)響應(yīng)的實(shí)例。AddrFunByte
counData1Data2CRC16
hiCRC16
lo11H02H02H33HCCHXXHXXH數(shù)據(jù)1DI8DI7DI6DI5DI4DI3DI2DI1MSBLSB數(shù)據(jù)2DI16DI15DI14DI13DI12DI11DI10DI9MSBLSB圖2–6
讀取輸入狀態(tài)‐‐‐‐響應(yīng)Modbus
通信協(xié)議2.3
讀取保持寄存器(功能碼03)讀取從機(jī)保持寄存器(4X
類(lèi)型)的二進(jìn)制數(shù)據(jù),不支持廣播。查詢(xún)查詢(xún)信息規(guī)定了要讀的保持寄存器起始地址及保持寄存器的數(shù)量,保持寄存器尋址起始地址為0000H,寄存器1‐16
所對(duì)應(yīng)的地址分別為0000H–0015H。圖2–7
的例子是從17
號(hào)從機(jī)讀3
個(gè)采集到的基本數(shù)據(jù)U1、U2、U3,U1
的地址為0000H,
U2
的地址為0001H,U3
的地址為0002H。第16
頁(yè)/共46
頁(yè)AddrFunData
startaddr
hiData
startaddr
loData
#ofregs
hiData
#ofregs
loCRC16hiCRC16lo11H03H00H00H00H03HXXHXXH圖2–7
讀取保持寄存器‐‐‐‐查詢(xún)響應(yīng)響應(yīng)信息中的寄存器數(shù)據(jù)為二進(jìn)制數(shù)據(jù),每個(gè)寄存器分別對(duì)應(yīng)2
個(gè)字節(jié),第一個(gè)字節(jié)為高位值數(shù)據(jù),第二個(gè)字節(jié)為低位數(shù)據(jù)。圖2–8
的例子是讀取U1,U2,U3(U1=03E8H,U2=03E7H,U3=03E9H)的響應(yīng)。AddrFunBytecountData1hiData1LoData
2hiData2loData3hiData3loCRC16hiCRC16lo11H03H06H03HE8H03HE7H03HE9HXXHXXH圖2–8
讀取保持寄存器‐‐‐‐響應(yīng)2.4
讀取輸入寄存器(功能碼04)讀取從機(jī)輸入寄存器(3X
類(lèi)型)中的二進(jìn)制數(shù)據(jù),不支持廣播。查詢(xún)Modbus
通信協(xié)議查詢(xún)信息規(guī)定了要讀的寄存器的起始地址及寄存器的數(shù)量,尋止起始地址為0,寄存器1‐16
所對(duì)應(yīng)的地址分別為0000H
–0015H。圖2–9
的例子是請(qǐng)求17
號(hào)從機(jī)的0009
寄存器。第17
頁(yè)/共46
頁(yè)AddrFunDO
addrhiDO
addrloData
#ofregs
hiData
#ofregs
loCRC16hiCRC16lo11H04H00H08H00H01HXXHXXH圖2–9
讀取輸入寄存器‐‐‐‐查詢(xún)響應(yīng)響應(yīng)信息中的寄存器數(shù)據(jù)為每個(gè)寄存器分別對(duì)應(yīng)2
個(gè)字節(jié),第一個(gè)字節(jié)為高位數(shù)據(jù),第二個(gè)字節(jié)為低位數(shù)據(jù)。圖2–10
的例子寄存器30009
中的數(shù)據(jù)用000AH
2
個(gè)字節(jié)表示。AddrFunBytecountDatahiDataLoCRC16hiCRC16lo11H04H02H00H0AHXXHXXH圖2–10
讀取輸入寄存器‐‐‐‐響應(yīng)2.5
強(qiáng)置單線(xiàn)圈(功能碼05)強(qiáng)制單個(gè)線(xiàn)圈(DO,0X
類(lèi)型)為ON
或OFF
狀態(tài),廣播時(shí),該功能可強(qiáng)制所有從機(jī)中同一類(lèi)型的線(xiàn)圈均為ON
或OFF
狀態(tài)。該功能可越過(guò)控制器內(nèi)存的保護(hù)狀態(tài)和線(xiàn)圈的禁止?fàn)顟B(tài)。線(xiàn)圈強(qiáng)制狀態(tài)一直保持有效直至下一個(gè)控制邏輯作用于線(xiàn)圈為止??刂七壿嬛袩o(wú)線(xiàn)圈程序時(shí),則線(xiàn)圈處于強(qiáng)制狀態(tài)。查詢(xún)查詢(xún)信息規(guī)定了需要強(qiáng)制一個(gè)單獨(dú)線(xiàn)圈的類(lèi)型,線(xiàn)圈的起始地址為0000H,1‐16
個(gè)線(xiàn)圈的尋址地址分為0000H–0015H(DO1=0000H,DO2=0001H,依此類(lèi)推)。由查詢(xún)數(shù)據(jù)區(qū)中的一個(gè)常量,規(guī)定被請(qǐng)求線(xiàn)圈的ON/OFF
狀態(tài),F(xiàn)F00H
值請(qǐng)求線(xiàn)圈處于ON狀態(tài),0000H值請(qǐng)求線(xiàn)圈處于OFF狀態(tài),其它值對(duì)線(xiàn)圈無(wú)效,不起作用。Modbus
通信協(xié)議圖示2‐11
的例子是請(qǐng)求17
號(hào)從機(jī)開(kāi)DO1
的On
狀態(tài)。第18
頁(yè)/共46
頁(yè)AddrFunDO
addrhiDO
addrloValuehiValueloCRC16hiCRC16lo11H05H00H00HFFH00HXXHXXH圖示2‐11
強(qiáng)制單線(xiàn)圈‐‐‐‐查詢(xún)響應(yīng)圖2–12
所示為對(duì)這個(gè)命令請(qǐng)求的正常響應(yīng)是在DO
狀態(tài)改變以后傳送接收到的數(shù)據(jù)。AddrFunDO
addrhiDO
addrloValuehiValueloCRC16hiCRC16lo11H05H00H00HFFH00HXXHXXH圖示2‐12
強(qiáng)制單線(xiàn)圈‐‐‐‐響應(yīng)2.6
預(yù)置單寄存器(功能碼06)把一個(gè)值預(yù)置到一個(gè)保持寄存器(4X
類(lèi)型)中,廣播時(shí),該功能把值預(yù)置到所有從機(jī)的相同類(lèi)型的寄存器中。該功能可越過(guò)控制器的內(nèi)存保護(hù)。使寄存器中的預(yù)置值保持有效。只能由控制器的下一個(gè)邏輯信號(hào)來(lái)處理該預(yù)置值。若控制邏輯中無(wú)寄存器程序時(shí),則寄存器中的值保持不變。查詢(xún)查詢(xún)信息規(guī)定了要預(yù)置寄存器的類(lèi)型,寄存器尋址起始地址為0000H,寄存器1
所對(duì)應(yīng)的地址為0000H。圖示2‐13
的例子是請(qǐng)求17
號(hào)從機(jī)0040H.的值為2717。Modbus
通信協(xié)議AddrFunData
startreg
hiData
startreg
loValuehiValueloCRChiCRClo11H06H00H40H0AH9DHXXHXXH第19
頁(yè)/共46
頁(yè)圖示2‐13
預(yù)設(shè)單寄存器‐‐‐‐查詢(xún)響應(yīng)圖2–14
所示對(duì)于預(yù)置單寄存器請(qǐng)求的正常響應(yīng)是在寄存器的值改變以后將接收到的數(shù)據(jù)傳送回去。AddrFunData
startreg
hiData
startreg
loValuehiValueloCRChiCRClo11H06H00H40H0AH9DHXXHXXH圖示2‐14
預(yù)設(shè)單寄存器‐‐‐‐響應(yīng)2.7
讀取異常狀態(tài)(功能碼7)讀從中機(jī)中8
個(gè)不正常狀態(tài)線(xiàn)圈的數(shù)據(jù),某些線(xiàn)圈號(hào)已在不同型號(hào)的控制器中預(yù)定義,而其它的線(xiàn)圈由用戶(hù)編程,作為有關(guān)控制器的狀態(tài)信息,如
“machineON/OFF”,“heads
retraced”,(縮回標(biāo)題),“safeties
satisfied”(安全性滿(mǎn)意),“error
conditions”(存在錯(cuò)誤條件)或其它用戶(hù)定義的標(biāo)志等。該功能碼不支持廣播。該功能代碼為存取該類(lèi)信息提供了一種簡(jiǎn)單的方法,不正常線(xiàn)圈的類(lèi)型是已知的(在功能代碼中不需要線(xiàn)圈類(lèi)型)預(yù)定義的不正常線(xiàn)圈號(hào)如下:控制器型號(hào)線(xiàn)圈設(shè)定M84,184/384,584,9841‐8用戶(hù)定義484884257258‐264761電池狀態(tài)用戶(hù)定義電池狀態(tài)762內(nèi)存保護(hù)狀態(tài)763 R10
工況狀態(tài)Modbus
通信協(xié)議764‐768
用戶(hù)預(yù)定義查詢(xún)圖示2‐15
的例子是請(qǐng)求讀從機(jī)設(shè)備17
中的不正常狀態(tài)。第20
頁(yè)/共46
頁(yè)AddrFunCRC16
hiCRC16
lo11H07HXXHXXH圖示2‐15
讀取異常狀態(tài)‐‐‐‐查詢(xún)響應(yīng)正常響應(yīng)包含8
個(gè)不正常的線(xiàn)圈狀態(tài),為一個(gè)數(shù)據(jù)字節(jié),每個(gè)線(xiàn)圈一位。LSB
對(duì)應(yīng)為最低線(xiàn)圈類(lèi)型的狀態(tài)。圖2–16
所示按查詢(xún)要求返回響應(yīng):AddrFunDO
DataCRC16
hiCRC16
lo11H07H6DHXXHXXH圖示2‐16
讀取異常狀態(tài)‐‐‐‐響應(yīng)該例子中,線(xiàn)圈數(shù)據(jù)為6DH(二進(jìn)制0110,1101),從左到右(最高位至最低位)的線(xiàn)圈狀態(tài)分別為:OFF–ON–ON–OFF–ON–ON–OFF–ON。若控制器型號(hào)為984,這些位表示線(xiàn)圈8
至1
的狀態(tài);若控制器型號(hào)為484
則表示線(xiàn)圈264
至257
的狀態(tài)。2.8
強(qiáng)置多線(xiàn)圈(功能碼15)按線(xiàn)圈的順序把各線(xiàn)圈(DO,0X
類(lèi)型)強(qiáng)制成ON
或OFF。廣播時(shí),該功能代碼可對(duì)各從機(jī)中相同類(lèi)型的線(xiàn)圈起強(qiáng)制作用。該功能代碼可越過(guò)內(nèi)存保護(hù)和線(xiàn)圈的禁止?fàn)顟B(tài)線(xiàn)圈。保持強(qiáng)制狀態(tài)有效,并只能由控制器的下一個(gè)邏輯來(lái)處理。若無(wú)線(xiàn)圈控制邏輯程序時(shí),線(xiàn)圈將保持強(qiáng)制狀態(tài)。查詢(xún)查詢(xún)信息規(guī)定了被強(qiáng)制線(xiàn)圈的類(lèi)型,線(xiàn)圈的起始地址為0000H,1‐16
個(gè)線(xiàn)圈的尋址地址分為0000H–0015H(DO1=0000H,DO2=0001H,依此類(lèi)推)。Modbus
通信協(xié)議查詢(xún)數(shù)據(jù)區(qū)規(guī)定了被請(qǐng)求線(xiàn)圈的ON/OFF
狀態(tài),如數(shù)據(jù)區(qū)的某位值為“1”表示請(qǐng)求的相應(yīng)線(xiàn)圈狀態(tài)為ON,位值為“0”,則為OFF
狀態(tài)。圖示2‐17
例子為請(qǐng)求從機(jī)設(shè)備17
中一組10
個(gè)線(xiàn)圈為強(qiáng)制狀態(tài),起始線(xiàn)圈為20(則尋址地址為19
或13H),查詢(xún)的數(shù)據(jù)為2
個(gè)字節(jié),CD01H(二進(jìn)制11001101
0000
0001)
相應(yīng)線(xiàn)圈的二進(jìn)制位排列如下:第21
頁(yè)/共46
頁(yè)Bit:1100110100000001Coll:2726252423222120‐‐‐‐‐‐2928傳送的第一個(gè)字節(jié)
CDH
對(duì)應(yīng)線(xiàn)圈為
27‐20, LSB
對(duì)應(yīng)線(xiàn)圈20,傳送的第二個(gè)字節(jié)為01H,對(duì)應(yīng)的線(xiàn)圈為29‐28,LSB
為繼圈28,其余未使用的位均填“0”。AddrFunDO
addrhiDO
addrloData
#ofreg
hiData
#ofreg
loBytecountValuehiValueloCRChiCRClo11H0FH00H13H00H0AH02HCDH01HXXHXXH圖示2‐17
強(qiáng)置多線(xiàn)圈‐‐‐‐查詢(xún)響應(yīng)正常響應(yīng)返回從機(jī)地址,功能代碼,起始地址以及強(qiáng)制線(xiàn)圈數(shù)。圖2–18
對(duì)上述查詢(xún)返回的響應(yīng)。AddrFunDO
addrhiDO
addrloData
#ofreg
hiData
#ofreg
loCRC16hiCRC16lo11H0FH00H13H00H0AHXXHXXH圖示2‐18
強(qiáng)置多線(xiàn)圈‐‐‐‐響應(yīng)2.9
預(yù)置多寄存器(功能碼16)把數(shù)據(jù)按順序預(yù)置到各(4X
類(lèi)型)寄存器中,廣播時(shí)該功能代碼可把數(shù)據(jù)預(yù)置到全部從機(jī)中的相同類(lèi)型的寄存器中。該功能代碼可越過(guò)控制器的內(nèi)存保護(hù),在寄存器中的預(yù)置值一直保持有效,只能由控制器的下一個(gè)邏輯來(lái)處理寄存器的內(nèi)容,控制邏輯中無(wú)該寄存器Modbus
通信協(xié)議程序時(shí),則寄存器中的值保持不變。查詢(xún)查詢(xún)信息規(guī)定了要預(yù)置寄存器的類(lèi)型,寄存器尋址起始地址為0000H,寄存器1
所對(duì)應(yīng)的地址為0000H。圖示2‐19
的例子是請(qǐng)求17
號(hào)從機(jī)0040H.的值為178077833。第22
頁(yè)/共46
頁(yè)AddrFunData
startreg
hiData
startreg
loData
#ofreg
hiData
#ofreg
loBytecountValuehiValueloValuehiValueloCRChiCRClo11H10H00H40H00H02H04H40H89H0AH9DHXXHXXH圖示2‐19
預(yù)設(shè)多寄存器‐‐‐‐查詢(xún)響應(yīng)圖2–20
所示對(duì)于預(yù)置單寄存器請(qǐng)求的正常響應(yīng)是在寄存器值改變以后將接收到的數(shù)據(jù)傳送回去。AddrFunData
starreg
hiData
starreg
loData
#ofreg
hiData
#ofreg
loCRC16hiCRC16lo11H10H00H40H00H02HXXHXXH圖示2‐20
預(yù)設(shè)多寄存器‐‐‐‐響應(yīng)2.10
報(bào)告從機(jī)標(biāo)識(shí)(功能碼17)返回一個(gè)從機(jī)地址控制器的類(lèi)型,從機(jī)的當(dāng)前狀態(tài),以及有關(guān)從機(jī)的其他說(shuō)明,不支持廣播。查詢(xún)圖示2‐21
的例子是請(qǐng)求報(bào)告從機(jī)設(shè)備17
的標(biāo)識(shí)ID
和狀態(tài)。AddrFunCRC16
hiCRC16
loModbus
通信協(xié)議11H11HXXHXXH第23
頁(yè)/共46
頁(yè)圖示2‐21
報(bào)告從機(jī)標(biāo)識(shí)‐‐‐‐查詢(xún)響應(yīng)圖2–22
所示正常響應(yīng)格式,數(shù)據(jù)內(nèi)容對(duì)應(yīng)每臺(tái)控制器的類(lèi)型。AddrFunByteCountSlaveIDRun
IndicatorStatusAdditfionalDataCRC16hiCRC16lo11H11HXXHXXHXXHXXHXXHXXH圖示2‐22
報(bào)告從機(jī)標(biāo)識(shí)‐‐‐‐響應(yīng)從機(jī)ID
總結(jié)數(shù)據(jù)區(qū)第一個(gè)字節(jié)為Modicon
控制器返回的從機(jī)IDSlave
IDController0Micro
8414842184/384358488849984特注:詳細(xì)信息見(jiàn)Modbus
協(xié)議英文版或中文版。Modbus
通信協(xié)議第三章 附錄第24
頁(yè)/共46
頁(yè)附錄A:MODBUS
全部功能碼ModBus網(wǎng)絡(luò)是一個(gè)工業(yè)通信系統(tǒng)。由帶智能終端的可編程序控制器和計(jì)算機(jī)通過(guò)公用線(xiàn)路或局部專(zhuān)用線(xiàn)路連接而成。其系統(tǒng)結(jié)構(gòu)既包括硬件、亦包括軟件。它可應(yīng)用于各種數(shù)據(jù)采集和過(guò)程監(jiān)控。下表3--1是ModBus的功能碼定義。表3--1
ModBus功能碼功能碼名稱(chēng)作用01讀取線(xiàn)圈狀態(tài)取得一組邏輯線(xiàn)圈的當(dāng)前狀態(tài)(ON/OFF)02讀取輸入狀態(tài)取得一組開(kāi)關(guān)輸入的當(dāng)前狀態(tài)(ON/OFF)03讀取保持寄存器在一個(gè)或多個(gè)保持寄存器中取得當(dāng)前的二進(jìn)制值04讀取輸入寄存器在一個(gè)或多個(gè)輸入寄存器中取得當(dāng)前的二進(jìn)制值05強(qiáng)置單線(xiàn)圈強(qiáng)置一個(gè)邏輯線(xiàn)圈的通斷狀態(tài)06寫(xiě)入單寄存器把具體二進(jìn)值裝入一個(gè)保持寄存器07讀取異常狀態(tài)取得8
個(gè)內(nèi)部線(xiàn)圈的通斷狀態(tài),這8
個(gè)線(xiàn)圈的地址由控制器決定,用戶(hù)邏輯可以將這些線(xiàn)圈定義,以說(shuō)明從機(jī)狀態(tài),短報(bào)文適宜于迅速讀取狀態(tài)Modbus
通信協(xié)議08回送診斷校驗(yàn)把診斷校驗(yàn)報(bào)文送從機(jī),以對(duì)通信處理進(jìn)行評(píng)鑒09編程(只用于484)使主機(jī)模擬編程器作用,修改PC
從機(jī)邏輯10控詢(xún)(只用于484)可使主機(jī)與一臺(tái)正在執(zhí)行長(zhǎng)程序任務(wù)從機(jī)通信,探詢(xún)?cè)搹臋C(jī)是否已完成其操作任務(wù),僅在含有功能碼9
的報(bào)文發(fā)送后,本功能碼才發(fā)送11讀取事件計(jì)數(shù)可使主機(jī)發(fā)出單詢(xún)問(wèn),并隨即判定操作是否成功,尤其是該命令或其他應(yīng)答產(chǎn)生通信錯(cuò)誤時(shí)12讀取通信事件記錄可是主機(jī)檢索每臺(tái)從機(jī)的ModBus
事務(wù)處理通信事件記錄。如果某項(xiàng)事務(wù)處理完成,記錄會(huì)給出有關(guān)錯(cuò)誤13編程(184/384
484
584)可使主機(jī)模擬編程器功能修改PC
從機(jī)邏輯14探詢(xún)(184/384
484
584)可使主機(jī)與正在執(zhí)行任務(wù)的從機(jī)通信,定期控詢(xún)?cè)搹臋C(jī)是否已完成其程序操作,僅在含有功能13的報(bào)文發(fā)送后,本功能碼才得發(fā)送15強(qiáng)置多線(xiàn)圈強(qiáng)置一串連續(xù)邏輯線(xiàn)圈的通斷16寫(xiě)入多寄存器把具體的二進(jìn)制值裝入一串連續(xù)的保持寄存器17報(bào)告從機(jī)標(biāo)識(shí)可使主機(jī)判斷編址從機(jī)的類(lèi)型及該從機(jī)運(yùn)行指示燈的狀態(tài)18(884
和MICRO84)可使主機(jī)模擬編程功能,修改PC
狀態(tài)邏輯19重置通信鏈路發(fā)生非可修改錯(cuò)誤后,是從機(jī)復(fù)位于已知狀態(tài),可重置順序字節(jié)20讀取通用參數(shù)(584L)顯示擴(kuò)展存儲(chǔ)器文件中的數(shù)據(jù)信息第25
頁(yè)/共46
頁(yè)Modbus
通信協(xié)議21寫(xiě)入通用參數(shù)(584L)把通用參數(shù)寫(xiě)入擴(kuò)展存儲(chǔ)文件,或修改之22~64保留作擴(kuò)展功能備用65~72保留以備用戶(hù)功能所用留作用戶(hù)功能的擴(kuò)展編碼73~119非法功能120~127保留留作內(nèi)部作用128~255保留用于異常應(yīng)答ModBus網(wǎng)絡(luò)只是一個(gè)主機(jī),所有通信都由他發(fā)出。網(wǎng)絡(luò)可支持247個(gè)之多的遠(yuǎn)程從屬控制器,但實(shí)際所支持的從機(jī)數(shù)要由所用通信設(shè)備決定。采用這個(gè)系統(tǒng),各
PC
可以和中心主機(jī)交換信息而
不影響 各
PC
執(zhí)行本身的控制任務(wù)。表
3--2
是
ModBus
各功能碼對(duì)應(yīng)的數(shù)據(jù)類(lèi)型。表3--2ModBus功能碼與數(shù)據(jù)類(lèi)型對(duì)應(yīng)表第26
頁(yè)/共46
頁(yè)代碼功能數(shù)據(jù)類(lèi)型01讀位02讀位03讀整型、字符型、狀態(tài)字、浮點(diǎn)型04讀整型、狀態(tài)字、浮點(diǎn)型Modbus
通信協(xié)議05寫(xiě)位06寫(xiě)整型、字符型、狀態(tài)字、浮點(diǎn)型08N/A重復(fù)“回路反饋”信息15寫(xiě)位16寫(xiě)整型、字符型、狀態(tài)字、浮點(diǎn)型17讀字符型第27
頁(yè)/共46
頁(yè)附錄B:不正常響應(yīng)不正常響應(yīng):除廣播外,主機(jī)向從機(jī)設(shè)備發(fā)送查詢(xún)并希望有一個(gè)正常響應(yīng),主機(jī)查詢(xún)中有可能產(chǎn)生4種事件:口
從機(jī)接收查詢(xún),通訊錯(cuò)誤正常處理信息,則返回一個(gè)正常響應(yīng)事件???/p>
由于通訊出錯(cuò),從機(jī)不能接收查詢(xún)數(shù)據(jù),因而不返回響應(yīng)。此時(shí),主機(jī)依靠處理程序給出查詢(xún)超時(shí)事件。口
若從機(jī)接收查詢(xún),發(fā)現(xiàn)有
(LRC
或CRC)通訊錯(cuò)誤,并返回響應(yīng),此時(shí),依靠主機(jī)處理程序給出查詢(xún)超時(shí)事件???/p>
從機(jī)接收查詢(xún),無(wú)
通訊
錯(cuò)
誤,但無(wú)法處理(如讀不存在的線(xiàn)圈和寄存器)時(shí),向主機(jī)報(bào)告錯(cuò)誤的性質(zhì)。不正常響應(yīng)信息有
2
個(gè)與正常響應(yīng)不相同的區(qū)域:功能代碼區(qū):正常響應(yīng)時(shí),從機(jī)的響應(yīng)功能代碼區(qū),帶原查詢(xún)的功能代碼。所有功能代碼的MSB為0(其值低于80H)。不正常響應(yīng)時(shí),從機(jī)把功能代碼的MSB置為1,使功能代碼值大于80H,高于正常響應(yīng)的值。這樣,主機(jī)應(yīng)用程序能識(shí)別不正常響應(yīng)事件,能檢查不正常代碼的數(shù)據(jù)區(qū)。數(shù)據(jù)區(qū):正常響應(yīng)中,數(shù)據(jù)區(qū)含有(按查詢(xún)要求給出的)數(shù)據(jù)或統(tǒng)計(jì)值,在不正常響應(yīng)中,數(shù)據(jù)區(qū)為一個(gè)不正常代碼,它說(shuō)明從機(jī)產(chǎn)生不正常響應(yīng)的條件和原因。Modbus
通信協(xié)議例:主機(jī)發(fā)出查詢(xún),從機(jī)不正常響應(yīng)。(為十六進(jìn)制數(shù)據(jù))。查詢(xún):第28
頁(yè)/共46
頁(yè)AddrFunDO
startreg
hiDO
startreg
loDO
#ofregs
hiDO
#ofregs
loCRC16HiCRC16Lo0AH01H04HA1H00H01HXXHXXH響應(yīng)(不正?;蚶猓篈ddrFunExceptionCodeCRC16HiCRC16Lo0AH81H02HXXHXXH圖3–1.不正常信息幀格式上例中,從機(jī)設(shè)備地址10(0AH),讀線(xiàn)圈狀態(tài)的功能代碼(01),主機(jī)請(qǐng)求線(xiàn)圈狀態(tài)的地址為1245(04A1H)。注意:只讀一個(gè)指定線(xiàn)圈,地址為(0001).若從機(jī)中不存在此線(xiàn)圈地址時(shí),即以不正常代碼(02),向主機(jī)返回一個(gè)不正常響應(yīng)。說(shuō)明為不合法地址。Modbus
通信協(xié)議表3‐‐3
ModBus的不正常代碼:第29
頁(yè)/共46
頁(yè)代碼名稱(chēng)含義01不合法功能代碼從機(jī)接收的是一種不能執(zhí)行功能代碼。發(fā)出查詢(xún)命令后,該代碼指示無(wú)程序功能。02不合法數(shù)據(jù)地址接收的數(shù)據(jù)地址,是從機(jī)不允許的地址。03不合法數(shù)據(jù)查詢(xún)數(shù)據(jù)區(qū)的值是從機(jī)不允許的值。04從機(jī)設(shè)備故障從機(jī)執(zhí)行主機(jī)請(qǐng)求的動(dòng)作時(shí)出現(xiàn)不可恢復(fù)的錯(cuò)誤。05確認(rèn)從機(jī)已接收請(qǐng)求處理數(shù)據(jù),但需要較長(zhǎng)的處理時(shí)間,為避免主機(jī)出現(xiàn)超時(shí)錯(cuò)誤而發(fā)送該確認(rèn)響應(yīng)。主機(jī)以此再發(fā)送一個(gè)“查詢(xún)程序完成”未決定從機(jī)是否已完成處理。06從機(jī)設(shè)備忙碌從機(jī)正忙于處理一個(gè)長(zhǎng)時(shí)程序命令,請(qǐng)求主機(jī)在從機(jī)空閑時(shí)發(fā)送信息。07否定從機(jī)不能執(zhí)行查詢(xún)要求的程序功能時(shí),該代碼使用十進(jìn)制13或14代碼,向主機(jī)返回一個(gè)“不成功的編程請(qǐng)求”信息。主機(jī)應(yīng)請(qǐng)求診斷從機(jī)的錯(cuò)誤信息。08內(nèi)存奇偶校驗(yàn)錯(cuò)誤從機(jī)讀擴(kuò)展內(nèi)存中的數(shù)據(jù)時(shí),發(fā)現(xiàn)有奇偶校驗(yàn)錯(cuò)誤,主機(jī)按從機(jī)的要求重新發(fā)送數(shù)據(jù)請(qǐng)求。附錄C:CRC
校驗(yàn)生成程序CRC簡(jiǎn)單函數(shù)如下:unsigned
short
CRC16(puchMsg,
usDataLen)unsigned
char
*puchMsg;/*要進(jìn)行CRC校驗(yàn)的消息*/unsigned
short
usDataLen;/*消息中字節(jié)數(shù)*/{Modbus
通信協(xié)議unsigned
char
uchCRCHi=0xFF;/*高CRC字節(jié)初始化*/unsigned
char
uchCRCLo=0xFF;/*低CRC字節(jié)初始化*/unsigned
uIndex;/*
CRC循環(huán)中的索引*/while
(usDataLen--)/*傳輸消息緩沖區(qū)*/{uIndex=uchCRCHi
^
*puchMsgg++;/*計(jì)算CRC
*/uchCRCHi=uchCRCLo
^
auchCRCHi[uIndex};
uchCRCLo=auchCRCLo[uIndex];}return
(uchCRCHi
<<
8
|
uchCRCLo)
;}/*CRC高位字節(jié)值表*/static
unsigned
char
auchCRCHi[]
=
{0x00,
0xC1,
0x81,
0x40,
0x01,
0xC0,
0x80,
0x41,
0x01,0xC0,0x80,
0x41,
0x00,
0xC1,
0x81,
0x40,
0x01,
0xC0,
0x80,0x41,0x00,
0xC1,
0x81,
0x40,
0x00,
0xC1,
0x81,
0x40,
0x01,0xC0,0x80,
0x41,
0x01,
0xC0,
0x80,
0x41,
0x00,
0xC1,
0x81,0x40,0x00,
0xC1,
0x81,
0x40,
0x01,
0xC0,
0x80,
0x41,
0x00,0xC1,0x81,
0x40,
0x01,
0xC0,
0x80,
0x41,
0x01,
0xC0,
0x80,0x41,0x00,
0xC1,
0x81,
0x40,
0x01,
0xC0,
0x80,
0x41,
0x00,0xC1,0x81,
0x40,
0x00,
0xC1,
0x81,
0x40,
0x01,
0xC0,
0x80,0x41,0x00,
0xC1,
0x81,
0x40,
0x01,
0xC0,
0x80,
0x41,
0x01,0xC0,0x80,
0x41,
0x00,
0xC1,
0x81,
0x40,
0x00,
0xC1,
0x81,0x40,0x01,
0xC0,
0x80,
0x41,
0x01,
0xC0,
0x80,
0x41,
0x00,0xC1,第30
頁(yè)/共46
頁(yè)Modbus
通信協(xié)議0x81,
0x40,
0x01,
0xC0,
0x80,
0x41,
0x00,
0xC1,
0x81,0x40,0x00,
0xC1,
0x81,
0x40,
0x01,
0xC0,
0x80,
0x41,
0x01,0xC0,0x80,
0x41,
0x00,
0xC1,
0x81,
0x40,
0x00,
0xC1,
0x81,0x40,0x01,
0xC0,
0x80,
0x41,
0x00,
0xC1,
0x81,
0x40,
0x01,0xC0,0x80,
0x41,
0x01,
0xC0,
0x80,
0x41,
0x00,
0xC1,
0x81,0x40,0x00,
0xC1,
0x81,
0x40,
0x01,
0xC0,
0x80,
0x41,
0x01,0xC0,0x80,
0x41,
0x00,
0xC1,
0x81,
0x40,
0x01,
0xC0,
0x80,0x41,0x00,
0xC1,
0x81,
0x40,
0x00,
0xC1,
0x81,
0x40,
0x01,0xC0,0x80,
0x41,
0x00,
0xC1,
0x81,
0x40,
0x01,
0xC0,
0x80,0x41,0x01,
0xC0,
0x80,
0x41,
0x00,
0xC1,
0x81,
0x40,
0x01,0xC0,0x80,
0x41,
0x00,
0xC1,
0x81,
0x40,
0x00,
0xC1,
0x81,0x40,0x01,
0xC0,
0x80,
0x41,
0x01,
0xC0,
0x80,
0x41,
0x00,0xC1,0x81,
0x40,
0x00,
0xC1,
0x81,
0x40,
0x01,
0xC0,
0x80,0x41,0x00,
0xC1,
0x81,
0x40,
0x01,
0xC0,
0x80,
0x41,
0x01,0xC0,0x80,
0x41,
0x00,
0xC1,
0x81,
0x40};/*CRC低位字節(jié)值表*/static
char
auchCRCLo[]
=
{0x00,
0xC0,
0xC1,
0x01,
0xC3,
0x03,
0x02,
0xC2,
0xC6,0x06,0x07,
0xC7,
0x05,
0xC5,
0xC4,
0x04,
0xCC,
0x0C,
0x0D,0xCD,0x0F,
0xCF,
0xCE,
0x0E,
0x0A,
0xCA,
0xCB,
0x0B,
0xC9,0x09,0x08,
0xC8,
0xD8,
0x18,
0x19,
0xD9,
0x1B,
0xDB,
0xDA,0x1A,0x1E,
0xDE,
0xDF,
0x1F,
0xDD,
0x1D,
0x1C,
0xDC,
0x14,0xD4,0x
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 妊娠期生殖器皰疹的健康宣教
- 膿皰型銀屑病的臨床護(hù)理
- JJF(陜) 013-2019 微量總有機(jī)碳分析儀校準(zhǔn)規(guī)范
- 《解讀自由基》課件
- 北師大版不等式課件
- 大班級(jí)風(fēng)采展示活動(dòng)策劃計(jì)劃
- 摻混肥相關(guān)行業(yè)投資規(guī)劃報(bào)告
- 充換電站相關(guān)行業(yè)投資方案范本
- 割灌機(jī)相關(guān)行業(yè)投資方案
- 課程研究小組的組織與管理計(jì)劃
- 2024高血壓健康知識(shí)講座
- 結(jié)直腸癌中西醫(yī)結(jié)合治療
- 京東物流部管理制度
- 北京開(kāi)放大學(xué)《自動(dòng)控制技術(shù)及應(yīng)用》終結(jié)性考試復(fù)習(xí)題庫(kù)(附答案)
- 高中高一級(jí)部拔河比賽活動(dòng)實(shí)施方案
- 航空機(jī)務(wù)專(zhuān)業(yè)職業(yè)生涯規(guī)劃書(shū)
- 八年級(jí)英語(yǔ)上學(xué)期期末考試(深圳卷)-2023-2024學(xué)年八年級(jí)英語(yǔ)上冊(cè)單元重難點(diǎn)易錯(cuò)題精練(牛津深圳版)
- 迎元旦趣味活動(dòng)及知識(shí)競(jìng)賽試題及答案
- SH/T 3543-2007 石油化工建設(shè)工程項(xiàng)目施工過(guò)程技術(shù)文件規(guī)定
- 建筑之歌課件PPT
- 血透室運(yùn)用PDCA循環(huán)降低血透病人長(zhǎng)期深靜脈留置導(dǎo)管的感染率品管圈成果匯報(bào)
評(píng)論
0/150
提交評(píng)論