NMEA 2000
NMEA 2000 (N2K) は、NMEA 0183 の後継として NMEA が策定した舶用機器のネットワーク規格。IEC 61162-3 としても標準化されている。0183 が「ASCIIテキストを一方向に垂れ流すシリアル回線」だったのに対し、N2K は CANベースの双方向マルチドロップネットワークであり、中身は完全に別物。
0183 との比較
| NMEA 0183 | NMEA 2000 | |
|---|---|---|
| 物理層 | EIA-422 シリアル | CAN (ISO 11898) |
| 速度 | 4800bps (HSは38400bps) | 250kbps |
| データ形式 | ASCIIテキスト | バイナリ (PGN) |
| トポロジ | single talker / multiple listeners | multi-talker / multi-listener |
| 配線 | 機器ごとに専用配線 | バックボーン+ドロップケーブル |
| 電源 | 別配線 | 同じケーブルで供給 |
| 中身の確認 | cat /dev/ttyUSB0 で読める |
専用ツールが要る |
物理層・配線
- 速度は 250kbps 固定。
- DeviceNet 由来の M12 5ピンねじ込みコネクタ。信号線2本・電源2本・シールドの5本で、ネットワークケーブルが機器の電源も兼ねる。
- バックボーン+ドロップ構成。船内に1本の幹線を通し、各機器はそこから最大6mのドロップケーブルでぶら下がる。
- ケーブルは2種類。Micro はバックボーン最大100m・電流3Aまで、Mini は最大250m・8Aまで。
- CANなのでバックボーンの両端に120Ωの終端抵抗が要る。N2Kのトラブルの定番は「終端が片方しか入っていない」「T字コネクタを使わずデイジーチェーンしている」といった配線起因。
メッセージ (PGN)
上位プロトコルは SAE J1939 (ISO 11783) をベースにしていて、CANの29bit拡張IDを分解して優先度・PGN (Parameter Group Number)・送信元アドレスを表現する。PGNがデータバイト列の解釈方法を決める。
- アドレスクレーム — 全機器が自己構成可能でなければならず、起動時に ISO 11783-5 の手順でネットワーク上のアドレスを自分で取得する。0183 のように「どの線をどこに挿すか」で決まるのではなく、繋げば勝手に名乗る。
- Fast Packet — CANの1フレームは最大8バイトしかないので、それを超えるデータは分割する。最初のパケットがプロトコル2バイト+データ6バイト、以降がプロトコル1バイト+データ7バイトで、最大32パケット=223バイトまで運べる。J1939 の標準的な分割(TP)とは別に N2K 独自に足された仕組み。
規格の非公開性とリバースエンジニアリング
0183 以上に閉じていて、PGNの完全な定義は公開されていない。機器側も NMEA の認証 を取ることで相互接続性を担保する建て付けになっている。
その一方で、有志による解析プロジェクト canboat が PGN 定義のデータベースとデコードツールを公開しており、オープンソースの舶用ソフト(Signal K、OpenCPN など)は実質これに依存している。0183 における gpsd の “NMEA Revealed” と同じ構図。
ベンダ独自の派生
SimNet (Simrad)、SeaTalk NG (Raymarine)、Dataline 2000、CZone などは、プロトコルは N2K のままコネクタだけ独自というものが多い。変換ケーブルを噛ませれば混在できる。
0183 との共存
置き換えは進んでいるが、0183 機器は現役で残り続けるので、0183↔2000 ゲートウェイが普通に売られている。PCやアプリに座標を渡すだけなら 0183 のほうが扱いやすいので、N2Kネットワークから 0183 に落として使うことも多い。
舶用データ通信プロトコルの中での位置づけ
NMEA 0183 の後継にあたる、船内ネットワークそのものを置き換える規格。0183が「機器から機器へ値を流す」ものだったのに対し、こちらは配線・電源・アドレス割当まで含めたネットワークを定義している。土台は舶用専用ではない汎用の CAN。
出典
- NMEA 2000 - Wikipedia
- NMEA 2000 Protocol | Kvaser
- Reverse engineering the NMEA 2000 standard | canboat