精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Modbus通訊協議詳解及程序例程

開源嵌入式 ? 來源:開源嵌入式 ? 作者:開源嵌入式 ? 2021-01-18 10:24 ? 次閱讀

f8d75d62-58fc-11eb-8b86-12bb97331649.jpg

Modbus通訊協議詳解

工業控制已從單機控制走向集中監控、集散控制,如今已進入網絡時代,工業控制器連網也為網絡管理提供了方便。Modbus就是工業控制器的網絡協議中的一種。

一、 Modbus 協議簡介

Modbus 協議是應用于電子控制器上的一種通用語言。通過此協議,控制器相互之間、控制器經由網絡(例如以太網)和其它設備之間可以通信。它已經成為一通用工業標準。有了它,不同廠商生產的控制設備可以連成工業網絡,進行集中監控。此協議定義了一個控制器能認識使用的消息結構,而不管它們是經過何種網絡進行通信的。它描述了一控制器請求訪問其它設備的過程,如果回應來自其它設備的請求,以及怎樣偵測錯誤并記錄。它制定了消息域格局和內容的公共格式。

當在一Modbus網絡上通信時,此協議決定了每個控制器須要知道它們的設備地址,識別按地址發來的消息,決定要產生何種行動。如果需要回應,控制器將生成反饋信息并用Modbus協議發出。在其它網絡上,包含了Modbus協議的消息轉換為在此網絡上使用的幀或包結構。這種轉換也擴展了根據具體的網絡解決節地址、路由路徑及錯誤檢測的方法。

1、在Modbus網絡上轉輸

標準的Modbus口是使用一RS-232C兼容串行接口,它定義了連接口的針腳、電纜、信號位、傳輸波特率、奇偶校驗。控制器能直接或經由Modem組網。

控制器通信使用主—從技術,即僅一設備(主設備)能初始化傳輸(查詢)。其它設備(從設備)根據主設備查詢提供的數據作出相應反應。典型的主設備:主機和可編程儀表。典型的從設備:可編程控制器。

主設備可單獨和從設備通信,也能以廣播方式和所有從設備通信。如果單獨通信,從設備返回一消息作為回應,如果是以廣播方式查詢的,則不作任何回應。Modbus協議建立了主設備查詢的格式:設備(或廣播)地址、功能代碼、所有要發送的數據、一錯誤檢測域。

從設備回應消息也由Modbus協議構成,包括確認要行動的域、任何要返回的數據、和一錯誤檢測域。如果在消息接收過程中發生一錯誤,或從設備不能執行其命令,從設備將建立一錯誤消息并把它作為回應發送出去。

2、在其它類型網絡上轉輸

在其它網絡上,控制器使用對等技術通信,故任何控制都能初始和其它控制器的通信。這樣在單獨的通信過程中,控制器既可作為主設備也可作為從設備。提供的多個內部通道可允許同時發生的傳輸進程。

在消息位,Modbus協議仍提供了主—從原則,盡管網絡通信方法是“對等”。如果一控制器發送一消息,它只是作為主設備,并期望從從設備得到回應。同樣,當控制器接收到一消息,它將建立一從設備回應格式并返回給發送的控制器。

3、查詢—回應周期

(1)查詢

查詢消息中的功能代碼告之被選中的從設備要執行何種功能。數據段包含了從設備要執行功能的任何附加信息。例如功能代碼03是要求從設備讀保持寄存器并返回它們的內容。數據段必須包含要告之從設備的信息:從何寄存器開始讀及要讀的寄存器數量。錯誤檢測域為從設備提供了一種驗證消息內容是否正確的方法。

(2)回應

如果從設備產生一正常的回應,在回應消息中的功能代碼是在查詢消息中的功能代碼的回應。數據段包括了從設備收集的數據:象寄存器值或狀態。如果有錯誤發生,功能代碼將被修改以用于指出回應消息是錯誤的,同時數據段包含了描述此錯誤信息的代碼。錯誤檢測域允許主設備確認消息內容是否可用。

二、兩種傳輸方式

控制器能設置為兩種傳輸模式(ASCII或RTU)中的任何一種在標準的Modbus網絡通信。用戶選擇想要的模式,包括串口通信參數(波特率、校驗方式等),在配置每個控制器的時候,在一個Modbus網絡上的所有設備都必須選擇相同的傳輸模式和串口參數。

所選的ASCII或RTU方式僅適用于標準的Modbus網絡,它定義了在這些網絡上連續傳輸的消息段的每一位,以及決定怎樣將信息打包成消息域和如何解碼。

在其它網絡上(象MAP和Modbus Plus)Modbus消息被轉成與串行傳輸無關的幀。

1、ASCII模式

當控制器設為在Modbus網絡上以ASCII(美國標準信息交換代碼)模式通信,在消息中的每個8Bit字節都作為兩個ASCII字符發送。這種方式的主要優點是字符發送的時間間隔可達到1秒而不產生錯誤。

代碼系統

· 十六進制,ASCII字符0.。.9,A.。.F

· 消息中的每個ASCII字符都是一個十六進制字符組成

每個字節的位

· 1個起始位

· 7個數據位,最小的有效位先發送

· 1個奇偶校驗位,無校驗則無

CRC域是兩個字節,包含一16位的二進制值。它由傳輸設備計算后加入到消息中。接收設備重新計算收到消息的CRC,并與接收到的CRC域中的值比較,如果兩值不同,則有誤。

CRC是先調入一值是全“1”的16位寄存器,然后調用一過程將消息中連續的8位字節各當前寄存器中的值進行處理。僅每個字符中的8Bit數據對CRC有效,起始位和停止位以及奇偶校驗位均無效。

CRC產生過程中,每個8位字符都單獨和寄存器內容相或(OR),結果向最低有效位方向移動,最高有效位以0填充。LSB被提取出來檢測,如果LSB為1,寄存器單獨和預置的值或一下,如果LSB為0,則不進行。整個過程要重復8次。在最后一位(第8位)完成后,下一個8位字節又單獨和寄存器的當前值相或。最終寄存器中的值,是消息中所有的字節都執行之后的CRC值。

CRC添加到消息中時,低字節先加入,然后高字節。

CRC簡單函數如下:

unsignedshortCRC16(puchMsg,usDataLen)
unsignedchar*puchMsg;/*要進行CRC校驗的消息*/
unsignedshortusDataLen;/*消息中字節數*/
{
unsignedcharuchCRCHi=0xFF;/*高CRC字節初始化*/
unsignedcharuchCRCLo=0xFF;/*低CRC字節初始化*/
unsigneduIndex;/*CRC循環中的索引*/
while(usDataLen--)/*傳輸消息緩沖區*/
{
uIndex=uchCRCHi^*puchMsgg++;/*計算CRC*/
uchCRCHi=uchCRCLo^auchCRCHi[uIndex};
uchCRCLo=auchCRCLo[uIndex];
}
return(uchCRCHi< }
/*CRC高位字節值表*/
staticunsignedcharauchCRCHi[]={
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,
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低位字節值表*/
staticcharauchCRCLo[]={
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,
0xD5,0x15,0xD7,0x17,0x16,0xD6,0xD2,0x12,0x13,0xD3,
0x11,0xD1,0xD0,0x10,0xF0,0x30,0x31,0xF1,0x33,0xF3,
0xF2,0x32,0x36,0xF6,0xF7,0x37,0xF5,0x35,0x34,0xF4,
0x3C,0xFC,0xFD,0x3D,0xFF,0x3F,0x3E,0xFE,0xFA,0x3A,
0x3B,0xFB,0x39,0xF9,0xF8,0x38,0x28,0xE8,0xE9,0x29,
0xEB,0x2B,0x2A,0xEA,0xEE,0x2E,0x2F,0xEF,0x2D,0xED,
0xEC,0x2C,0xE4,0x24,0x25,0xE5,0x27,0xE7,0xE6,0x26,
0x22,0xE2,0xE3,0x23,0xE1,0x21,0x20,0xE0,0xA0,0x60,
0x61,0xA1,0x63,0xA3,0xA2,0x62,0x66,0xA6,0xA7,0x67,
0xA5,0x65,0x64,0xA4,0x6C,0xAC,0xAD,0x6D,0xAF,0x6F,
0x6E,0xAE,0xAA,0x6A,0x6B,0xAB,0x69,0xA9,0xA8,0x68,
0x78,0xB8,0xB9,0x79,0xBB,0x7B,0x7A,0xBA,0xBE,0x7E,
0x7F,0xBF,0x7D,0xBD,0xBC,0x7C,0xB4,0x74,0x75,0xB5,
0x77,0xB7,0xB6,0x76,0x72,0xB2,0xB3,0x73,0xB1,0x71,
0x70,0xB0,0x50,0x90,0x91,0x51,0x93,0x53,0x52,0x92,
0x96,0x56,0x57,0x97,0x55,0x95,0x94,0x54,0x9C,0x5C,
0x5D,0x9D,0x5F,0x9F,0x9E,0x5E,0x5A,0x9A,0x9B,0x5B,
0x99,0x59,0x58,0x98,0x88,0x48,0x49,0x89,0x4B,0x8B,
0x8A,0x4A,0x4E,0x8E,0x8F,0x4F,0x8D,0x4D,0x4C,0x8C,
0x44,0x84,0x85,0x45,0x87,0x47,0x46,0x86,0x82,0x42,
0x43,0x83,0x41,0x81,0x80,0x40
};
ModBus網絡是一個工業通信系統,由帶智能終端的可編程序控制器和計算機通過公用線路或局部專用線路連接而成。其系統結構既包括硬件、亦包括軟件。它可應用于各種數據采集和過程監控。下表1是ModBus的功能碼定義。
表1ModBus功能碼
01READCOILSTATUS
02READINPUTSTATUS
03READHOLDINGREGISTER
04READINPUTREGISTER
05WRITESINGLECOIL
06WRITESINGLEREGISTER
15WRITEMULTIPLECOIL
16WRITEMULTIPLEREGISTER

ModBus網絡只是一個主機,所有通信都由他發出。網絡可支持247個之多的遠程從屬控制器,但實際所支持的從機數要由所用通信設備決定。采用這個系統,各PC可以和中心主機交換信息而不影響各PC執行本身的控制任務。

(1)ModBus的傳輸方式

在ModBus系統中有2種傳輸模式可選擇。這2種傳輸模式與從機PC通信的能力是同等的。選擇時應視所用ModBus主機而定,每個ModBus系統只能使用一種模式,不允許2種模式混用。一種模式是ASCII(美國信息交換碼),另一種模式是RTU(遠程終端設備)這兩種模式的定義見表3

表3 ASCII和RTU傳輸模式的特性

ASCII可打印字符便于故障檢測,而且對于用高級語言(如Fortan)編程的主計算機及主PC很適宜。RTU則適用于機器語言編程的計算機和PC主機。

用RTU模式傳輸的數據是8位二進制字符。如欲轉換為ASCII模式,則每個RTU字符首先應分為高位和低位兩部分,這兩部分各含4位,然后轉換成十六進制等量值。用以構成報文的ASCII字符都是十六進制字符。ASCII模式使用的字符雖是RTU模式的兩倍,但ASCII數據的譯瑪和處理更為容易一些,此外,用RTU模式時報文字符必須以連續數據流的形式傳送,用ASCII模式,字符之間可產生長達1s的間隔,以適應速度較快的機器。

(2)ModBus的數據校驗方式

CRC-16(循環冗余錯誤校驗)

CRC-16錯誤校驗程序如下:報文(此處只涉及數據位,不指起始位、停止位和任選的奇偶校驗位)被看作是一個連續的二進制,其最高有效位(MSB)首選發送。報文先與X↑16相乘(左移16位),然后看X↑16+X↑15+X↑2+1除,X↑16+X↑15+X↑2+1可以表示為二進制數11000000000000101。整數商位忽略不記,16位余數加入該報文(MSB先發送),成為2個CRC校驗字節。余數中的1全部初始化,以免所有的零成為一條報文被接收。經上述處理而含有CRC字節的報文,若無錯誤,到接收設備后再被同一多項式(X↑16+X↑15+X↑2+1)除,會得到一個零余數(接收設備核驗這個CRC字節,并將其與被傳送的CRC比較)。全部運算以2為模(無進位)。

習慣于成串發送數據的設備會首選送出字符的最右位(LSB-最低有效位)。而在生成CRC情況下,發送首位應是被除數的最高有效位MSB。由于在運算中不用進位,為便于操作起見,計算CRC時設MSB在最右位。生成多項式的位序也必須反過來,以保持一致。多項式的MSB略去不記,因其只對商有影響而不影響余數。

生成CRC-16校驗字節的步驟如下:

①裝如一個16位寄存器,所有數位均為1。

②該16位寄存器的高位字節與開始8位字節進行“異或”運算。運算結果放入這個16位寄存器。

③把這個16寄存器向右移一位。

④若向右(標記位)移出的數位是1,則生成多項式1010000000000001和這個寄存器進行“異或”運算;若向右移出的數位是0,則返回③。

⑤重復③和④,直至移出8位。

⑥另外8位與該十六位寄存器進行“異或”運算。

⑦重復③~⑥,直至該報文所有字節均與16位寄存器進行“異或”運算,并移位8次。

⑧這個16位寄存器的內容即2字節CRC錯誤校驗,被加到報文的最高有效位。

另外,在某些非ModBus通信協議中也經常使用CRC16作為校驗手段,而且產生了一些CRC16的變種,他們是使用CRC16多項式X↑16+X↑15+X↑2+1,單首次裝入的16位寄存器為0000;使用CRC16的反序X↑16+X↑14+X↑1+1,首次裝入寄存器值為0000或FFFFH。

LRC(縱向冗余錯誤校驗)

LRC錯誤校驗用于ASCII模式。這個錯誤校驗是一個8位二進制數,可作為2個ASCII十六進制字節傳送。把十六進制字符轉換成二進制,加上無循環進位的二進制字符和二進制補碼結果生成LRC錯誤校驗(參見圖)。這個LRC在接收設備進行核驗,并與被傳送的LRC進行比較,冒號(:)、回車符號(CR)、換行字符(LF)和置入的其他任何非ASCII十六進制字符在運算時忽略不計。

責任編輯:xj

原文標題:工業總線ModBus通信協議講解與程序例程

文章出處:【微信公眾號:開源嵌入式】歡迎添加關注!文章轉載請注明出處。


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 通信協議
    +關注

    關注

    28

    文章

    858

    瀏覽量

    40266
  • 總線
    +關注

    關注

    10

    文章

    2867

    瀏覽量

    87991
  • ModBus協議
    +關注

    關注

    3

    文章

    174

    瀏覽量

    33388

原文標題:工業總線ModBus通信協議講解與程序例程

文章出處:【微信號:KY_QRS,微信公眾號:開源嵌入式】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    串口屏Modbus通訊協議詳解

    Modbus是一種開放的通信協議,廣泛應用于工業自動化領域。它定義了消息結構和設備間的通信方式,支持多種物理層網絡,如RS-232、RS-485等。本文將詳細介紹如何在串口屏上實現Modbus
    的頭像 發表于 10-20 14:23 ?1272次閱讀

    Profibus PA轉Modbus RTU協議網關

    捷米特JM-RTU-PA網關將Profibus PA和Modbus RTU專用通訊協議橋接的協議轉換設備。符合Modbus RTU
    的頭像 發表于 09-25 11:47 ?242次閱讀
    Profibus PA轉<b class='flag-5'>Modbus</b> RTU<b class='flag-5'>協議</b>網關

    Modbus協議轉Profibus協議網關模塊連PLC與激光發射器通訊

    將重點探討PLC連接Modbus協議轉Profibus協議網關模塊(XD-MDPB100)與激光發射器通訊的相關內容,為您詳細解析這一過程的原理與操作步驟。
    的頭像 發表于 06-22 10:24 ?361次閱讀
    <b class='flag-5'>Modbus協議</b>轉Profibus<b class='flag-5'>協議</b>網關模塊連PLC與激光發射器<b class='flag-5'>通訊</b>

    Modbus協議轉Profibus協議網關接溫控表與PLC通訊

    Modbus協議轉Profibus協議網關(XD-MDPB100)則是實現這一通訊的重要工具。Modbus轉Profibus網關的主要功能是實現Mo
    的頭像 發表于 06-21 11:31 ?1862次閱讀
    <b class='flag-5'>Modbus協議</b>轉Profibus<b class='flag-5'>協議</b>網關接溫控表與PLC<b class='flag-5'>通訊</b>

    PLC通過Profibus轉Modbus網關接LED大屏通訊

    本文介紹了Modbus協議轉Profibus協議網關(XD-MDPM100)的特點及適用場景,并詳細闡述了利用PLC通過Profibus轉Modbus網關實現LED大屏通訊的步驟,包括
    的頭像 發表于 06-19 09:36 ?465次閱讀
    PLC通過Profibus轉<b class='flag-5'>Modbus</b>網關接LED大屏<b class='flag-5'>通訊</b>

    Modbus協議轉Profinet協議網關與氣體監測系統配置案例

    Modbus協議和Profinet協議作為工業領域常見的兩種通訊協議,各自具有一定的特點和應用范圍。Modbus轉Profinet網關(XD
    的頭像 發表于 06-13 17:50 ?1358次閱讀
    <b class='flag-5'>Modbus協議</b>轉Profinet<b class='flag-5'>協議</b>網關與氣體監測系統配置案例

    通訊協議轉換Modbus轉Profinet網關

    Modbus轉Profinet網關是工業通信轉換設備,能夠實現Modbus協議與Profinet協議之間的有效轉換和穩定傳輸。通過該網關,工業設備之間可以實現數據交換和通信,提高生產效率和智能化程度
    的頭像 發表于 06-13 14:07 ?439次閱讀
    <b class='flag-5'>通訊</b><b class='flag-5'>協議</b>轉換<b class='flag-5'>Modbus</b>轉Profinet網關

    Modbus轉Profinet協議轉換網關:快速配置實踐指南

    Modbus轉Profinet協議轉換網關(XD-MDPN100/300/600)是一種設備,用于實現Modbus通訊協議與Profinet
    的頭像 發表于 06-13 09:56 ?523次閱讀
    <b class='flag-5'>Modbus</b>轉Profinet<b class='flag-5'>協議</b>轉換網關:快速配置實踐指南

    Modbus-RTU通訊協議是什么?

    Modbus-RTU通訊協議是一種串行通訊協議,它可以用于連接不同類型的設備,以實現遠程監控和控制。Mo
    的頭像 發表于 05-23 15:06 ?549次閱讀

    Modbus協議網關是什么?Modbus協議網關的功能

    Modbus協議網關是一種專門用于工業自動化環境中的網絡設備,其主要功能是實現不同通信協議之間的轉換,尤其是將基于Modbus協議的設備或系統與使用其他協議的設備、控制系統或信息系統連
    的頭像 發表于 04-11 15:51 ?710次閱讀

    Modbus轉Profinet網關解決設備通訊不穩的問題

    通訊不穩定,數據斷斷續續,多半是由于線路干擾造成的。可添加Modbus轉Profinet網關(XD-MDPN100/2000)解決問題,Modbus轉Profinet網關(XD-MDPN100
    的頭像 發表于 12-25 19:18 ?410次閱讀
    <b class='flag-5'>Modbus</b>轉Profinet網關解決設備<b class='flag-5'>通訊</b>不穩的問題

    MODBUS通訊協議有哪幾種?

    MODBUS通訊協議是工業自動化領域中廣泛使用的一種串行通信協議。它由美國Modicon公司于1979年開發,現在已經成為工業電子設備之間通信的標準。
    的頭像 發表于 12-13 10:53 ?4436次閱讀

    PLC編程:MODBUS通訊程序的交叉引用怎么用

    他做的MODBUS通訊程序,原本只需要從通訊中讀來1個字/位,然而卻發現交叉引用中提示占用了4個字節, 即一個DWORD,問是怎么回事。
    發表于 12-13 09:18 ?1030次閱讀
    PLC編程:<b class='flag-5'>MODBUS</b><b class='flag-5'>通訊</b><b class='flag-5'>程序</b>的交叉引用怎么用

    RS485 Modbus通訊協議程序原代碼

    RS485 Modbus通訊協議程序原代碼 STM32主從機單片機開發設計資料
    發表于 12-11 15:31 ?17次下載

    Modbus轉Profinet網關連接EthernetIP協議的PLC和Modbus協議的儀表

    命令配置后點擊自動計算映射地址,數據將自動對應到對應的IQ地址。 按手冊對應參數名稱即可,很多客戶現場都會發生一些設備和控制層系統協議不一樣的情況發生,上述案例就是通過Modbus轉EtherNET/IP網關實現通訊
    發表于 12-07 14:27