远动点表比对工具开发原理与实践
2019-10-21张佳楠
张佳楠
【摘 要】自动化主站系统升级时,需要把旧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操作系统均可使用,能够很好地满足自动化人员日常使用需求。
(作者单位:广东电网有限责任公司湛江供电局)