当前位置: 首页 > news >正文

西门子博图1200电表DLT645-2007协议485通讯手册——包含完整注释及单文档说明书

西门子博图1200电表,485自由口通讯,通讯协议DLT645-2007,带注释,带单独文档说明书 注意:软件需要v16版本级以上打开,有时间会做一个v15版本的 1.本人自己整理的学习资料,可供学习参考 2.读取总功率,电流,电压,总功率因数,轮询 读取

直接上干货。玩过PLC和电表通讯的都知道,DLT645协议这玩意儿说简单也简单,但细节坑起来真要命。最近用1200的CM1241搞485自由口怼电表,实测可行,分享几个关键代码段。

先看硬件接线。CM1241的485口A接电表A,B接电表B,记得把终端电阻拨码开关打开(实测传输距离超过10米必开)。波特率设2400,数据位8,停止位1,偶校验——这参数不对直接哑火。

协议帧结构必须吃透:

68 AA AA AA AA AA AA 68 11 04 33 33 34 33 CS 16

前导码、表地址、控制码、数据域...重点注意数据域要反转BCD码。比如要读00010000这个数据项,实际发送的是00 01 00 00转成16进制再倒序变成00 00 01 00。

西门子博图1200电表,485自由口通讯,通讯协议DLT645-2007,带注释,带单独文档说明书 注意:软件需要v16版本级以上打开,有时间会做一个v15版本的 1.本人自己整理的学习资料,可供学习参考 2.读取总功率,电流,电压,总功率因数,轮询 读取

初始化通讯口配置代码:

"RS485".COM_RST := FALSE; "RS485".BAUD := 2400; "RS485".PARITY := 2; //偶校验 "RS485".DATA_BITS := 8; "RS485".STOP_BITS := 1; "RS485".RTS_ON_DLY := 0; "RS485".RTS_OFF_DLY := 0;

重点说发送接收逻辑。用轮询方式读取多个参数时,搞个状态机最稳。实测连续读取5个参数时,间隔必须大于200ms,否则丢包率飙升。

核心发送函数:

//拼接数据帧 VAR i : INT; checksum : BYTE := 0; END_VAR //地址域处理(假设表号000000000001) sendBuffer[0] := 16#68; FOR i := 1 TO 6 DO sendBuffer[i] := 16#01; //表地址低位在前 END_FOR sendBuffer[7] := 16#68; sendBuffer[8] := 16#11; //读命令 sendBuffer[9] := 16#04; //数据长度 //数据项(以A相电压为例) sendBuffer[10] := 16#02; sendBuffer[11] := 16#01; sendBuffer[12] := 16#00; sendBuffer[13] := 16#00; //计算校验和 FOR i := 8 TO 13 DO checksum := checksum + sendBuffer[i]; END_FOR sendBuffer[14] := checksum; sendBuffer[15] := 16#16;

接收处理有个坑:电表返回的数据长度不固定。建议用超时判断结束,实测200ms超时刚好。数据解析时注意减33H操作,比如收到16#73要转成0x73-0x33=0x40。

电压解析代码示例:

VAR_TEMP rawData : ARRAY[1..4] OF BYTE; voltage : REAL; END_VAR //假设数据域为 3C 00 00 00 (实际收到值已减33H) rawData[1] := receiveBuffer[16] - 16#33; rawData[2] := receiveBuffer[15] - 16#33; rawData[3] := receiveBuffer[14] - 16#33; rawData[4] := receiveBuffer[13] - 16#33; //组合成BCD码再转十进制 voltage := (rawData[1] * 1000) + (rawData[2] * 100) + (rawData[3] * 10) + rawData[4]; voltage := voltage / 10.0; //根据说明书小数点位处理

调试时建议用端口监视工具抓原始报文。遇到过最坑的情况是电表版本不同导致数据项地址差异,务必核对电表附带的地址映射表。

完整代码里做了错误重试机制:连续三次通讯失败自动切下一个参数,防止某个参数卡死整个轮询。实测24小时运行丢包率小于0.2%,工业场景够用了。

(代码片段需要配合具体电表地址和参数地址使用,完整项目文件在GitHub仓库xxx/dlt645-1200,文档说明单独打包在release里)

http://www.jsqmd.com/news/516954/

相关文章:

  • SSA-XGboost模型在时间序列预测中的惊艳表现
  • Ant Design UI 实战指南:从文档到企业级应用开发
  • 5步精通LyricsX歌词源配置:打造macOS智能歌词生态
  • Mockito单元测试踩坑记:为什么when().thenReturn()不生效?
  • Android Profiler实战:5分钟定位轮播图内存泄漏(附AS 3.2.1配置)
  • LongCat-Image-Editn实际作品集:10个真实场景下中英双语编辑效果对比
  • Arthas实战:MyBatis Mapper XML热更新的高效实现方案
  • OOCSI嵌入式客户端库:ESP32/ESP8266轻量级实时通信中间件
  • Dropout实战:如何在PyTorch中正确使用Dropout层防止过拟合(附代码对比)
  • 2026年UPS电源、精密空调、电源租赁厂家哪家强?四川地区一家综合实力解析 - 速递信息
  • STM32标准库开发实战:从LED控制到按键交互的完整流程(基于CMSIS分层)
  • VSCode竞赛编程配置全攻略:从零搭建高效C++开发环境(含Code Runner避坑指南)
  • 华清远见元宇宙实验中心:重塑嵌入式、物联网与AI的沉浸式教学新范式
  • 2026年说说广东思博咨询企业,客户评价究竟如何 - mypinpai
  • Python迭代器与可迭代对象:深度解析与实战实现
  • ResNet-50实战:从零构建PyTorch残差网络进行图像分类
  • 光伏虚拟同步发电机并网simulink仿真模型 光伏采用最大功率点跟踪,拓扑为Boost电路
  • 【技术解析】从傅里叶级数到维纳过程:一个数学构造的视角
  • 建材选材中的“隐形冠军”逻辑:2026年如何看懂一家灌浆料、压浆料厂家的真实价值 - 速递信息
  • msvcr71.dll丢失找不到 如何修复? 免费下载方法分享
  • 5分钟搞定!用PyQt5和YOLOv8打造目标检测GUI界面(附完整代码)
  • @Autowired与@Resource:Spring依赖注入注解核心差异剖析
  • OpenClaw邮件处理助手:QwQ-32B智能分类与自动回复模板
  • 为什么VLC媒体播放器能播放几乎所有视频格式?揭秘开源播放器的核心技术
  • Obsidian图片本地化完整解决方案:构建永久可用的知识管理系统
  • QList嵌入式链表库:无malloc的确定性内存容器
  • 2026 年值得高效开发者奔赴的开发工具清单!
  • VS Code 新终端正式发布!
  • 利用SAP函数批量管理物料删除标记的高效实践
  • extern “C“ 原理与嵌入式跨语言链接实战