PLC中的大端小端


PLC中的大端小端

  相信大家在閱讀有關通訊數據傳輸、PLC數據存儲等技術文檔時,經常會碰到“Big-Endian”(大端對齊)與Little-Endian(小端對齊)術語。很多朋友不理解大端和小端模式,本文給大家寫一下此知識點。

一、大端與小端之分

  在PLC系統中,數據存儲在以字節為單元的可尋址存儲器中。這些數據一般包括如:BYTE、WORD、DWORD、REAL、STRING等。WORD由兩個字節組成,DWORD由4個字節組成,STRING如S7-200 SMART PLC中最多由255個字節組成。對於這些多字節數據類型,都被存儲為連續的字節序列。那么必然存在着一個如果將多個字節安排的問題。因此就導致了大端存儲模式和小端存儲模式。例如一個值為0x7788的16bit的WORD型變量x, 存放在0x0010開始存儲器地址中。對於大端模式,就是將0x77放在低地址中,即0x0010中,0x88放在高地址中,即0x0011中。小端模式,剛好相反。

  大端模式:是指對於多字節數據的MSB(最高有效字節)保存在內存的低地址中,而數據的LSB(最低有效字節)保存在內存的高地址中。

  小端模式:是指對於多字節數據的MSB(最高有效字節)保存在內存的高地址中,而數據的LSB(最低有效字節)保存在內存的低地址中。

  比如以四字節DWORD數值0x0A0B0C0D的存放方式為例:大端模式:最高位字節是0x0A,存儲在最低的內存地址a處,下一個字節0x0B存在后面的地址a+1,以此類推。小端模式:最高位字節是0x0A,存儲在最高的內存地址a+3處,下一個字節0x0B存在后面的地址a+2,以此類推。

 

  從上面示例可以看出,大小端的差異在於存放順序不同。

 

  一段關於“端“的起源故事:

  “endian”一詞來源於十八世紀愛爾蘭作家喬納森·斯威夫特(Jonathan Swift)的小說《格列佛游記》(Gulliver's Travels)。小說中,小人國為水煮蛋該從大的一端(Big-End)剝開還是小的一端(Little-End)剝開而爭論,爭論的雙方分別被稱為“大端派”和“小端派”。以下是1726年關於大小端之爭歷史的描述:

“ 我下面要告訴你的是,Lilliput和Blefuscu這兩大強國在過去36個月里一直在苦戰。戰爭開始是由於以下的原因:我們大家都認為,吃雞蛋前,原始的方法是打破雞蛋較大的一端,可是當今皇帝的祖父小時候吃雞蛋,一次按古法打雞蛋時碰巧將一個手指弄破了。因此他的父親,當時的皇帝,就下了一道敕令,命令全體臣民吃雞蛋時打破雞蛋較小的一端,違令者重罰。老百姓們對這項命令極其反感。歷史告訴我們,由此曾經發生過6次叛亂,其中一個皇帝送了命,另一個丟了王位。這些叛亂大多都是由Blefuscu的國王大臣們煽動起來的。叛亂平息后,流亡的人總是逃到那個帝國去尋求避難。據估計,先后幾次有11000人情願受死也不肯去打破雞蛋較小的一端。關於這一爭端,曾出版過幾百本大部著作,不過大端派的書一直是受禁的,法律也規定該派任何人不得做官。” ”
—— 《格列夫游記》 第一卷第4章 蔣劍鋒(譯)
 

二、幾款常見PLC字節順序

  1. 西門子PLC采用大端方式:

  S7-200/200 SMART:如一個16位數據16#1234存放在VW100,則高字節數據16#12存於地址VB100,低字節數據16#34存於地址VB101。S7-300/400/1200/1500:

 

  注意:對於S7-1200/1500,優化的塊(Optimized block)存儲使用Little-Endian(小端對齊)

  可以結合“如何在 STEP 7 (TIA Portal) 中使用符號方式按位,字節,或字訪問非結構數據類型?”這篇文章理解。文章鏈接:https://support.industry.siemens.com/cs/cn/zh/view/57374718

2. 施耐德PLC采用小端方式:

  如PL7 Pro平台:

 

3. 三菱PLC采用小端方式:

4. 其它概念

通訊中的序

  開篇提到了,通訊協議數據傳輸中涉及到大小端。

網絡序

  網絡傳輸一般采用大端序,也被稱之為網絡字節序,或網絡序。IP協議中定義大端序為網絡字節序。

位序
  一般用於描述串行設備的字節各bit傳輸順序。網絡協議中只有數據鏈路層的底端會涉及到。如RS-232、RS-485都屬於小端序(先傳低bit)的串行協議。

Modbus通訊

  Modbus以“Big-Endian”(大端對齊)表示地址和數據項。這意味着當發送多個字節數據項時,首先發送最高地址的字節數據。

  對於單個比特量,仍按字節進行傳輸。傳輸比特量時,第一個數據字節的LSB(最低有效位)對應第一個比特量,依次類推,一直到這個字節的MSB(最高有效位)為止,再從第二個字節開始。如果數量不是八的倍數,則用零填充數據字節中剩余的位,一直到字節的MSB。

  如讀取多個16位保持寄存器,從站先發送4x00001(值0x0002)的高字節0x00然后低字節0x02,接着發送4x00002(值0x0004)的高字節0x00然后低字節0x04,以此類推......

 

  可以看出這和西門子大端模式相匹配。避免了大小端的轉換(如果數據字節順序不一致,需要轉換)。這也是大家在做PLC通訊時,經常會遇到的一個問題。只要你理解其中原理(高低順序),找到轉換的方法就容易了。

常見字節序

  常見的操作系統是小端,通訊協議是大端。

常見處理器體系的字節序

  大端模式:PowerPC、IBM、Sun

  小端模式:x86、DEC

  要問大端、小端孰優孰劣,並不好分。記住在誰的地盤(平台),按誰的規矩行事就萬事大吉。本文大端、小端的內容就寫到這里,希望對你有幫助。

更多信息參考:如何在 STEP 7 (TIA Portal) 中使用符號方式按位,字節,或字訪問非結構數據類型?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM