當前位置: 妍妍網 > 碼農

Modbus通訊中到底用大端還是小端???

2024-07-10碼農

MODBUS系列文章





MODBUS 是什麽

MODBUS是一種廣泛使用的序列通訊協定,主要用於工業自動化領域的電子裝置之間的通訊。它支持多種型別的網路,包括乙太網路、序列通訊等。MODBUS協定以其簡單性、穩定性和開放性而受到青睞。

大小端模式起源

大端(Big Endian)和小端(Little Endian)的概念源於電腦科學中的字節序問題。大端模式中,數據的高位字節儲存在低地址,而小端模式則相反。這兩種模式的命名來源於Jonathan Swift的【格利佛遊記】,其中描述了兩個國家因為吃雞蛋的方式不同而發生的戰爭,這被用來形象地描述字節序的差異。

MODBUS大小端是個啥

MODBUS協定中的"大小端"是指數據在記憶體中的字節序,即多字節數據的字節如何排列。在MODBUS通訊中,尤其是MODBUS-RTU模式,使用的是大端模式(Big Endian)。下面透過一個例子來說明大端和小端的區別:

假設我們有一個16位元的寄存器值 0x1234 ,需要透過MODBUS-RTU協定發送這個值。

  • 大端模式(Big Endian) :在大端模式下,數據的高位字節(MSB)儲存在低地址處,低位字節(LSB)儲存在高地址處。以 0x1234 為例,它在記憶體中的表示是:

    在MODBUS-RTU協定中發送時,會先發送0x12,然後發送0x34。

  • 地址0x00: 0x12(高8位元)

  • 地址0x01: 0x34(低8位元)

  • 小端模式(Little Endian) :在小端模式下,數據的低位字節儲存在低地址處,高位字節儲存在高地址處。同樣以 0x1234 為例,它在記憶體中的表示是:

    如果一個使用小端模式的系統直接發送 0x1234 ,它會先發送0x34,然後發送0x12。

  • 地址0x00: 0x34(低8位元)

  • 地址0x01: 0x12(高8位元)

  • 大小端使用場景

    在MODBUS通訊中,主要有兩種協定:MODBUS-RTU和MODBUS-TCP。這兩種協定在字節序的使用上有所不同

    1. MODBUS-RTU

  • 它使用的是 大端模式(Big Endian) 。在MODBUS-RTU協定中,所有的數據交換都是以大端字節序進行的。這意味著在發送和接收數據時,高位字節(MSB)總是被發送或接收在前,低位字節(LSB)在後。例如,如果有一個16位元的寄存器值 0x1234 ,在MODBUS-RTU中會先發送 0x12 ,然後發送 0x34

    1. MODBUS-TCP

  • MODBUS-TCP協定本身並不規定字節序,因為它是在IP網路層面上執行的,而IP網路通訊通常使用大端字節序。然而,當MODBUS-TCP用於與MODBUS-RTU裝置通訊時,它通常會遵循MODBUS-RTU的約定,即使用大端模式。這是因為MODBUS-TCP通常作為MODBUS-RTU數據的封裝,保持數據的一致性。

  • 但是,如果MODBUS-TCP用於其他上下文,比如在不同平台或裝置之間的通訊,可能需要根據接收端的字節序來轉換數據。例如,如果一個使用小端字節序的裝置接收到來自MODBUS-TCP的數據,可能需要將數據從大端轉換為小端,以確保數據的正確解釋。

    1. 跨平台數據交換

  • 當MODBUS通訊涉及到不同硬體平台或作業系統時,字節序問題尤為重要。例如,如果一個使用小端字節序的PC機需要與使用大端字節序的嵌入式系統通訊,就必須在發送和接收數據時進行字節序的轉換。

    1. 裝置配置和診斷

  • 在裝置配置和診斷過程中,如果涉及到讀取或寫入寄存器值,這些值在MODBUS協定中是以大端字節序傳輸的。因此,即使裝置內部可能使用小端字節序儲存數據,通訊時也需要轉換為大端字節序。

  • C#大小端轉換函式

    在C#中進行MODBUS通訊時,經常需要進行大小端字節序的轉換,因為MODBUS協定通常使用大端模式,而C#執行的系統可能是小端模式。

    從大端轉換為小端

    public static ushort BigEndianToLittleEndian(ushort bigEndianValue)
    {
    return (ushort)((bigEndianValue << 8) | (bigEndianValue >> 8));
    }

    從小端轉換為大端

    public static ushort LittleEndianToBigEndian(ushort littleEndianValue)
    {
    return (ushort)((littleEndianValue >> 8) | (littleEndianValue << 8));
    }

    總之,MODBUS協定的大小端問題不僅僅是一個技術細節,它關系到整個自動化系統的穩定性和效率。隨著技術的不斷進步,對這些基礎知識的掌握將為工程師和開發者提供強大的支持,使他們能夠構建更加智慧、靈活和可靠的自動化解決方案。正確處理字節序,將為工業4.0時代的智慧系統鋪平道路。

    近期熱文: