SCADA|KingSCADA中如何使用自定义函数优化脚本程序?

雅轩聊科技 2025-01-20 20:14:34

哈喽,你好啊,我是雷工!

在前面《》中记录演示了实现到期提醒功能。

实际项目中不可能只有一台设备需要用到到期维保提醒,或到期更换配件提醒。

很可能一个项目中就要有几十上百个设备,那样的话脚本会比较多,而且遇到修改的时候也会比较繁琐。

考虑是否可以使用自定义函数,一来可以缩减脚本规模,二来修改可以较简洁,三是代码看上去也会比较整齐。

因此尝试使用自定义函数优化实现到期提醒功能,以下为测试练习笔记。

01 自定义函数

这里自定义函数的使用相当于将公用程序放到了一个自定义函数中。

KingSCADA中自定义函数是利用类似C语言来编写的一段程序,其本身不能直接被触发,需要通过其他脚本程序来调用执行。

02 自定义函数返回值

自定义函数可以有六种返回值,这个实例中函数返回值为bool,布尔型。

03 自定义函数构成

①自定义函数类型(函数返回值类型)

②函数名和参数类型及名称

③函数体内容

04 定义自定义函数

4.1、返回类型

首先在【脚本】中的【自定义脚本】下选中【自定义函数】,点击【新建】按钮,选择自定义函数类型为bool;

4.2、函数名称

在返回值类型框后面的编辑框中输入该函数的名称,不能为空。

函数名+参数,总长度不能超过128个字符。

此处命名为:ExpirationAlarm(string nDate,int nMonth)

4.3、函数体程序

在下面的脚本编辑区输入函数体程序。

在程序中可以使用自定义变量。函数体中的最后部分是返回语句。

如果该函数有返回值,则使用return value(value为某个变量的名称)。

对于无返回值的函数也可以使用Return,但只能单独使用Return,表示当前命令语言或函数执行结束。

本案例函数主体程序为:

//函数说明:用于判断是否超期//参数:bool Resule--判断结果//string nDate:上次记录日期格式:“2025-1-20”;//int nMonth:设置月数,//获取当前系统的日期string Date2=GetSystemtimeDateString();//比较上次维保日期与当前系统日期int nCurrentM;bool Result;nCurrentM=DateDiff("M",nDate,Date2);//如果日期相差大于12个月则报警if(nCurrentM>nMonth){Result=true;}else{Result=false;}return Result;

运行起来效果是一样的。

05 调用自定义函数

原事件脚本:

string Date2=GetSystemtimeDateString();\\local\间隔月份=DateDiff ("M",\\local\上次维保日期,Date2);if(\\local\间隔月份>12){\\local\已到期=1;}else{\\local\已到期=0;}

替换为自定义函数的写法:

\\local\已到期=/*bool*/ ExpirationAlarm(\\local\上次维保日期,12);

06 后记

缩减后的脚本仅为1行,当遇到几十上百台时,代码量大大缩减,而且简洁,整齐,不易出错。

同样是写代码,有的人写的代码简洁却不简单,简短却强大,移植性,复用性都比较强;

但有的人写的代码,巨长臃肿,大量重复代码,移植时不易修改,修改量大,复用价值不高;

所有人和人的差距很大,代码和代码的差距也很大,

愿我们写代码的时候都能够在能用就行的基础上,让代码更优雅。

避免出现人见人骂的屎山级代码。

0 阅读:0
雅轩聊科技

雅轩聊科技

感谢大家的关注