最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c# modbus大小端的使用小結(jié)

 更新時間:2026年03月25日 10:08:50   作者:劍之所向  
本文主要介紹了c# modbus大小端的使用小結(jié),解釋了大小端的本質(zhì)和差異,Modbus協(xié)議和計算機中大小端的默認規(guī)則,及在實際開發(fā)中將計算機小端序的數(shù)據(jù)轉(zhuǎn)換為Modbus要求的大端序,感興趣的可以了解一下

一、先統(tǒng)一核心概念:大小端的本質(zhì)

無論 Modbus 還是計算機,大小端的定義是完全相同的,核心是多字節(jié)數(shù)據(jù)的字節(jié)排列順序:

  • 大端序(Big-Endian):高字節(jié)(數(shù)值權(quán)重高的字節(jié))存放在低地址,低字節(jié)存放在高地址(“高位在前”)。
  • 小端序(Little-Endian):低字節(jié)存放在低地址,高字節(jié)存放在高地址(“低位在前”)。

舉個例子:數(shù)值 0x1234(十進制 4660),2 個字節(jié)的排列:

類型內(nèi)存 / 傳輸順序(低地址→高地址)通俗理解
大端序0x12 → 0x34先寫高位,后寫低位
小端序0x34 → 0x12先寫低位,后寫高位

二、Modbus 與計算機大小端的核心差異

對比維度Modbus 協(xié)議計算機(CPU / 系統(tǒng))
默認規(guī)則強制推薦 / 標準是大端序(無例外)絕大多數(shù)是小端序(x86/x86_64 架構(gòu),如 Intel/AMD CPU);少數(shù)大端(如 PowerPC、SPARC)
應(yīng)用范圍僅作用于寄存器數(shù)據(jù)傳輸 / 存儲:1. 單個 16 位寄存器內(nèi)的字節(jié)排列2. 32 位數(shù)據(jù)跨多個寄存器的字序作用于內(nèi)存中所有多字節(jié)數(shù)據(jù):1. 變量存儲(如 int、float)2. 文件 / 網(wǎng)絡(luò)傳輸前的原生排列
靈活性部分非標設(shè)備會自定義為小端序(需適配)系統(tǒng)級固定,開發(fā)者無法修改(只能手動轉(zhuǎn)換)

三、實戰(zhàn)舉例:為什么會感覺 “不同”?

以你之前的需求為例:要把計算機里的數(shù)值 18(0x0012)寫入 Modbus 寄存器,直觀體現(xiàn)差異:

1. 計算機(小端)的原生存儲

數(shù)值 0x0012 在 x86 計算機內(nèi)存中存儲順序是:0x12(低字節(jié))→ 0x00(高字節(jié))。

2. Modbus(大端)的傳輸要求

Modbus 寄存器要求傳輸順序是:0x00(高字節(jié))→ 0x12(低字節(jié))。

3. 必須做的轉(zhuǎn)換(代碼層面)

如果直接把計算機的原生字節(jié)傳給 Modbus,數(shù)值會變成 0x1200(十進制 4608),完全錯誤!因此需要手動反轉(zhuǎn)字節(jié):

運行

// 計算機小端 → Modbus 大端 轉(zhuǎn)換示例
ushort value = 18; // 0x0012,計算機原生存儲為 0x12 0x00
ushort modbusValue = (ushort)(((value & 0xFF) << 8) | ((value & 0xFF00) >> 8));
// 轉(zhuǎn)換后 modbusValue = 0x0012(傳輸順序 0x00 → 0x12),符合 Modbus 要求

四、關(guān)鍵補充:32 位數(shù)據(jù)的 “雙重差異”

對于 32 位浮點數(shù)(如 25.5),差異會疊加:

  1. 計算機小端:浮點數(shù) 25.5 轉(zhuǎn)字節(jié)是 0x00 0x00 0x20 0x41(原生小端);
  2. Modbus 大端:需先反轉(zhuǎn)整個 4 字節(jié)為大端(0x41 0x20 0x00 0x00),再拆分為 2 個 16 位寄存器(0x4120、0x0000),按 “高字在前” 傳輸。

總結(jié)

  1. 大小端的定義本身相同,差異在于 Modbus 強制用大端,而主流計算機默認用小端;
  2. 開發(fā)中核心工作是把計算機小端的字節(jié)序轉(zhuǎn)換為 Modbus 要求的大端序(少數(shù)設(shè)備需轉(zhuǎn)小端);
  3. 無需糾結(jié) “是否不同”,只需記?。鹤x取 Modbus 數(shù)據(jù)后要轉(zhuǎn)成計算機小端,寫入前要轉(zhuǎn)成 Modbus 要求的字節(jié)序。

簡單來說:Modbus 是 “規(guī)矩固定的外部設(shè)備”,計算機是 “習(xí)慣不同的內(nèi)部系統(tǒng)”,你作為開發(fā)者只需要做好兩者之間的 “翻譯” 即可。

到此這篇關(guān)于c# modbus大小端的使用小結(jié)的文章就介紹到這了,更多相關(guān)c# modbus大小端內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

微山县| 玉溪市| 奉新县| 大埔县| 绥宁县| 杂多县| 新巴尔虎右旗| 宁安市| 万年县| 牙克石市| 敖汉旗| 西林县| 吴江市| 柞水县| 麟游县| 南安市| 临夏市| 永顺县| 仁寿县| 徐州市| 黄冈市| 黔西| 南江县| 平潭县| 扶绥县| 留坝县| 墨竹工卡县| 镇远县| 吉首市| 平定县| 元氏县| 常德市| 英德市| 罗定市| 巨野县| 保康县| 普陀区| 曲水县| 宣化县| 姜堰市| 利辛县|