メインコンテンツまでスキップ

NMEA 0183 (海洋 / 船舶)

NMEA 0183 は、米国 National Marine Electronics Association が1983年に標準化した海洋 / 船舶機器向けのASCII通信規約です。GPS / ジャイロコンパス / 風速計 / 魚群探知機 / AIS など、ほぼすべての海洋センサーがこの sentence フォーマットを使用します。

ゲートウェイのNMEAドライバは TCP (NMEA over IP) で sentence stream を受信し、checksum (XOR) を検証した後、sentence type ごとにフィールドをパースして公開します。読み取り専用 です。

UDPマルチキャストで受信する船橋機器の場合

船舶統合ブリッジのように IEC 61162-450(Lightweight Ethernet) でセンテンスをマルチキャストする環境では IEC 61162-450 ドライバ を使用してください。センテンスパーサーが同一であるため、タグアドレス表記と alias は本ドキュメントと完全に同じです


登録フォーム入力値

入力欄記入内容
IPアドレスNMEA多重化装置 / ルーターのIP192.168.0.140
ポートNMEA TCPポート10110 (de-facto標準) / 4001 (機器別)
  • 文字セットは US-ASCII 固定 です (フォームオプションなし)。
  • 詳細オプション nmea.port (フォーム非表示 — REST API 登録時に options でのみ指定): 値がある場合、上記フォームのポートの代わりにこの値で接続します。
書き込み非対応

NMEA 0183 は sentence の単方向 broadcast が一般的です。ゲートウェイは read-only で動作します。機器制御が必要な環境では、NMEA 2000 / Modbus ゲートウェイを別途設置してください。


タグのPLCアドレス表記

アドレスは <sentence-type>.<field-no|alias>ドット(.)表記 です。フィールド番号は talker 2文字を除いた 1-base インデックスです。

表記意味
RMC.7RMC の7番目のフィールド (対地速力 kn)
GGA.2GGA の2番目のフィールド (緯度)
RMC.latalias — 下表参照 (大文字小文字は無関係)
RMC(フィールド省略) 最後に受信した raw センテンス全体

alias が定義されていない sentence type もフィールド番号 (XXX.3) でアクセスでき、タイプのみ記入すると raw センテンス全体を文字列として受け取ります。

旧表記とは異なります

コロン表記 (RMC:lat) と RAW:<sentence-type> 表記はサポートしません — それぞれ RMC.lat<sentence-type> (タイプのみ) で登録してください。satellites / windAngle / windSpeed のような長い名前の alias もありません — 実際の alias は sats / angle / speed です (下表がドライバ定義の全体です)。

対応 sentence / alias 全体 (ドライバ定義)

sentencealias
RMCutc, status, lat, ns, lon, ew, speed (kn), course, date, magvar, magvarew, mode
GGAutc, lat, ns, lon, ew, fix, sats (衛星数), hdop, alt, altunit, geoidsep, sepunit, dgpsage, dgpsid
GLLlat, ns, lon, ew, utc, status, mode
VTGcogtrue, cogmag, speed (kn, = speedkn), speedkm (km/h), mode
GSAmode1, mode2, pdop, hdop, vdop
GSVtotalmsgs, msgnum, satsinview
HDTheading (true), t
HDMheading (magnetic), m
MWVangle (風向角), ref (R/T), speed (風速), units, status
DBTdepthft, depthm (= depth, m), depthfa
DPTdepth (m), offset, max
MTWtemp, units
VHWheadingt, headingm, speed (kn), speedkm
ZDAutc, day, month, year, tzh, tzm
XDRtype, value, units, id (最初の transducer グループのみ)

受信ルール (ドライバ動作)

  • $ で始まるセンテンスのみ 処理します — ! encapsulation (AIS の AIVDM / AIVDO) は非対応。
  • checksum ($* 区間のXOR) が一致しないセンテンスは破棄します。checksum のないセンテンス (一部の旧型機器) は受け入れます。
  • talker 2文字 (GP / GN / GL / HC / II …) は自動的に除去されます — $GPRMC$GNRMC は同じ RMC キーにキャッシュされ、最後に受信した値が公開 されます。proprietary $P... センテンスは talker を分離せずそのままキーになります。

データ形式のマッチング

値は sentence フィールドの ASCII 原文そのまま 公開されます — ドライバは単位 / 座標変換を行いません。

sentence フィールドデータ形式形式補助
速度 / 水深 / 高度 / DOP などの数値フィールドFloatREAL
Fix品質 / 衛星数Integer(空欄)
緯度 / 経度 (DDMM.MMMM 原文)Float (+ 計算式による変換を推奨)REAL
UTC時刻 / ステータス文字 (A/V) / raw センテンスStringSTR[80]
緯度経度は DDMM.MMMM 原文

NMEA の緯度経度は「度度分分.分分」フォーマット (例: 4807.038 = 48°07.038′) であり、ドライバは十進度 (decimal degree) に変換しません。 十進度が必要な場合は 計算式の適用 でタグに変換式を設定してください。


よくある問題と解決

症状 / メッセージ考えられる原因解決
“Connection refused”NMEAルーターのTCPポートが未開放多重化装置 (Brookhouse / Actisense / NavLink2) の設定でTCP serverを有効化
一部の sentence のみ受信できない機器がその sentence を送信していない機器マニュアルで送信 sentence 一覧を確認
緯度経度が異常に大きい数値DDMM.MMMM 原文がそのまま公開されている (正常動作 — ドライバは変換しない)計算式の適用 で十進度に変換
AIS (AIVDM) の値が受信できない! encapsulation 非対応 ($ センテンスのみ処理)別途 AIS デコーダを経由 (下記ヒント参照)
同じセンテンスを複数の talker が送信talker 除去後は同じキー — 最後に受信した値のみ公開ルーターで talker filter を適用
Sentence の受信が速すぎるNMEA は通常 1Hz~10Hzタグの polling 周期を1秒にすると最後の値を受け取ります

よく使う例

船舶の基本GPS + 環境センサーのセット:

タグ名アドレスデータ形式形式補助
緯度 (DDMM.MMMM)RMC.latFloatREAL
経度 (DDDMM.MMMM)RMC.lonFloatREAL
速度 (knots)RMC.speedFloatREAL
衛星数GGA.satsInteger(空欄)
Fix品質GGA.fixInteger(空欄)
風向角MWV.angleFloatREAL
風速MWV.speedFloatREAL
水深 (m)DPT.depthFloatREAL
ジャイロヘディングHDT.headingFloatREAL
AIS は別扱い

AIS (船舶識別) は NMEA 0183 の上に載る別個のペイロードです。AIVDM / AIVDO センテンスの binary payload のデコードが必要な場合は、別途 AIS デコーダ (gpsd / aisutils) を経由して取り込むことを推奨します。


さらに詳しい例 / 自動化登録