SL651 驱动
dc3-driver-sl651把 SL651-2014 水文遥测站接入 IoT DC3——它监听一个 TCP 端口,被动接收远端测站主动上报的遥测报文,按配置把报文体里指定位置的要素值转成位号值。
SL651-2014 是水利行业的《水文监测数据通信规约》。和 Modbus 那种"主站主动去读从站"的现场协议不同,SL651 是服务端协议:分散在各处的遥测站(如雨量站、水位站)按自己的时段,把采集到的遥测数据主动推送给一个中心服务器。本驱动就是那个中心服务器——它启动一个 SL651 TCP 服务监听端口,等测站连上来上报,解析报文体里的遥测要素,用测站地址匹配到对应设备,再把指定要素转成位号值。
因为数据是测站异步、主动送上来的,这是一个监听型驱动,而不是轮询型:SDK 的 read/write 不参与采集(按设计 read 返回空、write 返回 false),定时读取被关闭(schedule.read.enable: false),只保留设备健康检查。
- 驱动名 / code:
SL651 Hydrological Telemetry Driver/Sl651Driver - 类型:
DRIVER_CLIENT
名词先解释
- 测站地址(station address):SL651 报文头里标识上报方的地址,本驱动取其十六进制串,用来和设备的
deviceCode或deviceName做匹配(不区分大小写)。 - 遥测要素(element):一份上报报文体里按顺序排列的一组测量值(如水位、雨量、电压……),位号靠下标
index取其中一个。
驱动配置(设备级 driver-attribute)
| 属性 | code | 类型 | 默认值 | 说明 |
|---|---|---|---|---|
| Listen Port | port | INT | 5001 | SL651 服务监听的 TCP 端口 |
| Auth Password | pwd | STRING | 0000 | 远端测站鉴权密码 |
端口是驱动级的,被同进程内所有测站共用
port 决定整个驱动进程监听哪个 TCP 端口,所有上报到这个端口的测站共用同一个服务。不同测站靠测站地址(即设备的 deviceCode/deviceName)区分,不是靠端口。改 port 会触发服务重启。
位号配置(point-attribute)
每个采集位号上只需填一个属性——它在报文体要素列表里的下标:
| 属性 | code | 类型 | 默认值 | 说明 |
|---|---|---|---|---|
| Element Index | index | INT | 0 | 报文体要素列表的下标(从 0 开始) |
驱动收到某测站的上报后,会把报文体里所有要素按顺序汇成一个列表;位号的 index 就是从这个列表里取第几个值(index=0 取第一个)。下标越界的位号本轮跳过。
采集与健康
- 采集方式:被动监听,没有主动读取周期(
schedule.read.enable: false)。驱动另有一个内部自定义调度 cron0/5 * * * * ?,但采集本身由测站上报触发,不受该周期约束。 - 健康/在线:设备健康检查默认 cron
0/15 * * * * ?,租约超时45 秒——测站在超时内有上报即视为在线,机制见设备。
最小接入示例
把一个测站地址为 12345678、上报到本机 5001 端口的水位站接进来:
- 选
SL651 Hydrological Telemetry Driver创建设备,设备编码deviceCode填12345678(要和测站上报的地址一致),driver 属性填port=5001、pwd=0000。 - 给设备绑定的物模型加一个水位位号(按上报要素的实际类型设
pointTypeFlag、READ_ONLY),point 属性填index=0(取报文体第一个要素)。 - 启动驱动,让测站把数据推上来;测站一上报,匹配上的位号就会出现在位号值里。
易错点
设备编码必须等于测站地址,否则数据被丢弃
驱动用上报报文头里的**测站地址(十六进制串)**去匹配设备的 deviceCode 或 deviceName(不区分大小写)。两者对不上,这份上报就被静默丢弃——你会看到驱动在收报文,却没有任何位号值。接入前先确认测站实际上报的地址,并照抄到 deviceCode。
index 是报文体要素的"第几个",不是寄存器地址
index 是驱动解析出的要素列表下标,从 0 开始,和测站报文里要素的排列顺序一一对应。它不是 SL651 的标识符编码,也不是任何寄存器地址。要素顺序由测站配置决定,接入前需对照测站的上报内容确认每个 index 对应哪个量。
这是只读监听驱动,不要配写命令
SL651 在本驱动里只接收上报、不下发——write 按设计返回 false,因此没有 command-attribute,给位号配写命令不会生效。需要远程控制测站请走测站自身的下行通道,不在本驱动职责内。