三星电站监控升级改造通信故障分析

(整期优先)网络出版时间:2023-01-07
/ 2

三星电站监控升级改造通信故障分析

王贤福

四川明星电力股份有限公司 四川省遂宁市 629000

摘要:我司发电站为了达到无人值班和少人值守的目的,使用工业自动系统,在不断迭代更新过程中问题层出不穷,本文所谈及的是几例较为棘手涉及多个厂家之间的的通信故障。

关键词:计算机通信;故障;升级;

引言:

三星水电站2012年6月完成综合自动化改造,下位机由PLC+LCU(微机)升级为PLC+触摸屏,顺控流程放下位机PLC中,上位机设置MAIN1、MAIN2热备服务器,存放数据库和上位机核心文件。

改造过程引发了许多驱动文件配置错误通信问题。

2022-11-10_163821  2022-11-10_164137­­­­­

图1 监控系统改造前后拓扑图

1 故障案例

1.1南瑞监控与许继10KV箱式站保护通信故障

1.1.1结构情况

改造前,三星站送调度的信号分两路,发电机数据通过COM机、电力猫、载波机经110KV电线传输。箱式站数据由RTU经电话网络信道传输调度。改造后统一由南瑞监控转发,使用CDT规约通信。

1.1.2、处理过程

串口板数据灯不亮,测量通信电压data+、data-  1.03V,排除地址错误与断线可能,检查许继通信机配置,发现串口模式是RS232,实际接线是RS485,修改为RS485方式串口灯闪烁正常。打开报文监视,如下:

EB 90 EB 90 EB 90 71 61 15 01 00 37 00 14 01 11 01 EE 01 2C 01 5E 07 1F 02 00 4D 07 D7

根据CDT规约定义,三遍同步字后是控制字。解析报文内容:类型为遥测,21个信息字,主站地址00 ,子站地址01。信息字按点表定义,第一点主变高压侧电流,十进制数据276,转发系数0.00293,计算公式:显示值=实际报文值*转发系数,即276*0.00293=0.80868(A),该二次电流值变比为10,所以一次电流值IA=0.80868*10=8.0868(A),发送端正确。

接收侧,打开nari目录下的驱动文件,cdtdef.h文件定义了头文件(#include部分)、数据枚举和程序预编译,没有发现错误。驱动文件cdtdef.c的主函数中不断调用MsgProcess()函数处理接收信文。

定位到MsgProcess( )信息处理函数段,处理代码如下:

S_val = (p[i*CDT_WORD_LEN+1+j*2)& 0xf)*256 + p[i*CDT_WORD_LEN+1+j*2+1];

If (s_val & 0x800)   s_val = -(s_val & 0x7ff);

f_val = s_val /2048;

drv_AIN1(pAIN,f_val,0,1);

蓝色背景部分是模拟量处理公式,P指针所指地址的值赋给s_val, 等号右侧CDT_WORD_LEN表示CDT字长。函数使用双循环提取信息字,i=0,j=0时,加号前后的地址是1、2,j=1时,地址是3、4,i=1时是为7、8和9、10,对应信息字段无误。

根据cdt规约定义,先传低字节后传高字节,*256是将数据提高一个字节,以区分高低字节。图中先取高字节,后取低字节,不对,改为:

s_val = (p[i*CDT_WORD_LEN+1+j*2] ) + (p[i*CDT_WORD_LEN+1+j*2+1] & 0xf)*256;

后面的if (s_val & 0x800)和s_val = -(s_val & 0x7ff)是判断该值是否超过2048,如果超过则取最大后加上负号,提示溢出(CDT规定数据位最大11位,从0-10,十进制表示为2047,如果超出,则将第11位置1,表示符号位为负),if ((s_val & 0x8000)||(s_val & 0x4000)) continue字段是无效时结束本次循环。

f_val = s_val / 2048是将模拟值除以2048赋给f_val,公式不对,改为:f_val = s_val / 1.0, 最后通过drv_AIN1(pAIN, f_val, 0,1)将数据写入数据库。修改后的驱动文件如下:

S_val = (p[i*CDT_WORD_LEN+1+j*2)& 0xf)*256 + p[i*CDT_WORD_LEN+1+j*2+1];

If ((s_val & 0x8000)|| (s_val & 0x4000)) continue;

If (s_val & 0x800)   s_val = -(s_val & 0x7ff);

f_val = s_val / 1.0;

drv_AIN1(pAIN,f_val,0,1);

替换后重新编译驱动文件,启动cdt规约进程查看,数据正确,故障解决。

1.1.3、案例1总结

本例是因为南瑞侧通信驱动文件不标准,信文处理高、低字节颠倒,导致转换后的数据差距大,数据溢出显示为负值,此故障一般出现在初始阶段,通信正常后非人为修改不可能再出现此类问题,维护人员应当格外小心,防止误修改,平时重要文件要做好备份。

1.2南瑞监控与南瑞辅机通信故障

1.2.1、结构情况

辅机改造范围包含顶盖排水、前池加压、检修排水、渗漏排水、中压气五大部分。将常规电气控制改为了PLC控制,同时对大功率设备增加软启装置,大量信号接线改为通信集中上传。

辅机通信均采用RS485,规约modbus。机组端使用25针的八串口板,开关站是9针的串口管理机,都采用CAN网方式与CPU模件通信

调试软件-SJ30B,可配置DI和AI点数、通信参数、串口地址、协议文件,软件生成*.sj的配置文件,下载至SJ30装置中,模拟Linux环境进入Workroom/txt目录中,将编译生成的驱动文件拷贝到sbin目录,最后远程登录SJ30装置拷贝驱动文件到同名目录下完成配置,重启设备开启通信。

1.2.2、处理过程

故障点1,串口板COM5通信灯不亮(配置第5口)。

查看配置文件和通信参数,考虑到双方没有握手成功(方式为一侧向另一侧根据配置的通信地址进行请求,双方相互确认再接收和发送数据),软件握手地址必须正确,根据点表,顶盖排水站地址为5,在SJ30B组态软件中查看报文显示连接不成功。

第一段为发送信文,5为对侧站地址。第二段接收信文报错,用MB20软件联机查看,PLC站地址是1,辅机站地址配置明显不对,离线将站地址改为5,下载配置,重启后查看串口板,RXDTXD均连续交替闪烁,通信连接建立,双方握手成功。

故障点2通道连接成功之后,启动SJ30B软件查看信文发现除校验位外,数据区全部为零,报文内容如下:

2022-11-11_121222

图2 SJ30中显示的报文内容

数据均为0表示数据区是空的。打开辅机程序,发现约定的R101-R126寄存器仅R101、R102、R109-R126有正确值,R103-R108段为空,模拟量寄存器没有收到数据。定位程序到COMMON,该处为程序通信处理块,

  处理块通过BLKMOV将开入点1-16储存到R101寄存器,模拟量将SEND_ALL变量转存给R103开始的8个字寄存器储存8个模拟量信号,但SEND_ALL变量并无它处调用处理,所以R103开始的寄存器为空。修改的方法有两种:

一、将SEND_AI1变为AI0001;

二、在模拟量处理字段(AI_PROC)为SEND_ALL中间变量初始化定义。                        

修改后联机查看R103和R104寄存器(顶盖水位的主、备用数据)有值,分别为5126和5118,换算后分别是0.70米和0.69米,与实际一致。

故障点3,SJ30B接收报文依旧没有改变,开关量和模拟量都没有,将头文件中PLC_REG_ADDR (起始寄存器地址)处由101改为100后报文数据内容都依旧为空,这就不对了,修改了寄存器地址后,由于读取位置变化,数据也应变化才对。

由于触摸屏和辅机PLC通信是完全正常,通信协议同样为MODBUS,可以参考触摸屏的配置。 打开EB8000触屏组态软件,定位到水位显示配置,寄存器地址为4x 1277,根据MODBUS规约定义4x为读取保持型寄存器,字R1~R4096对应的通信地址为1000~5095,起始规约地址为0。也就是说有1000的偏移量,R1277对应PLC中的实际数据地址是277。打开程序,在R277处果然找到该模拟量的取值变量AI_BUF1(该变量是品质处理后的AI0001)。

寄存器地址有1000的偏移量,驱动文件中起始地址就必须要加上1000。修改头文件PLC_REG_ADDR由101改为1100(MODBUS从0开始计算,地址是1100而不是1101)。保存,编译,拷贝,重启进程,查看报文,OK!所有数据与实际完全吻合。

1.2.3、案例2总结

该故障涉及的点较多,从硬件到软件,从辅机PLC配置到上位机机驱动文件,解决了一个问题又发生新的问题。由于时间紧迫,设备提供商南瑞公司未能做好出厂测试,这是导致此次故障的决定因素,同时也体现出自身对该类故障的深入了解。

结语

通信是监控的必须和基础,没有通信,没有数据交流,也无从谈起实现自动化监控。通信故障是一个比较普遍的问题,以后改造或维护过程中也许还会遇到更多不可思议的故障,但万变不离其中,牢固掌握基础和从根本思考是解决通信问题的万能方法,只要冷静的去分析和大胆尝试,再奇怪的问题也会被一一揭开。