リトルエンディアンとビッグエンディアンの違いとPLCでの実務的な注意点

エンディアンとは、コンピュータが「複数バイトで構成されるデータ」をどの順番でメモリに保存するかを決めるルールです。
一見マニアックに思えるかもしれませんが、通信やファイル解析、PLC(プログラマブルロジックコントローラ)との接続など、現場では非常に実用的な話です。

この記事では、初心者でも理解できるようにやさしく説明しながら実務でのトラブルを避けるための知識も正確にまとめていきます。

目次

エンディアンとは?

例えば、0x12345678 という16進数の数値(4バイト=32ビット)をメモリに保存する場合、コンピュータはこの値を1バイトずつ分解して保存します。

このとき、どのバイトを先に保存するかによって結果が変わります。

その順番を決める方式がエンディアンであり、次の2種類があります。

ビッグエンディアン(Big Endian)

数値の上位バイト(大きい桁)から順にメモリへ保存します。

例:0x12345678 を保存すると…

アドレス順:  0     1     2     3
               ↓     ↓     ↓     ↓
             [12] [34] [56] [78]

これは、人間が左から読む数値の並び方に近く、直感的です。

リトルエンディアン(Little Endian)

数値の下位バイト(小さい桁)から順にメモリへ保存します。

アドレス順:  0     1     2     3
               ↓     ↓     ↓     ↓
             [78] [56] [34] [12]

完全に前後が反転しているように見えるのが特徴です。

「前後が反転する」とはどういうこと?

ここで言う「反転」とは、バイト(8ビット)単位で順番が逆になるということです。
つまり 0x12345678 という数値を構成する4つのバイトを、前から読むか、後ろから読むかの違いです。
値そのものは変わりませんが、読み取り方法によって全く違う数値になることがあります。

どちらが主流なのか?

用途・環境採用されているエンディアン
パソコン・サーバーリトルエンディアン(Intel系CPU)
ネットワーク通信ビッグエンディアン(Network Byte Order)
多くのPLCビッグエンディアン(例外あり)

なぜ違う?

リトルエンディアンは、下位バイトから処理できるため演算効率が良いという利点があります。
一方、ビッグエンディアンは人間にとって読みやすい順序であり、ネットワークなどで統一ルールが必要な場面で使われます。

PLCでの違いと注意点

PLC(プログラマブルロジックコントローラ)は、産業機械を制御するコンピュータです。
このPLCとPCが通信を行うときにも、エンディアンの違いによってデータが正しく伝わらないことがあります。

メーカーごとの傾向(例)

PLCメーカー傾向備考
三菱電機(MELSEC)ビッグエンディアンQ/Lシリーズなど
オムロン(OMRON)リトルエンディアンCJ/NJ/NXシリーズなど
キーエンス(KEYENCE)ビッグエンディアンKVシリーズ
シーメンス(SIEMENS)ビッグエンディアンS7シリーズ
Allen-Bradley(Rockwell)リトルエンディアンControlLogix、CompactLogixなど

※モデルや通信モードによって例外もあります。必ずマニュアルで確認が必要です。

通信プロトコルとの関係:Modbusでのトラブル例

たとえば、Modbusという通信規格では、PLCはビッグエンディアン、PC側はリトルエンディアンということがよくあります。

例:PLCが 0x1234 を送ったつもりでも、PC側では 0x3412 に見えてしまう。

これは、バイトの並び順が逆になっているためで、数値が大きくズレる原因になります。

対策:ソフトウェアでバイトスワップする

多くの通信ライブラリ(PLCソフトやPythonなど)では、バイト順を変える機能(バイトスワップ、エンディアン変換)が用意されています。

例:Pythonでの指定

import struct

# ビッグエンディアンとして解釈('>'がポイント)
value = struct.unpack('>H', b'\x12\x34')[0]
print(value)  # → 4660(0x1234)

> はビッグエンディアン、< はリトルエンディアンを意味します。

PLC通信ミドルウェアの例

  • Modbusツールで「Swap Words」や「Swap Bytes」というチェックボックスがある
  • OPCサーバでデータ型やバイト順を個別に指定できる場合がある

実務での確認手順

  1. PLCの仕様書でエンディアンを確認する
  2. 通信先(PCや外部機器)の仕様も確認
  3. 試験通信で「既知の値(例:0x1234)」を送受信してみる
  4. 受け取り側の値が逆になっていたら、変換を加える

まとめ:初心者が必ず押さえるべきポイント

  • エンディアンとは、バイトの並び順を決めるルール
  • リトルエンディアン=小さいバイトから先、PCで主流
  • ビッグエンディアン=大きいバイトから先、ネットワークやPLCでよく使われる
  • 「前後が反転する」というのは、バイト単位で順番が逆になるという意味
  • 通信時はエンディアンの違いにより、数値がずれてしまうことがある
  • その場合はソフトウェア側で「バイトスワップ(変換)」を行う

この違いを理解しておくだけで、通信やバイナリ処理のトラブルを大きく減らすことができます。

Comment

コメントする

目次