远动点表比对工具开发原理与实践

2019-10-21 07:33张佳楠
科学导报·科学工程与电力 2019年34期

张佳楠

【摘 要】自动化主站系统升级时,需要把旧EMS系统数据库的数据迁移到新OCS系统数据库中,完成数据迁移工作后,为确保电网运行的安全性,同时减少新OCS系统建成后的远动调试工作量,需要对新数据库中的远动点表与旧数据库中的远动点表做比对,确保新、旧远动点表的一致性,但远动点表的数据量巨大,人工核对需要耗费大量时间。研制远动点表比对工具,实现新、旧远动点表自动比对,提高远动点表核对工作的效率与准确性。

本远动点表比对工具基于Excel Visual Basic开发,使用该工具可以很方便、快捷地核对新、旧远动点表的一致性,远动调试时可避免重复调试工作,大大减轻远动调试人员的工作量。

【关键词】远动点表;比对;Visual Basic

研究背景

目前湛江供电局正在进行新OCS系统建设,需要把旧EMS系统数据库的数据迁移到新OCS系统数据库中,完成数据迁移工作后,为确保电网运行的安全性,同时减少新OCS系统建成后的远动调试工作量,需要对新数据库中的远动点表与旧数据库中的远动点表做比对,确保新、旧远动点表的一致性,但远动点表的数据量巨大,其中遥信有94587条记录,遥测有30214条记录。

如果采用人工方式进行对比,按照自动化人员现有核查速度,完成所有厂站遥信点表核查大约需要27天,工作进展十分缓慢。而且人工核查工作完成质量难以保证,很难保证没有疏漏,导致厂站新旧点表中的差异遗留下来,对自动化系统安全稳定运行造成影响。因此,远动点表比对工具应运而生。

算法原理

点表比对工具主要实现的功能是:比对两张数据表是否一致,若一致,给出结论,若不一致,则需要通过颜色标注将不同之处明显指出来,并输出比对结果。

数据比对模块

数据比对模块实现的基本逻辑:(1)取出数据表1中一个主键;(2)在数据表2中使用find方法查找等值的主键;(3)若步骤(2)中找到该主键,则依次比较数据表1该行剩余单元格值和数据表2对应行对应单元格值是否一样,若不一样,则记录;(4)若步骤(2)中未找到,则表示数据表1存在该主键,而数据表2不存在该主键,则记录;(5)重复上述步骤(1)至(4),知道数据表1中所有数据被访问。(6)执行完以上步骤后还需取出数据表2中编号,查找数据表1中不存在数据,即重复以上步骤(1)(2)(3)(4)(5)。

相关代码如下:

shtResult.Range("A2:B"& Rows.Count).Clear

sht1.Range("A2:Z"& Rows.Count).Interior.Pattern = xlNone

sht2.Range("A2:Z"& Rows.Count).Interior.Pattern = xlNone

For row1 = 2 To sht1.Range("A1").CurrentRegion.Rows.Count

sNo = sht1.Cells(row1,1).Value

Set Rng = sht2.Range("A:A").Find(sNo,lookat:=xlWhole)

If Rng Is Nothing Then

shtResult.Cells(rowNew,1).Value = "'提示:表2沒有该值"& sNo

shtResult.Cells(rowNew,2).Value = "少第"& row1 &"行,已标橙色"

rowNew = rowNew + 1

sht1.Columns("A:Z").Rows(row1).Interior.Color = RGB(255,165,0)

Else

For column1 = 2 To sht1.Range("A1").CurrentRegion.Columns.Count

'获取find的单元格的行

row_Rng = Rng.Row

sCell1 = sht1.Cells(row1,column1).Value

sCell2 = sht2.Cells(row_Rng,column1).Value

If sCell1 <> sCell2 Then

shtResult.Cells(rowNew,1).Value = "提示:表1中第"& row1 &"行,第"& column1 &"列值和表2中第"& row_Rng &"行,第"& column1 &"列不一样,已标黄"

sht1.Cells(row1,column1).Interior.Color = RGB(255,255,0)

sht2.Cells(row_Rng,column1).Interior.Color = RGB(255,255,0)

rowNew = rowNew + 1

check_1 = check_1 + 1

End If

Next column1

End If

Next row1

For row1 = 2 To sht2.Range("A1").CurrentRegion.Rows.Count

sNo = sht2.Cells(row1,1).Value

Set Rng = sht1.Range("A:A").Find(sNo,lookat:=xlWhole)

If Rng Is Nothing Then

shtResult.Cells(rowNew,1).Value = "'提示:表1沒有该值"& sNo

shtResult.Cells(rowNew,2).Value = "少第"& row1 &"行,已标橙色"

rowNew = rowNew + 1

sht2.Columns("A:Z").Rows(row1).Interior.Color = RGB(255,165,0)

Else

For column1 = 2 To sht1.Range("A1").CurrentRegion.Columns.Count

row_Rng = Rng.Row

sCell1 = sht2.Cells(row1,column1).Value

sCell2 = sht1.Cells(row_Rng,column1).Value

If sCell1 <> sCell2 Then

shtResult.Cells(rowNew,1).Value = "提示:表2中第"& row1 &"行,第"& column1 &"列值和表1中第"& row_Rng &"行,第"& column1 &"列不一样,已标黄"

sht1.Cells(row_Rng,column1).Interior.Color = RGB(255,255,0)

sht2.Cells(row1,column1).Interior.Color = RGB(255,255,0)

rowNew = rowNew + 1

check_1 = check_1 + 1

End If

Next column1

End If

Next row1

check_3 = check_1 + check_2

If check_3 >= 1 Then

shtResult.Cells(rowNew,1).Value = "结论:表一和表二不一致"

shtResult.Cells(rowNew,1).Interior.Color = RGB(255,0,0)

Else

shtResult.Cells(rowNew,1).Value = "结论:表一和表二一致"

shtResult.Cells(rowNew,1).Interior.Color = RGB(255,0,0)

End If

标注模块

标注模块实现的功能:

(1)将数据表1和数据表2中主键一样,但其余单元格值不一样,则该单元格标黄;

(2)若数据表1存在某主键,而数据表2不存在,则将数据表1该行标成橙色;若数据表2存在某主键,而数据表1不存在,则数据表2该行标成橙色。

相关代码如下:

sht1.Cells(row1,column1).Interior.Color = RGB(255,255,0)

sht2.Cells(row_Rng,column1).Interior.Color = RGB(255,255,0)

sht1.Cells(row_Rng,column1).Interior.Color = RGB(255,255,0)

sht2.Cells(row1,column1).Interior.Color = RGB(255,255,0)

效果验证

样本点表为某变电站远动遥信点表,数据量823条(大小约125k),每条数据含有两列内容,其中A列信息为遥信点号,保证不重复,B列为中文描述。

1、表一表二内容完全相同

创建样本点表副本作为表二,原样本点表作为表一导入远动点表比对工具。

点击“校验”按钮后,出现“结论:表一和表二一致”,验证结果正确,校验用时1.96秒。

2、表一表二内容有差异

创建样本点表副本作为表二,并将表二当中445行(点号559)数据” C13保护动作”修改为” C13保护动作”X,315行(点号372)“110kV母联101210隔离刀闸合位”修改为“110kV母联101210X隔离刀闸合位”,43行(点号52)“1#主变重瓦斯”修改为“X1#主变重瓦斯”,111行(点号131)“2651开关分位”修改为“20651开关分位”,173行(点号204)“220kV母联2012开关一组出口跳闸”修改为“0220kV母联2012开关一组出口跳闸”,382点号474)“F07保护动作”修改为“F07保护动作6”,498行(点号613)“2#主变高压侧控行(制回路断线”修改为“错误2#主变高压侧控制回路断线”,615行(点号736)“F15保护装置异常”修改为“F15保护错误装置异常”705行(点号837)“#2接地变保护动作”修改为“#2接地变保护动作错误”,778行(点号990)“蓄电池欠压”修改为“;蓄电池欠压”801行(点号1013)“220kV备自投直流消失”修改为“220kV备自投;直流消失”删除813行(点号1025),删除814行(点号1026)第二列遥信内容,增加825行,点号1037,内容“新增信号”,共14处差异,用以分别验证英文字母、数字、汉字、标点符号分别出现在信号描述头部、中部、尾部的差异是否能够检测,且是否支持1000条数据以上的点表信息量。原样本点表作为表一,将表一表二导入远动点表对比工具。

点击“校验”按钮后,表一、表二差异数据标黄、标橙色,对比结果页结果如下:

验证结果完全正确,校验用时1.55秒。

结论

远动点表对比工具能够准确判断新旧点表差异并进行高亮显示,提醒自动化人员进行后续处理,耗时较短,操作简便易学,实用性强,能够有效减少自动化人员工作量,尤其是对于正在进行升级的主站系统、综合自动化改造的厂站调试,远动点表比对工具能够发挥出很大的作用。由于基于Excel开发,安装环境要求低,几乎全部能够运行Excel的Windows操作系统均可使用,能够很好地满足自动化人员日常使用需求。

(作者单位:广东电网有限责任公司湛江供电局)