基于Excel中VBA实现配电系统备自投控制器代码自动生成软件开发

2022-03-31 09:35郭书英秦兆杰胡雪松李世杰赵立胜
河北省科学院学报 2022年1期
关键词:馈线代码编程

郭书英,秦兆杰,胡雪松,李世杰,赵立胜

(河北电力装备有限公司,河北 邯郸 056000)

0 引言

在一些重要的用电场合,配电系统须配备两路进线电源,并且要求进线电源控制器具有自动投切功能和数据采集、处理及传输功能,此进线电源控制器即备自投控制器。备自投控制器一般通过控制两段进线断路器及母联断路器实现电源的自动投切,同时控制器还担负着采集并处理两段内的馈线柜各馈线回路电量数据的任务[1]。

在典型配电系统中,一般每段配备有18台柜子,每个柜子包含了9个馈线回路,每个馈线回路的电量数据包括三相电压、三相电流、有功功率、无功功率、频率、正向有功电能、正向无功电能等共计十余项,以此计算,每个配电系统两段母线共计会有三千五百余数据需要采集处理,以地铁为例,全线所有配电场所用电累积会有六万余数据需要采集处理。为实现控制功能和数据的批量处理功能,需要为此编写大量程序。然而通过对控制器程序的详细梳理,归纳并总结出控制器中的程序数量虽大,但有规律可循,这些完成特定功能的程序中用到了大量重复性语句,而重复性语句则可以通过设计一款简易的软件,编程人员只需根据配电系统图在软件接口界面对应位置填入相关数据,即可生产完成代码的自动生成。在非常有效地节省编程人员的工作量、提高编程效率的同时,使控制器程序的编译通过率也大大提高,程序的运行效果更加完美。由软件生成的代码严格遵守编程相关规范,同时规范的程序代码也会对后续的维护和升级提供良好的基础[2]。

1 软件开发分析

本软件着力解决控制器开发人员对于编程过程中重复性语句的编写,针对数据采集及处理功能块中的程序语句编写及运行流程进行梳理、归纳、总结,对程序架构做充分优化,软件的需求如下:

(1)要有输入参数的界面,该界面可以允许使用者根据配电系统中馈线回路数量的不同,输入不同参数的接口,界面要简单易懂。

(2)具备根据配电系统中馈线回路的数据采集和处理的数量不同,自动生成对应功能模块程序代码的功能。

(3)提供针对控制器开发初学者的快捷生成代码的方法,降低对控制器开发人员在程序编写及调试方面的难度。

(4)移植性好,在不同类型电脑上使用方便,免安装等特点。

2 设计思路

大多数用户的电脑中办公软件为office或者WPS,其中的Excel具备VBA编程开发的功能,Excel各表格可以通过VBA或者宏编程实现对不同Sheet中的Cells进行填充。Excel中的控件类型丰富,VBA语法简单,结构清晰,编程功能强大,使用简单方便。二者结合可以满足大部分的开发需求,所开发出的软件体量轻,功能强,能够方便的解决编程工作中的多种问题,极大提升编程开发效率。

通过总结需求,将备自投控制器中有关数据采集和处理的功能进行分类汇总,分别建立相应的sheet,利用VBA编程功能编写代码,实现对Sheet中Cells的数据读取和填充,并结合Excel的按钮控件,实现备自投控制器代码的一键自动生成。

在Excel的VBA编程环境下,针对需求精确设计了多个子函数,并在主程序中进行调用,以实现既定功能。子函数主要包括:馈线柜通讯状态循环1、馈线柜通讯状态循环2、馈线回路数据状态循环1、馈线回路数据状态循环2、馈线回路通讯状态循环1、馈线回路通讯状态循环2、操作报警记录循环1、操作报警记录循环2等。

3 设计内容及方法

3.1 建立参数输入和一键生成代码界面

参照配电系统图,按照两段配电,每段最多20台柜子,每个柜子最多9个馈线回路,设计好通用的Excel接口表格,这个表格是本软件的接口界面,通过将配电柜数量、馈线回路按顺序固定下来,在加上三级负荷和计量回路的选型,并在页面左上角添加生成代码按钮控件,用户通过在接口界面的指定位置填入系统中的配电柜馈线回路数量、三级负荷开关、计量回路等关键参数,然后点击生成代码按钮即可完成操作[3]。接口界面如图1所示。

图1 接口界面

3.2 编写馈线回路数据采集与处理主程序函数及各子程序函数

通过编写馈线回路数据采集和处理的各子程序函数,并在主程序函数中进行调用,最终完成对控制器代码的自动生成工作,典型子程序函数声明如下:

KuiXianGuiComStatus_loop1(GNum,LNum,THNum,MCNum, LNum)

该类型子函数主要通过内部循环函数完成对控制器内部程序代码自动编写。首先将配电回路分为两段,分段遍历各馈线回路,根据馈线回路自动生成相关代码,并自动添加代码语句结束符,之后将代码按照控制器编程规则填充到表格的对应单元格中。

完成子函数的编写后,在主函数中,通过For循环语句调用各功能块子函数,从而完成对接口表格中的馈线柜馈线回路数量、三级负荷所在回路号、计量回路所在回路号等变量的遍历,同时通过Dim语句定义EasyComNum 、LoopNum、MeasurementCircutNum 、ThirdLoadNum、CodeLineNum、CodeColumnNum、CodeColumnNum1、bit 、bitNum、TelemeteringNum、ElectricalDegreeNum等多个接口变量,完成馈线回路数及程序中bit的位的自增与清零工作[4]。

典型For循环函数结构体如下:

For m = 2 To LNum Step 1

If THNum = 1 Then

If MCNum = m Then

Else

End If

Else

If MCNum = m Then

Else

End If

End If

Next m

典型主函数结构体如下:

Private Sub CommandButton1_Click()

Dim EasyComNum As Integer

Dim LoopNum As Integer

Dim ElectricalDegreeNum As Integer

For n = 1 To 38 Step 1

LoopNum = Sheet1.Cells(n +3, 4)

ThirdLoadNum = Sheet1.Cells(n + 3, 6)

MeasurementCircutNum = Sheet1.Cells(n + 3, 5)

If LoopNum <= 1 Then

Else

If n < 20 Then 'I段回路

Call KuiXianGuiComStatus_loop1(n, LoopNum, ThirdLoadNum, MeasurementCircutNum, CodeLineNum)

Call SwitchStateDate_loop1(n, LoopNum, ThirdLoadNum, MeasurementCircutNum, CodeColumnNum, CodeColumnNum1, bit, bitNum, TelemeteringNum, ElectricalDegreeNum)

End If

If n >= 20 Then 'II段回路

Call KuiXianGuiComStatus_loop2(n, LoopNum, ThirdLoadNum, MeasurementCircutNum, CodeLineNum)

End If

CodeLineNum = CodeLineNum + 1

CodeColumnNum = CodeColumnNum + LoopNum

CodeColumnNum1 = CodeColumnNum1 + (LoopNum * 2)

End If

Next n

End Sub

3.3 完成控制器代码编写

通过单击接口界面的代码生成按钮控件,最终完成备自投控制器程序代码的自动编写,控制器开发人员可以将各个Sheet中的代码直接复制,粘贴到控制器编程软件,编译通过即可。表格代码界面如图2。备自投控制器编程软件代码界面如图3。编译通过的界面如图4。

图2 表格中自动生成的代码

图3 移植备自投控制器编程软件中的代码

图4 备自投控制器代码编译结果

4 结束语

本软件利用Excel的VBA功能,并结合按钮控件,一键生成配电系统控制器代码,解决了降低控制器开发人员的工作量,提高工作效率和编程的准确率的问题,并使得控制器的程序格式规范而统一,架构清晰而简洁。配电系统备自投控制器编程代码自动生成软件从实战出发,立足初学者的角度,对需求进行充分理解和论证,结合控制器架构设计,最终实现既定目标;同时软件留出数据余量及扩展接口,方便后续升级更新,为之后扩展提供了技术方面的支持和保障;本软件对于其他系统及部门的技术人员也有相当大的借鉴和推广作用。

猜你喜欢
馈线代码编程
中波八塔天线馈线制作
基于充电桩选择策略的双馈线负荷优化和削峰潜力分析
编程,是一种态度
元征X-431实测:奔驰发动机编程
编程小能手
纺织机上诞生的编程
配电智能分布式馈线自动化调试方案的研究
创世代码
创世代码
创世代码