跳到主要内容

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(事实标准)/ 4001(因设备而异)
  • 字符集固定为 US-ASCII(无表单选项)。
  • 高级选项 nmea.port表单中不显示 — 仅在通过 REST API 注册时以 options 指定):若有值,则使用该值而非上述表单端口进行连接。
不支持写入

NMEA 0183 通常为 sentence 单向 broadcast。网关以 read-only 方式运行。若环境中需要控制设备,请另行配置 NMEA 2000 / Modbus 网关。


标签的 PLC 地址表记

地址为 <sentence-type>.<field-no|alias>点(.)表记。字段编号是排除 talker 两个字符后的 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 两个字符(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 sentence 的 binary payload,建议经由独立 AIS 解码器(gpsd / aisutils)接入。


更详细的示例 / 自动化注册