DL/T 645 插件
DL/T 645 插件
Section titled “DL/T 645 插件”DL/T 645 插件实现了 DL/T 645 电力行业标准协议,用于与电能表进行通信,支持数据抄读和控制。
- DL/T 645-2007:支持 DL/T 645-2007 协议标准
- 串口通信:支持 RS485 串口通信
- 自动采集:定时采集电能表数据
- 批量读取:按采集周期分组批量读取
- 协议日志:支持协议解析日志输出
- 自动重连:通信异常时自动重连
- 电表地址识别:支持多位电表地址
连接配置位于 config.json 的 connections 字段下:
串口配置示例
Section titled “串口配置示例”{ "plugin": "dlt645", "connections": { "meter-port-1": { "address": "/dev/ttyUSB0", "baudRate": 2400, "dataBits": 8, "stopBits": 1, "parity": "E", "minInterval": 100, "timeout": 1000, "retry": 3, "autoReconnect": true, "protocolLogEnabled": false } }}配置参数说明
Section titled “配置参数说明”| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| address | string | - | 串口设备路径(如 /dev/ttyUSB0) |
| baudRate | uint | 2400 | 波特率(常见值:1200、2400、4800、9600) |
| dataBits | uint | 8 | 数据位(通常为 8) |
| stopBits | uint | 1 | 停止位(通常为 1) |
| parity | string | E | 校验位(N=无、E=偶、O=奇) |
| minInterval | uint16 | 100 | 最小读取间隔(毫秒) |
| timeout | uint16 | 1000 | 请求超时时间(毫秒) |
| retry | int | 3 | 重试次数 |
| autoReconnect | bool | false | 是否自动重连 |
| protocolLogEnabled | bool | false | 是否启用协议解析日志 |
点位配置基于通用点位定义,并添加 DL/T 645 协议扩展参数。
通用点位参数
Section titled “通用点位参数”点位的基础参数请参考设备配置指南。
DL/T 645 扩展参数
Section titled “DL/T 645 扩展参数”在通用点位基础上,DL/T 645 插件支持以下扩展参数:
{ "name": "total_energy", "description": "总有功电能", "valueType": "float", "readWrite": "R", "dataMaker": "00000000", "quantity": 4, "duration": "5s"}| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| dataMaker | string | 是 | DL/T 645 标准中的数据标识(如 00000000 表示正向有功总电能) |
| quantity | uint16 | 否 | 数据长度(字节数) |
| duration | string | 否 | 采集周期,默认 1s |
设备属性说明
Section titled “设备属性说明”DL/T 645 设备需要在 properties 中配置电表地址:
| 属性 | 类型 | 必填 | 说明 |
|---|---|---|---|
| slaveId | string | 是 | 电表地址(支持 1-12 位十进制地址) |
数据标识(Data Maker)
Section titled “数据标识(Data Maker)”DL/T 645 协议使用数据标识来指定要读取的数据项。常见数据标识:
| 数据标识 | 说明 | 数据类型 |
|---|---|---|
| 00000000 | 正向有功总电能 | 数值 |
| 00000100 | 正向有功费率 1 电能 | 数值 |
| 00000200 | 正向有功费率 2 电能 | 数值 |
| 00000300 | 正向有功费率 3 电能 | 数值 |
| 00000400 | 正向有功费率 4 电能 | 数值 |
| 00010000 | 反向有功总电能 | 数值 |
| 00020000 | 正向无功总电能 | 数值 |
| 00030000 | 反向无功总电能 | 数值 |
| 01000000 | A 相电压 | 数值 |
| 01010000 | B 相电压 | 数值 |
| 01020000 | C 相电压 | 数值 |
| 02000000 | A 相电流 | 数值 |
| 02010000 | B 相电流 | 数值 |
| 02020000 | C 相电流 | 数值 |
| 02800000 | 总有功功率 | 数值 |
| 03800000 | 总无功功率 | 数值 |
插件自动将相同采集周期的点位合并为采集组:
- 相同
duration的点位分为一组 - 按电表地址分组管理
- 减少串口通信次数,提高采集效率
- 定时触发采集任务(默认每秒检查)
- 遍历所有采集组,检查是否到达采集时间
- 发送 DL/T 645 读命令到指定电表
- 解析响应数据并转换为物模型点位值
- 触发数据导出
电表地址格式
Section titled “电表地址格式”DL/T 645 协议支持 1-12 位十进制电表地址:
- 1 位地址:0-9
- 多位地址:000000000001-999999999999
- 广播地址:000000000000
以下参数未配置时使用默认值:
minInterval:100 毫秒retry:3 次timeout:1000 毫秒baudRate:2400dataBits:8stopBits:1parity:E(偶校验)duration:1s
- 确保串口设备权限正确(通常需要
chmod 666 /dev/ttyUSB0) - 波特率必须与电能表配置一致
- 电表地址必须与实际电表地址匹配
- 建议使用屏蔽电缆减少干扰
- 插件入口:
plugins/dlt645/plugin.go - 核心实现:
plugins/dlt645/internal/plugin.go - 连接器:
plugins/dlt645/internal/connector.go - 数据模型:
plugins/dlt645/internal/model.go