|TNKS1407 解説
← 解説一覧へ

IO-Link ── センサの3本線に、デジタルの言葉を

2026.06.29

SPI・I²C は基板の中の話だった。これを基板の外 ── 現場のセンサまで延ばすのが IO-Link。すごいのは、いつもの3本線(24V の電源と、オン/オフのスイッチ信号)をそのまま使うのに、その同じ線でセンサがしゃべり・名乗り・設定を受け取れること。しかも中身は、第一歩で開けた UART そのものだ。点対点のまま、“賢いセンサ”へもう一段。

SPI と I²C は、どちらも「基板の上で、チップ同士を近くで結ぶ」話だった。数センチ〜十数センチの世界だ。今日は、その点対点の発想を 基板の外 ── 機械の上に付いた、現場のセンサまで延ばす。出てくるのが IO-Link だ。

そして IO-Link のいちばん面白いところは、新しい線を一本も足さないことだ。工場のセンサが昔から使ってきた、あの3本線(電源 +24V、0V、そしてオン/オフのスイッチ信号)── その同じ3本を使う。なのに、その線でセンサがしゃべり、自分の名前を名乗り、設定を受け取れるようになる。いつものケーブルのまま、ただのスイッチが“賢いセンサ”に化ける、という回だ。

1. いつもの3本線が、しゃべりだす

工場の近接センサを思い浮かべてほしい。金属が近づくと出力線が 24V になり、離れると 0V に戻る ── ただそれだけの、オン/オフの線。配線は3本で、+24V(電源)、0V(GND)、そして信号線が1本。この信号線を、IO-Link の世界では C/Q と呼ぶ。

IO-Link は、この C/Q 線に二つの顔を持たせる。

L+ 24V L− 0V C/Q SIO(従来=オン/オフ) IO-Link(通信) 物が来た=High / 離れた=Low 同じ線に、ビットの列が流れる ── 同じ C/Q 線。マスタが「起こす」と、左から右へ顔が変わる ──
3本線はそのまま。C/Q 線が、ただのオン/オフ(SIO モード)にも、ビットが流れる通信(IO-Link モード)にもなる。だから IO-Link 対応の差し込み口に、昔ながらのただのスイッチを挿しても、ちゃんと動く(その時は SIO のまま)。後方互換、というやつだ。

一つめは SIO(Standard IO)── 昔のまま、ただのオン/オフ。二つめが IO-Link ── 同じ線にビットの列を流して通信する。差し込み口(マスタ側)は、最初に「ねえ、君しゃべれる?」という合図(ウェイクアップ)をその線に送る。相手が返事をすれば通信モードへ、しなければ「ああ、ただのスイッチか」と SIO のまま、という切り替えだ。

もう一つ大事な前提。IO-Link は 点対点 ── マスタの1ポートと、デバイス1台。バスではない(一本の線に大勢ぶら下げるのは、次の RS-485 からの世界)。規格の名前 IEC 61131-9 の正式名も “Single-drop”、つまり「一滴=1台」だ。SPI/I²C の点対点を、そのまま現場のケーブルへ持ち出した、と思えばいい。

2. 中身は、実は UART

では、その C/Q 線を流れるビットは何の形をしているのか。ここが気持ちのいいところで ── 第一歩で開けた UART そのものだ。

通信モードに入ると、C/Q 線には UART のフレームが流れる。start ビットで始まり、8 ビットのデータ、パリティ(偶数)、stop ビット ── あの「枠にはめて送る」やつだ。速さ(ボーレート)は3段階のどれかで、マスタとデバイスがウェイクアップのときに握り合う:

つまり、UART の回で握った勘 ── start/stop の枠、ボーレート=1ビットの幅、受信は各ビットの真ん中で読む ── が、そっくりそのままここで効く。下は UART の波形ラボだけど、IO-Link の線を流れているのは、まさにこれだと思って眺めてほしい。

役割もはっきりしている。いつもマスタが主導して問いかけ、デバイスが答える。毎周期やり取りする「いまのセンサ値」=プロセスデータ(数バイト、最大32バイトほど)と、ときどき読み書きする「設定や素性」=オンリクエストデータの二本立てだ。常に流れる細い管(プロセス値)と、必要なときだけ開く太い扉(設定)、と分けて持っている。

3. 名乗る・設定できる ── ただのスイッチとの違い

ここからが、ただのオン/オフ線との本当の違いだ。IO-Link のデバイスは、素性設定の引き出しを持っている。

そして、その引き出しの中身が機種ごとにどう並んでいるかは、IODD(IO Device Description)という XML ファイルに書いてある。マスタはこれを読めば、見たことのないセンサでも「インデックス 0x0012 は製品名、0x0024 はしきい値」と分かる。

この「機種を説明する一枚の XML」という発想、実はこのシリーズで何度も顔を出す。EtherCAT の ESI、PROFINET の GSD ── みんな同じ役回りだ。「どんな相手でも、説明書さえ標準形なら、汎用のマスタが扱える」。IO-Link の IODD は、その最小版、といっていい。

4. コードでは ── プロセス値と、パラメータ

ソフトから触るとき、入口は機種(マスタ)によって違う。けれど 形はいつも同じ二つの扉だ ── 毎周期の プロセスデータ(いまの値)と、番号引きの パラメータ(ISDU)。

最近の IO-Link マスタは、その二つを JSON-REST で外に出していることが多い。例えばこんな具合(パスはメーカごとに違うけれど、「ポートを選んで、プロセス値か、インデックスでパラメータを読む」という形は共通だ):

# IO-Link マスタ(IP: 192.168.0.10)の ポート1 を読む例
import requests

M = 'http://192.168.0.10'

# (1) 毎周期のプロセスデータ=いまのセンサ値(生バイト列)
pd = requests.get(f'{M}/port/1/processdata/value').json()
print('process data =', pd['value'])     # 例: '01A4' (意味は IODD が決める)

# (2) パラメータ=インデックス番号で引く(ISDU)。0x0012 = 製品名
name = requests.get(f'{M}/port/1/param/18').json()   # 18 = 0x12
print('product =', name['value'])

# (3) パラメータを書く=設定する(例: しきい値インデックスに 500 を入れる)
requests.put(f'{M}/port/1/param/100', json={'value': 500})
入口の見た目はメーカ次第。でも「ポートを選ぶ → プロセス値を読む/インデックスでパラメータを読み書きする」という骨格は、どのマスタでも変わらない。PLC から使うときも同じで、プロセス値は I/O の一区画として、パラメータは番号引きのアクセスとして見える。

プロセスデータが「生バイト列」なのがポイントだ。01A4 が圧力なのか温度なのか、何倍すれば物理量になるのか ── それを決めているのは IODD。EtherCAT のフレームで見た「バイトの並びの意味は、別腹の説明書が決める」と、まったく同じ構図になっている。

5. 特別な機構 ── 壊れたセンサを、ポン付けで戻す

IO-Link がただの「デジタル化」を超えて現場で重宝される理由が、一つある。データストレージだ。

マスタは、つないでいるデバイスのパラメータの控えを 自分の側に持っている。だから、センサが壊れて、同じ型番の新品にポン付けで交換すると ── マスタが控えのパラメータを自動で書き戻す。ノートPCを持って現場へ行き、しきい値や感度を設定し直す、という作業が要らない。ラインが数秒で復帰する。

地味に見えて、これは工場ではとても大きい。「センサ交換=専門家+設定作業=ライン停止」が、「センサ交換=誰でも・ポン付け・即復帰」に変わる。先の「異常を理由つきで申告する(黙って落ちない)」と合わせて、止まらない・直しやすいを、いつもの3本線のまま手に入れている。

6. どこに居るのか ── 最後の一メートル

最後に、地図の上での居場所を確かめておこう。

IO-Link は 点対点で、近い(ケーブルは20mまで)。マスタの1ポートにつき、デバイス1台。だから IO-Link は、上位のネットワーク(フィールドバス)を置き換えない。その下にぶら下がる。IO-Link マスタ自身が、PROFINET や EtherNet/IP、EtherCAT といったフィールドバス上の一台(ノード)になっていて、何ポートぶんものセンサを束ねて、まとめて上の PLC へ渡す。

PLC フィールドバス(PROFINET / EtherNet-IP / EtherCAT) IO-Link マスタ(4〜8ポート) IO-Link 点対点・最後の1m センサ センサ 表示 上=みんなで共有するネットワーク。下=マスタから各機器への、一本ずつの線。
IO-Link は「最後の一メートル」を受け持つ。ネットワーク(上)はみんなで共有する大通り、IO-Link(下)はマスタから各センサへ伸びる一本道。だから IO-Link を学ぶと、フィールドバスの“末端の枝”が見えるようになる。

梯子の上での位置はこうだ。SPI・I²C は「基板の上の点対点」だった。IO-Link は、その点対点の発想を、現場のセンサケーブルへ持ち出して、相手を賢くしたもの ── でも、つなぐ相手はやっぱり1台ずつ(点対点)のまま。「最後の一メートル」を、いつもの線でデジタルにする、という一段だ。

さて、ここまでは「1対1」で来た。次は、いよいよ一本のバスに、大勢を、長い距離でぶら下げたくなる。そのために変えるのは、電圧の持ち方 ── 2本の線に逆向きの信号を流して“差”で読む 差動だ。これで、ノイズに強く・遠く・多数の世界、RS-485 と Modbus へ進む。点対点の枝を一通り見たから、今度は幹のほうへ。