キーエンスやオムロン、ロックウェルなどのマニュアルを読んでいると、必ず出てくる「CIP」という言葉。 EtherNet/IPのケーブルを繋ぎたいだけなのに、急に「CIP通信」や「CIPオブジェクト」なんて専門用語が出てくると、「新しい規格?」「メーカー独自?」と混乱してしまいますよね。
この「CIP」を理解していないと、PLCでメッセージ通信(MSG命令)を組むとき、「クラス? インスタンス?」とパラメータ入力で挫折することになります。 結果、設定ミスで通信エラーが消えない「地獄」を見ることに……。
そこで今回は、多種多様なメーカーの機器を接続してきた実務9年の現場エンジニアの視点から、難解なCIPの仕組みを「ある会社の組織図」に例えて解説します。
結論から言うと、CIPとは「工場の共通言語(文法)」であり、マニュアルの数字は「会社の内線番号」に過ぎません。
ただし、メーカーによって「言葉の並び順(エンディアン)」が逆になるという致命的な罠があります。 これを知らずに接続すると、「100mm」と指令したつもりが「25600mm」と解釈され、機械が壁に激突するかもしれません。
CIPとは何か?EtherNet/IPとの決定的な違い
まず、よくある勘違いを解消しましょう。 「EtherNet/IP」と「CIP」は、役割が全く違います。
結論から言うと、EtherNet/IPは「電話機」であり、CIPはそこで話される「日本語」です。
「電話機」と「日本語」の違いでイメージせよ
この2つの関係性は、以下のようにイメージしてください。
- EtherNet/IP = 「電話機(伝達手段)」
- CIP = 「日本語(話す内容・文法)」
電話(Ethernet)を使おうが、糸電話(DeviceNet)を使おうが、そこで語られている「言葉のルール(CIP)」は同じですよね?
だから、EtherNet/IPもDeviceNetもCompoNetも、みんな「CIPファミリー(親戚)」と呼ばれます。 伝達手段(ケーブル)が違うだけで、中身の文法(CIP)は共通だからです。
ケーブルの中の「マトリョーシカ」現象
もっと物理的なイメージで言うと、「トラック(Ethernet)」の中に「手紙(CIP)」が乗っている状態です。
- Ethernet/TCP/IP(トラック・封筒)
- データを運ぶための運送業者。
- 「192.168.1.10へ運んでくれ」という宛名だけを見て運びます。中身には関知しません。
- CIP(手紙)
- 封筒の中に入っている「手紙」そのもの。
- 「製造部の1号機さん、データを教えて」という命令の中身が書かれています。
現場で言う「CIP通信をする」というのは、いつものLANケーブル(トラック)を使って、この特殊なフォーマットの手紙(CIP)を送り合うことなのです。

マニュアル解読の鍵!「C・I・A」は会社組織だ
さて、ここからが本題です。 PLCでCIP通信(Explicitメッセージ)を行おうとすると、必ず以下の3つのパラメータ入力を求められます。
- Class (クラス)
- Instance (インスタンス)
- Attribute (アトリビュート)
マニュアルの「オブジェクト仕様書」に並ぶこの無機質な数字。 これを「会社の組織」に置き換えると、一瞬で意味が分かるようになります。
通信相手の機器(インバータなど)を、「ひとつの会社(インバータ株式会社)」だと思ってください。。
① Class(クラス) = 「部署」
会社の中には、機能ごとに部署が分かれていますよね。CIPも同じです。 「Class ID」を指定するということは、「どの部署に電話をかけるか」を選んでいるだけです。
- Identity クラス (ID: 1)
- 「総務部(自己紹介課)」
- 会社の名前や、製品名などを管理している部署です。
- Assembly クラス (ID: 4)
- 「製造部(入出力課)」
- 実際のデータ(ON/OFF信号など)を扱っている部署です。
- Parameter クラス (ID: 15)
- 「技術部(設定課)」
- 加速時間などのパラメータを管理している部署です。
「Class ID」を指定するということは、「どの部署に電話をかけるか」を選んでいるだけです。
② Instance(インスタンス) = 「社員(担当者)」
部署の中には、実際に働いている「人」がいます。 「Instance ID」を指定するのは、「その部署の、誰(何番さん)を呼び出すか」を指定することです。
- Instance 1 → 「1号機の担当者さん」
- Instance 2 → 「2号機の担当者さん」
※インバータ単体の場合は、基本的に「1番さん(Instance 1)」しかいないことが多いですが、多軸コントローラなどの場合は2番、3番と増えていきます。
③ Attribute(アトリビュート) = 「その人の個人情報」
電話に出てくれた担当者さんから、何を聞き出したいですか? 「Attribute ID」は、その人が持っている「名簿の何行目のデータが欲しいか」を指定する番号です。
- Attribute 1 (Vendor ID) → 「あなたの会社コードは?」
- Attribute 7 (Product Name) → 「あなたの製品名は?」

「住所(CIP)」は読めた。じゃあ、どうやって送る?
クラスやインスタンスで「宛先」は理解できましたね。 では、その宛先にデータを送るとき、「都度メールを送る(Explicit)」のが良いのか、「ベルトコンベアで垂れ流す(Implicit)」のが良いのか?
現場で迷いがちな「通信モードの使い分け」については、こちらの記事で解説しています。

実際に「翻訳」してみよう
では、実際にマニュアルによくある設定を、この「会社」の例えで翻訳してみましょう。
具体的な「翻訳」の流れ
【ミッション】インバータの製品名(形名)をPLCで読み出したい。 マニュアルのオブジェクト一覧表には「Identity Object, Class 1, Instance 1, Attribute 7」と書いてある。
これを翻訳すると、こうなります。
- Class 1 (Identity)
- 「もしもし、総務部(自己紹介課)をお願いします」
- Instance 1
- 「総務部の1番さん(代表者)を出してください」
- Attribute 7 (Product Name)
- 「あなたの製品名(7番の項目)についてですが……」
- Service Code (Get Attribute Single)
- 「内容を教えて!(Get)」
返答: 「はい、私は『FR-E800』です」
どうですか? やっていることは、ただの「電話での問い合わせ」なんです。 PLCのMSG命令で設定している数字の羅列は、この「内線番号」を順番に指定していただけなんですね。
サービスコードは「動詞」である
最後に一つだけ。「Service Code(サービスコード)」という設定項目があります。 これは、相手に対する「動詞」です。
- Get (0E) = 「教えて(読む)」
- データを読み出したいときに使います。
- Set (10) = 「書き換えて(書く)」
- パラメータを変更したいときに使います。
「部署・人・項目」を特定して、最後に「それをどうするのか(読む or 書く)」を命令する。これがCIP通信の流れです。
コラム:実は「いつもの通信」でもCIPは使われている?
ここまで読むと、「CIPって、面倒なメッセージ通信(Explicit)をするときだけ使うんだな」と思うかもしれません。 でも実は、皆さんが普段何気なく設定している「サイクリック通信(I/O通信)」でも、裏側ではCIPが使われているのです。
設定ソフト(Network Configuratorなど)で、こんな入力をしたことはありませんか?
- Input Instance: 100
- Output Instance: 101
「ああ、いつもの設定ね」とスルーしていたこの数字。 実はこれ、「製造部(Class 4)の、100番さん(Instance 100)と契約します!」 という、バリバリのCIPアドレス指定なんです。
- メッセージ通信:
- 毎回電話して「〇〇部の××さん!」と呼び出す。(都度注文)
- サイクリック通信:
- 最初に一回だけ「〇〇部の××さんと契約!」と申し込んで、あとは自動で届けてもらう。(定期購読)
「あの数字は、CIPの『社員番号(インスタンス)』だったのか!」 これを知っていると、設定画面の入力項目がただの記号ではなく、意味のある「住所」に見えてきませんか?
現場でハマる「CIP設定」の落とし穴2選
最後に、現場で一番困るポイントを解消しておきましょう。 「理屈は分かったけど、実際のソフトにはどう入力すればいいの?」 メーカーのマニュアル(メニュー表)からPLCの設定画面(注文書)へ転記するときには、3つのコツがあります。
最大の罠!「エンディアン」で数値がバケモノになる
ここがプロでもやらかす最大の落とし穴です。 CIP通信の規格は「リトルエンディアン(下位バイトが先)」と決まっていますが、通信相手のロボットや計測器が「ビッグエンディアン」で動いている場合、データが逆順で届くことがあります。
例えば、PLCから「100mm(Hex: 0064)」という移動距離を送ったとします。
- PLC側(リトルエンディアン):
64 00の順番で送信 - 海外製ロボット(ビッグエンディアン):
64 00を受け取り、「上位バイトが64だ!」と解釈
すると、ロボット側では 6400 (Hex) = 「25,600mm」 という値に化けてしまいます。
- 指令値: 100mm
- 実際: 25,600mm (25メートル暴走!)
通信エラーが出ないのが一番の恐怖 恐ろしいことに、CIP通信自体は「正常」に成功しています。
他社メーカーと通信する際は、必ず「バイトスワップ(並び替え)」機能を使うか、テスト時に「1」などの小さな値を送って、データが化けていないか確認してください。
インスタンスIDは「1」とは限らない!
ここが初歩的なミスの温床です。 「とりあえず 1 を入れておけば動く」と思っていると痛い目を見ます。
- 基本機能(総務部など): Identityオブジェクトなどは、確かに 「1」 であることがほとんどです。
- 入出力(製造部): Assemblyオブジェクトなどは、「100」「101」 など、全然違う番号が割り振られています。
マニュアルのオブジェクト一覧表には、必ず「Instance ID」や「Instance」という項目(あるいは表の枠外)に番号が書かれています。 「だいたい 1 だろう」と思い込まず、必ずマニュアルに書かれている番号(社員番号)をそのまま入力してください。
「16進数」と「10進数」の変換
ここが最大の落とし穴です。 マニュアルの表に書かれている数字は、**「16進数(Hex)」**で書かれていることがほとんどです。
- 例:Class 0F, Attribute 10 など
しかし、PLCの設定ソフトはメーカーによって**「10進数」**で入力を求めてくることがあります。
- Class 0F (Hex) → 15 (Dec)
- Attribute 10 (Hex) → 16 (Dec)
「設定したのにエラーが出る!」という時は、だいたいこの変換ミスです。 マニュアルに 0x や h が付いていたら16進数なので、Windowsの電卓(プログラマ電卓モード)で変換して入力しましょう。
まとめ:CIPはただの「会社の電話帳」である
今回の内容をまとめます。
- EtherNet/IPとCIP: 「電話機」と「日本語」の関係。
- Class: 部署(総務部、製造部…)
- Instance: 担当者(1番さん…)
- Attribute: 欲しい情報(社名、設定値…)
このイメージを持ってマニュアルの「オブジェクト仕様書」を見返してみてください。今まで暗号に見えていた数字の表が、「会社の電話帳」に見えてくるはずです。
【応用】もし、その手紙が「非常停止」だったら?
通常のCIP通信は「白い封筒」に入った普通の手紙です。しかし、命に関わる「非常停止信号」を送る場合は、もっと厳重なセキュリティが必要です。 普通のCIPと何が違うのか?「黄色いアタッシュケース」と呼ばれるCIP Safetyの仕組みはこちらで解説しています。
