多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

GW串口服务器内置DLT645与IEC104协议:配置调试与实战经验

GW串口服务器内置DLT645与IEC104协议:配置调试与实战经验 1. 从一次现场调试说起为什么协议支持比硬件参数更值得关注去年冬天我接到一个老同学的求助电话。他在一家做配电监控集成的公司干了快八年手头有个项目卡了快两周——现场有二十多台电表走的是DLT645规约另外还有几台老旧的保护装置只认IEC104。他原本的方案是用两台不同型号的串口服务器分别对接再在上位机里做协议转换结果调试的时候数据丢包严重时间戳对不上客户那边催得紧他整个人都快炸了。后来我让他把两台设备换成同一款GW系列串口服务器固件升级到最新版本直接在设备内部完成DLT645和IEC104的协议解析与转发。改完之后现场只用了半天就调通了数据刷新稳定在秒级他给我发消息说“早知道就不折腾那两周了”。这件事让我意识到一个问题很多做工业现场集成的朋友在选串口服务器的时候习惯性地只看串口数量、波特率范围、网口速率这些硬件参数却忽略了一个更关键的东西——协议支持能力。硬件参数决定的是“能不能连上”而协议支持决定的是“连上之后能不能直接用”。GW系列这次全系支持DLT645协议和IEC104协议本质上就是把原来需要上位机或者额外网关做的事情下沉到了串口服务器这一层。对于现场调试来说这意味着更少的中间环节、更低的故障率、更短的调试周期。这篇文章我想从实际使用的角度把DLT645和IEC104这两个协议在GW系列串口服务器上的实现逻辑、配置要点、常见坑位以及我自己在项目中积累的一些经验完整地聊一遍。如果你正在做电力监控、能耗采集、配电自动化相关的项目或者手头正好有一批GW系列的设备需要配置那这篇内容应该能帮你省下不少时间。2. 先搞清楚这两个协议到底在解决什么问题2.1 DLT645协议电表数据的“普通话”DLT645是国内电力行业用来抄读电能表数据的通信规约全称是《多功能电能表通信协议》。你可以把它理解成电表之间约定好的一种“普通话”——只要电表支持这个协议不管它是哪个厂家生产的你都能用同一套指令去读它的电量、电压、电流、功率等数据。这个协议最核心的特点有几个。第一它基于串口通信通常是RS485半双工波特率常见的是2400bps也有1200和9600的。第二它采用主从结构上位机发指令电表回应答电表不会主动往上发数据。第三它的数据帧格式比较固定包含起始符、地址域、控制码、数据域、校验码和结束符。地址域是12位BCD码也就是电表的表号这个在组网的时候必须一一对应不能搞错。我在实际项目里遇到最多的问题就是地址域配置错误。DLT645的电表地址通常是12位但有些厂家出厂默认是000000000000有些是表号后12位还有些需要你自己去设置。如果你在GW系列串口服务器里配置DLT645转发的时候地址填错了表现就是上位机发指令出去电表不回应或者回应了但数据对不上。这个后面我会详细讲怎么排查。2.2 IEC104协议调度主站的“通用语言”IEC104协议全称是IEC 60870-5-104是电力系统调度自动化领域用得最广泛的通信协议之一。它基于TCP/IP用来在调度主站和变电站之间传输遥测、遥信、遥控、遥调这“四遥”数据。和DLT645的主从轮询不同IEC104是平衡式传输双方都可以主动发送数据。它有一个很重要的机制叫“总召唤”就是主站先发一个总召唤指令变电站把当前所有的遥测遥信数据一次性上送之后再有变化就主动上送变化数据。这个机制的好处是实时性高坏处是如果配置不当总召唤的数据量太大可能会导致网络拥塞或者设备响应慢。IEC104的帧格式分三种I帧用来传输实际数据S帧用来确认收到对方的I帧U帧用来做链路控制比如启动、停止、测试。在实际调试中最常见的问题是TCP连接建立不起来或者连接建立了但总召唤超时。这通常和端口号、公共地址、信息体地址这些参数的配置有关。2.3 为什么串口服务器要内置这两个协议以前的做法是串口服务器只负责把串口数据透明地转到网络上协议解析交给上位机软件或者专门的协议转换网关。这种方案的问题在于上位机需要处理大量的串口轮询逻辑而且一旦串口服务器和上位机之间的网络出现抖动数据就容易丢。GW系列把DLT645和IEC104的协议解析内置到串口服务器里带来的变化是实质性的。对于DLT645来说串口服务器可以主动去轮询电表把读到的数据缓存起来上位机只需要通过Modbus TCP或者MQTT等方式来取数据就行不用关心底层的串口时序。对于IEC104来说串口服务器可以作为服务端或者客户端直接和调度主站建立104连接把串口侧的数据映射成104的遥测遥信点号主站那边看到的就是标准的104数据不需要额外的协议转换设备。这种架构上的变化最直接的好处是减少了故障节点。原来串口服务器、协议转换网关、上位机三个环节任何一个出问题都会导致数据中断。现在串口服务器一个设备就把串口采集和协议转换都做了排查问题的范围小了很多。3. GW系列串口服务器上配置DLT645的完整流程3.1 硬件连接与基础参数确认在开始配置之前有几件事必须先确认清楚。第一电表的RS485接线是否正确。A接AB接B这个看起来是废话但我见过太多人把A和B接反了然后在那里调半天软件参数。第二终端电阻有没有加。如果RS485总线比较长比如超过100米或者波特率比较高总线两端需要加120欧姆的终端电阻否则信号反射会导致通信不稳定。第三电表的波特率、校验位、数据位、停止位这些参数是否和GW系列串口服务器的串口参数一致。DLT645常见的配置是2400bps、偶校验、8数据位、1停止位但不同厂家的电表可能有差异最好先查一下电表的说明书。GW系列串口服务器的串口参数配置在Web界面的“串口设置”里。我一般会先把串口模式设成“DLT645”然后根据电表的实际参数去填波特率、数据位、校验位和停止位。这里有一个细节GW系列的DLT645模式支持“自动波特率适配”也就是说如果你不确定电表的波特率可以打开这个选项设备会自动去尝试常见的几种波特率。但这个功能会增加首次通信的建立时间如果电表数量多建议还是手动指定波特率效率更高。3.2 电表地址的批量导入与校验DLT645的电表地址是12位BCD码在GW系列串口服务器里你需要把这些地址配置到“DLT645设备列表”里。如果电表数量少比如十几台手动输入就行。但如果数量多比如上百台手动输入不仅效率低还容易出错。GW系列支持通过CSV文件批量导入电表地址这个功能在实际项目中非常实用。CSV文件的格式很简单第一列是电表地址第二列是电表名称或者备注第三列是超时时间。我一般会把超时时间设成500毫秒到1秒之间具体看现场的总线长度和电表响应速度。如果总线比较长电表响应慢超时时间可以适当放宽但也不要设太大否则轮询一轮的时间会很长。导入之后GW系列串口服务器会自动对每个地址进行校验检查是否有回应。校验结果会在界面上显示哪些地址通了哪些没通一目了然。如果某个地址没通首先检查电表地址是否填错其次检查RS485接线是否松动最后检查电表本身是否正常工作。我遇到过一种情况电表地址是对的接线也没问题但就是不通后来发现是电表的通信模块坏了换了一台电表就好了。3.3 轮询策略与数据缓存配置GW系列串口服务器在DLT645模式下会按照你配置的轮询周期依次向每个电表发送抄读指令。轮询周期可以设置我一般会根据项目需求来定。如果是能耗监测数据刷新要求不高轮询周期可以设成5分钟甚至更长。如果是配电监控需要实时性高一些轮询周期可以设成30秒到1分钟。这里有一个经验轮询周期不要设得太短。DLT645是半双工通信同一时刻总线上只能有一个设备在发送数据。如果轮询周期太短上一轮还没轮询完下一轮就开始了会导致总线冲突数据丢包率会明显上升。我一般会先估算一下一轮轮询需要多长时间然后轮询周期至少设成这个时间的1.5倍。比如一轮轮询需要20秒那轮询周期至少设成30秒。GW系列串口服务器会把轮询到的数据缓存在本地上位机可以通过Modbus TCP或者MQTT来读取。缓存的好处是即使上位机和串口服务器之间的网络短暂中断数据也不会丢网络恢复后上位机可以继续读取缓存里的数据。缓存的深度可以在界面上配置我一般会设成能存最近1000条记录这样即使断网几个小时数据也不会丢。4. IEC104协议在GW系列上的配置与调试要点4.1 工作模式选择服务端还是客户端GW系列串口服务器支持IEC104的两种工作模式服务端模式和客户端模式。服务端模式下串口服务器监听一个端口等待调度主站来连接。客户端模式下串口服务器主动去连接调度主站的IP和端口。选哪种模式取决于你的项目架构。如果是变电站往调度主站送数据通常是串口服务器作为客户端主动去连接主站。如果是调度主站来采集变电站的数据通常是串口服务器作为服务端等待主站来连接。我个人的经验是如果网络环境比较稳定两种模式都可以。但如果网络环境不太稳定比如走的是无线网络建议用客户端模式因为客户端模式下串口服务器会主动重连而服务端模式下如果主站不主动来连串口服务器就只能等着。在GW系列的Web界面上IEC104的配置项包括本地端口、远端IP、远端端口、公共地址、信息体地址起始值等。公共地址在IEC104里很重要它用来区分不同的变电站或者不同的RTU。如果公共地址配错了主站那边可能会拒绝连接或者连接上了但数据对不上。4.2 遥测遥信点号的映射逻辑IEC104协议里每个遥测点、遥信点都有一个信息体地址。GW系列串口服务器需要把串口侧采集到的数据映射到这些信息体地址上。这个映射关系是在“IEC104点表”里配置的。举个例子假设你有一台电表它的A相电压需要映射到IEC104的遥测点号16385B相电压映射到16386C相电压映射到16387。你需要在GW系列的点表里把电表的地址、寄存器地址或者DLT645的数据标识和IEC104的信息体地址对应起来。这个配置过程有点繁琐但GW系列支持点表的导入导出你可以先在Excel里把点表整理好然后一次性导入。这里有一个坑要注意IEC104的信息体地址在不同的主站系统里可能有不同的规定。有些主站要求遥测从16385开始遥信从1开始有些主站要求遥测从4001开始遥信从1开始。在配置之前一定要先和主站那边确认好地址分配规则否则配完了主站那边读不到数据还得返工。4.3 总召唤与变化上送的参数调优IEC104的总召唤周期和变化上送阈值是两个影响通信效率的关键参数。总召唤周期是指主站每隔多长时间发一次总召唤把所有的遥测遥信数据全部上送一次。变化上送阈值是指遥测值变化超过多少时主动上送变化数据。GW系列串口服务器默认的总召唤周期是15分钟变化上送阈值是0.5%。在实际项目中这两个参数需要根据具体情况调整。如果遥测点很多比如上千个点总召唤周期可以设长一些比如30分钟否则每次总召唤都会产生大量的数据帧增加网络负担。如果对实时性要求高变化上送阈值可以设小一些比如0.1%但也不要设得太小否则遥测值稍微波动一下就上送会导致通信量激增。我一般会先按默认值配置然后在调试的时候观察通信状态。如果发现总召唤时数据量太大导致超时就适当延长总召唤周期。如果发现遥测变化上送不及时就适当减小变化上送阈值。这个调优过程需要结合现场实际情况没有一刀切的标准值。5. 常见问题排查与避坑经验实录5.1 DLT645通信失败的五种典型原因在实际项目中DLT645通信失败是最常见的问题。我把遇到过的原因整理了一下大概有五种。第一种是地址错误。前面说过DLT645的电表地址是12位BCD码有些电表的地址是印在表壳上的有些需要通读指令去读。如果你不确定电表地址可以用GW系列的“地址搜索”功能它会遍历常见的地址范围找到有回应的电表。第二种是波特率不匹配。有些电表支持自动波特率有些只支持固定波特率。如果GW系列的波特率和电表不一致通信肯定失败。我一般会先用一个USB转RS485的工具单独接一台电表用调试软件确认电表的波特率和地址然后再去配置GW系列。第三种是接线问题。RS485的A和B接反了或者终端电阻没加或者总线太长导致信号衰减。这些问题需要用万用表或者示波器去查软件层面是看不出来的。第四种是电表本身的问题。有些电表在出厂时通信功能是关闭的需要通过红外或者按键去开启。还有些电表在通信模块故障时其他功能正常但就是不通。第五种是GW系列的轮询参数设置不当。比如超时时间设得太短电表还没回应就超时了或者轮询周期设得太短总线冲突导致丢包。5.2 IEC104连接建立不起来的排查思路IEC104连接建立不起来通常和网络配置有关。我一般会按以下顺序排查。首先检查IP和端口。GW系列的IEC104服务端模式下本地端口默认是2404这个端口有没有被防火墙挡住客户端模式下远端IP和端口填对了没有可以用telnet命令测试一下端口通不通。其次检查公共地址。IEC104的公共地址在连接建立阶段会进行交互如果GW系列的公共地址和主站配置的不一致主站可能会拒绝连接。这个在GW系列的日志里能看到如果日志里显示“公共地址不匹配”那就改公共地址。再次检查链路层参数。IEC104的链路层有一些参数比如K值、W值、T1超时、T2超时、T3超时。这些参数在GW系列里都有默认值一般情况下不需要改。但如果主站那边有特殊要求比如K值要求是12而不是默认的12那就需要对应修改。最后检查网络质量。如果网络丢包严重IEC104的TCP连接可能会频繁断开重连。这种情况下需要先解决网络问题比如换有线网络或者调整无线网络的信号强度。5.3 数据对不上时的逐层校验方法数据对不上是另一个常见问题。上位机读到的数据和电表上显示的数据不一致或者IEC104主站收到的遥测值和实际值有偏差。这种问题需要逐层校验。第一层检查电表本身的数据。用电表的显示屏或者红外接口确认电表当前的实际值是多少。第二层检查GW系列串口服务器缓存的数据。在GW系列的Web界面上可以看到每个电表的实时数据。如果这里的数据和电表不一致说明串口采集环节有问题需要检查DLT645的配置。第三层检查上位机或者主站读到的数据。如果GW系列缓存的数据是对的但上位机读到的数据不对说明协议转换或者映射环节有问题。需要检查Modbus TCP的寄存器映射或者IEC104的点表映射。第四层检查数据格式。DLT645的数据通常是BCD码需要转换成十进制。IEC104的遥测值通常是归一化值或者标度化值需要根据系数进行换算。如果换算系数配错了数据就会对不上。6. 协议内置带来的架构变化与项目收益6.1 从“透明传输”到“边缘解析”的转变传统的串口服务器只做透明传输串口收到什么就转发什么不做任何解析。这种模式的好处是通用性强不管什么协议都能传。坏处是上位机需要处理所有的协议细节开发工作量大而且一旦协议有变化上位机软件就得跟着改。GW系列把DLT645和IEC104的协议解析内置到设备里相当于把一部分边缘计算的能力下沉到了串口服务器。对于DLT645来说串口服务器主动轮询电表上位机只需要通过标准的Modbus TCP来读数据开发工作量大大减少。对于IEC104来说串口服务器直接和主站建立104连接把串口数据映射成104点号相当于把协议转换网关的功能也集成进来了。这种架构变化带来的收益是实实在在的。我去年做的一个配电监控项目原来计划用三台设备一台串口服务器、一台协议转换网关、一台工控机。后来用了GW系列之后协议转换网关和工控机都省了直接用一台GW系列串口服务器对接上位机项目成本降低了差不多40%调试时间也从一周缩短到两天。6.2 现场调试效率的量化对比为了更直观地说明问题我把自己经历过的两种方案做了一个对比。对比项传统方案透明传输上位机解析GW系列方案协议内置设备数量串口服务器协议转换网关工控机串口服务器一台调试周期5-7天1-2天故障节点3个1个数据丢包率约2%-5%低于0.5%上位机开发量需要开发DLT645和IEC104解析只需对接Modbus TCP或MQTT后期维护需要维护三台设备只需维护一台设备这个对比是基于我自己的项目经验不一定适用于所有场景但大致的趋势是明显的。设备数量越少故障节点越少调试和维护的工作量就越小。6.3 对系统扩展性的影响协议内置还有一个好处是扩展性更好。以前如果项目要增加新的电表或者要接入新的保护装置可能需要在上位机那边改配置甚至改代码。现在只需要在GW系列串口服务器里增加电表地址或者修改点表映射就行上位机那边不用动。另外GW系列支持多种上行协议除了Modbus TCP和MQTT还支持IEC104。这意味着同一个串口服务器可以同时对接不同的上位系统。比如DLT645采集的电表数据可以通过Modbus TCP送给本地的监控系统同时通过IEC104送给远端的调度主站。这种灵活性在传统的透明传输方案里是很难实现的。7. 一些实操中的细节技巧与个人体会7.1 固件版本与功能支持的对应关系GW系列的DLT645和IEC104功能是在不同固件版本里逐步加入的。如果你手头的GW系列设备是比较早的批次可能需要先升级固件才能支持这两个协议。升级固件之前一定要先备份当前的配置因为升级过程中配置可能会丢失。升级完成后恢复配置然后检查DLT645和IEC104的配置项是否正常。我遇到过一种情况设备升级固件后DLT645的轮询功能正常但IEC104的连接建立不起来。后来发现是升级后的固件里IEC104的默认端口从2404变成了2405而主站那边还是按2404来连的。所以升级固件后一定要检查一下关键参数有没有变化。7.2 多协议并行运行时的资源分配GW系列串口服务器可以同时运行DLT645和IEC104但这两个协议会共享设备的CPU和内存资源。如果DLT645侧的电表数量很多轮询很频繁同时IEC104侧的总召唤数据量也很大设备可能会因为资源不足而出现响应慢或者丢包的情况。我的建议是如果两个协议都要用尽量错开高峰。比如DLT645的轮询周期设成1分钟IEC104的总召唤周期设成15分钟这样大部分时间设备的负载是比较低的。另外可以在GW系列的界面上查看CPU和内存的使用率如果发现使用率长期超过70%就需要考虑减少电表数量或者延长轮询周期。7.3 现场记录与文档整理的重要性最后说一个看起来不起眼但很重要的点现场记录和文档整理。我在每个项目调试完成后都会把GW系列的配置导出成文件然后把电表地址、点表映射、IEC104参数这些信息整理成一个文档。这样做的好处是下次项目扩容或者出故障的时候可以快速定位问题不用从头去猜配置。我见过太多项目调试的时候一切正常过了半年设备出问题了接手的人完全不知道当初是怎么配的只能从头再调一遍。如果当初有完整的文档可能十分钟就能解决的问题现在要花半天甚至更久。所以不管项目多小调试完成后花十分钟整理一下文档绝对是值得的。这个内容后续还可以这样扩展如果你手头的GW系列设备需要对接多个主站可以研究一下IEC104的多链路配置如果DLT645的电表数量超过200台可以考虑用多个串口服务器做分布式采集然后在上位机做数据汇聚。这些场景我在后续的项目里也会继续实践有机会再整理出来分享。
返回列表