第11章 脚本.docx

上传人:b****9 文档编号:29132353 上传时间:2023-07-20 格式:DOCX 页数:47 大小:820.26KB
下载 相关 举报
第11章 脚本.docx_第1页
第1页 / 共47页
第11章 脚本.docx_第2页
第2页 / 共47页
第11章 脚本.docx_第3页
第3页 / 共47页
第11章 脚本.docx_第4页
第4页 / 共47页
第11章 脚本.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

第11章 脚本.docx

《第11章 脚本.docx》由会员分享,可在线阅读,更多相关《第11章 脚本.docx(47页珍藏版)》请在冰豆网上搜索。

第11章 脚本.docx

第11章脚本

第十一章脚本

11.1概述

脚本系统是通过一种编程语言对各种数据对象,图形对象编程,实现处理计算和操作,而达到一定控制和监视目的逻辑语言,KingSCADA提供的脚本是一种在语法上类似C语言的程序,工程人员可以利用这些程序编写逻辑控制程序,从而增强应用程序的灵活性。

KingSCADA的脚本语言支持无限字节长度。

在本章我们将具体介绍脚本编辑器的使用、脚本语法、脚本的分类、脚本拷贝、导入导出以及脚本函数。

注意:

KS系统和画面的后台脚本中对工程变量进行写操作时,不对当前用户的操作权限进行校验。

11.2脚本编辑器

脚本的编写是在编辑器中实现的,为了方便用户正确编辑脚本,KingSCADA脚本编辑器不仅提供一些智能提示、语法加亮、自动格式化、准确定位等功能,还提供了脚本编译功能。

脚本编辑器如图11-1所示,所有命令语言编辑器的大致界面和主要部分及功能都相同,唯一不同的是,按照触发条件的不同,在界面上“触发条件”部分会有所不同。

通过下面的方法可以打开脚本编辑器(以应用程序启动脚本编辑器为例)。

在KingSCADA工程设计器的树形目录区中选择“脚本”→“系统脚本”→“应用程序脚本”选项,双击右侧“应用程序启动时”选项,弹出脚本编辑器,如图所示:

图11-1脚本编辑器

脚本编辑器包括如下几部分:

1)菜单栏

2)工具栏

3)关键字/保留字区域

4)脚本编辑区

11.2.1菜单栏

脚本编辑器的菜单栏包含以下菜单及菜单项:

11.2.1.1文件菜单

命令

功能

单击此命令或工具栏该快捷按钮,进行脚本编译操作,如果编译通过则关闭该对话框,否则提示错误信息。

单击此命令或工具栏该快捷按钮,放弃对脚本编辑的操作,同时关闭该对话框。

11.2.1.2编辑菜单

命令

功能

撤消

单击此命令或工具栏中的

按钮,将取消以前执行过的命令,从最后一次操作开始

重做

单击此命令或工具栏中的

按钮,将恢复先前撤销的命令,从最后一次操作开始

剪切

在脚本编辑区中选择文本后,单击此命令或工具栏中的

按钮,可将其删除,并复制到剪贴板中

拷贝

在脚本编辑区中选择文本后,单击此命令或工具栏中的

按钮,将其复制到剪贴板中,同时保留该文本

粘贴

单击此命令或工具栏中的

按钮,将当前剪贴板中的内容粘贴到脚本编辑区中

删除

在脚本编辑区中选择文本后,单击此命令可将其删除

全选

单击此命令,选中脚本编辑区中的所有文本

查找替换

单击此命令弹出二级菜单,包括查找和替换两个命令,详情请参见下文

转到行

单击此命令可实现快速定位的功能,在弹出对话框内输入行数字后,单击“确定”按钮,系统可将光标定位到该行的行首

增加缩进

此命令可实现对单文本行或多文本行行首缩进的功能,相当于TAB键的功能

减少缩进

此命令实现的功能与增加缩进相反,减少行首缩进

注释

此命令可实现对选中的文本行进行注释的功能,对于注释的文本行,系统将不执行;

单行注释是在文本行的开头加注释符“//”;

多行注释是在文本行的开头加注释符“/*”,在文本行的结尾加注释符“*/”;

取消注释

此命令实现的功能与注释相反,取消对文本行的注释

查找:

单击此命令,弹出对话框如图所示:

图11-2查找对话框

查找:

在此编辑框中输入要查找的文本。

全字匹配:

选择此项,仅显示与“查找目标”字符串全字匹配的实例。

例如:

搜索“MyObject”将返回“MyObject”,而不会返回“CMyObject”或“MyObjectC”。

注:

全字匹配的规范是:

字母和数字被看作同一类字符,其余字符均看成分隔符。

大小写匹配:

选择此项,仅显示与“查找目标”字符串的内容和大小写都匹配的实例。

例如:

搜索“MyObject”,则将只返回“MyObject”,而不会返回“myobject”或“MYOBJECT”。

向上查找:

从当前光标处向上查找。

向下查找:

从当前光标处向下查找。

替换:

单击此命令,弹出对话框如图所示:

图11-3替换对话框

查找:

在此编辑框中输入替换的源目标。

替换:

在此编辑框中输入替换的目的目标。

查找按钮:

替换的源目标和目的目标设置完成后,单击“查找”按钮,系统将光标定位到源目标上,然后按下“替换”按钮将源目标替换为目的目标,可根据需要执行替换操作。

替换全部按钮:

替换的源目标和目的目标设置完成后,单击“替换全部”按钮可将脚本编辑区中的所有源目标替换为目的目标。

其他设置项与查找设置项相同,在此不再赘述。

11.2.1.3视图菜单

命令

功能

工具栏

显示或隐藏工具栏。

工具栏分为三部分:

标准、语法编辑和环境编辑。

分别单击不同的选项用来显示和隐藏。

输出窗口

单击此命令,在脚本编辑器底部会出现输出窗口,在此窗口中显示编译过程中产生的信息

11.2.1.4工具菜单

命令

功能

编译

单击此命令或工具栏中的

按钮,可对编辑完的脚本进行编译操作,主要是语法检查

选项

单击此命令弹出对话框,详情请参见下文

选项:

单击此命令弹出对话框,如图所示:

图11-4选择项对话框

对话框包含两个属性页:

字体编辑属性页和语法颜色设置属性页。

编辑字体属性页:

在该属性页中可设置脚本编辑器中输入文本的字体、字体的风格及字体的大小。

语法颜色属性页:

在该属性页中可设置语法中不同类型文本的颜色/背景颜色。

可设置的语法项包括:

✧Comment(注释)

✧Function(函数)

✧Identifier(标识符)

✧Keyword(关键字)

✧Mult-Linecommentprefix(多行注释头)

✧Mult-Linecommentprefix(多行注释尾)

✧Normal(正常文本)

✧Number(数字)

✧Operator(操作者)

✧Singlelinecommentprefix(单行注释头)

✧Station(站点名)

✧String(字符串)

✧Type(变量类型)

11.2.1.5插入菜单

命令

功能

变量

单击此命令在编辑区中插入所需的变量

配方

单击此命令在编辑区中插入所需的配方

画面

单击此命令在编辑区中插入所需的画面

函数

单击此命令在编辑区中插入所需的函数

11.2.2关键字区/保留字区域

关键字/保留字选择区域,如图所示:

图11-5关键字/保留字区域

在此区域中列举了KingSCADA所支持的关键字、运算符、控制语句等,在脚本编辑时,可以直接在此区域中进行选择。

This是一个关键字,在画面内的事件脚本(如画面脚本、画面中图素鼠标事件脚本)中,this代表当前编辑的画面对象,在上述脚本中可通过this引用当前画面对象的属性,如this.Name、this.Background分别代表当前画面的名称和背景颜色。

11.2.3语法加亮功能

为了方便用户编辑脚本,KingSCADA脚本编辑器将不同的语法部分采用不同的颜色加以区别提示,如关键字、字符串、数字、注释等,KingSCADA通常会提供一个习惯的语法加亮方案,同时提供了更多的选择,用户可以根据自己的使用习惯进行自定义,定义方法参见11.2.1.4工具菜单中选择项。

11.2.4智能提示功能

11.2.4.1Tip提示

当鼠标移动到某个变量上时,自动显示提示框提示“变量名变量类型”,如下图所示。

图11-6变量的Tip提示

当鼠标移动到某个函数上时,自动显示提示框显示函数的签名,如下图所示。

图11-7函数的Tip提示

11.2.4.2列表框提示

当用户在变量后输入“.”时,自动显示列表框,该框列出了该变量所有公开的属性和方法,如下图所示。

图11-8变量的列表框提示

注:

列表框可以通过过滤选择按钮进行选择,如仅显示属性、仅显示方法等。

当用户输入“\\”时,自动显示列表框,该框列出了所有可用的站点名,如下图所示。

选择站点后输入“\”,自动显示列表框,该框中列出了该站点下所有的变量、报警组等。

图11-9站点的列表框提示

例如,在画面脚本中输入“this.”时,自动显示列表框,该框中列出了该画面所有公开的属性,如图所示。

图11-10画面的列表框提示

11.2.5快捷键

脚本编辑器中可使用的快捷键如下表所示:

命令

快捷键

拷贝

Ctrl+C

剪切

Ctrl+X

粘贴

Ctrl+V

全选

Ctrl+A

撤销

Ctrl+Z

重做

Ctrl+Y

转到行

Ctrl+G

查找

Ctrl+F

替换

Ctrl+H

减少缩进

Ctrl+L

增加缩进

Ctrl+R

注释

Ctrl+M

取消注释

Ctrl+K

11.3脚本语法

该节将介绍KingSCADA支持的数据类型、运算符以及控制语句。

11.3.1支持的数据类型

KingSCADA支持的脚本数据类型表如下:

数据类型

描述

取值范围

精度

bool

bool型

0(false),1(true)

精确

int

32位整数

-2147483648~2147483647

精确

long

64位整数

-9223372036854775808

~9223372036854775807

负数边界值不能精确

float

32位实数,单精度浮点

-3.4E38~3.4E38

3.4E-38

double

64位实数,双精度浮点

-1.7E308~1.7E308

1.7E-308

string

字符串

长度不限

精确

DiscTag

引用型离散变量

0(false),1(true)

精确

IntTag

引用型整型变量

-2147483648~2147483647

精确

FloatTag

引用型实型变量

-9.99999968028569E37

~9.99999968028569E37

小数点后6位

StringTag

引用型字符串型变量

最大长度128个字符

精确

11.3.1.1布尔类型

布尔常量:

true,false

布尔变量:

布尔变量的类型符为bool,取值true和false

11.3.1.2整数类型

整型常量:

十进制整数,如123,-456,0。

整型变量:

有符号短整型和有符号长整型:

类型名称

标识

字节数

范围

有符号短整型

int

4

-2147483648-2147483647

有符号长整型

long

8

-9223372036854775808-

9223372036854775807

11.3.1.3实数类型

实型常量:

十进制小数形式,如0.123、123.0、0.0。

实型变量:

单精度实型和双精度实型:

类型名称

标识

字节数

有效数字

范围

单精度实型

float

32

6-7

-3.4e-37-3.4e38

双精度实型

double

64

15-16

10e-307-10e308

11.3.1.4字符串类型

字符串常量:

使用双引号引起来的若干字符,如“KingSCADA”,“script”等。

注:

“kingview”和“KINGVIEW”是不同的字符常量。

字符串变量的类型符为string,定义形式如下:

stringstr1,str2;

11.3.1.5引用类型

引用类型是脚本语言比较特殊的一种数据类型,与C++中的引用的概念相似,它是为支持对象的调用而增加的一种特殊类型。

KingSCADA脚本系统要求即能够在脚本中引用脚本外的对象,又要正确识别这些对象,因此必须引入对象、对象类型的概念。

有关脚本对象的概念归结如下:

1、脚本语言支持对象的概念,但是不能创建和删除对象,真正的对象实例是在脚本以外的KingSCADA第三方模块中创建和销毁的。

2、KingSCADA脚本系统不能管理对象的生命周期,但是可以通过对象对外公布的属性和方法接口控制对象的行为,因此把它们称为外部可控对象。

3、在脚本系统中引用可控对象的方式有两种:

(a)直接引用方式,是在脚本语言程序中通过对象名直接引用对象,如:

externObj.Method1();

intvalue=externObj.Value;

(b)间接引用方式,通过在脚本语言中声明对应的对象类型的一个引用变量,如:

IntTagtagRef;

tagRef=&externObj;

tagRef.Merhod1();

第一句声明了一个IntTag类型的引用变量,该引用变量所指向的对象类型只能是IntTag对象类型,第二句给引用变量赋值,即把外部可控对象externObj(必须是IntTag类型的示例)的地址赋值给tagRef,此时tagRef就指向externObj。

第三句是通过引用变量tagRef访问其所指对象的一个方法,即间接引用了可控对象externObj。

11.3.1.6引用变量

1、定义一个引用变量

一般形式:

变量类型变量名;

或者是

变量类型变量名=&对象名

或者是

变量类型变量名=&引用变量名

第一种形式是将引用变量值初始化位null,即不指向任何对象。

第二种形式是将对象的地址赋值给引用变量,变量指向一个外部可控对象。

第三中形式是将另外一个引用变量的值赋给该引用变量,即这两个引用变量指向同一个对象。

2、引用变量的使用

有关的运算符:

&(取地址运算符)。

objRef=&obj;

上面语句就是将对象obj的地址赋值给引用变量objRef。

11.3.1.7数组类型

数组是有序数据的集合。

数组中的每一个元素都属于同一个数据类型。

用一个统一的数组名和下表来唯一确定数组中的元素。

1、一维数组的定义方式

类型说明符[常量表达式]数组名;

(a)数值类型数组

int[10]a;

它表示数组名为a,此数组有10个元素,元素类型为整型。

(b)对象引用类型数组

IntTag[10]b;

它表示数组名为b,此数组有10个元素,元素类型为IntTag引用类型。

说明:

(1)数组名定名规则和变量名相同,遵循标识符定名规则;

(2)类型说明符后是用方括弧括起来的常量表达式,不能用元括弧;

(3)常量表达式表示元素的个数,即数组长度。

例如在int[10]a中,10表示a数组有10个元素,下标从0开始;

(4)常量表达式中只能包含常量。

也就是说,不允许对数组的大小做动态定义,即数组的大小不依赖与程序运行过程中的变量的值。

2、一维数组的引用

数组必须先定义,然后使用。

规定只能逐个引用数组元素而不能一次引用整个数组。

数组元素的表示形式为:

数组名[下标]

下标可以是整型常量或整型表达式。

3、一维数组的初始化

对数组元素的初始化可以用一下方式实现:

(a)在定义数组时对数组元素赋以初值。

例如:

int[5]a={0,1,2,3,4};

将数组元素的初值一次放在一对花括弧内。

经过上面的定义和初始化之后

a[0]=0,a[1]=1,a[2]=2,a[3]=3;a[4]=4。

IntTag[5]b={&tag0,&tag1,&tag2,&tag3,&tag4};

经过上面的定义和初始化之后,b[0]=&tag0,b[1]=&tag1,b[2]=&tag2,,b[3]=&tag3,b[4]=&tag4。

(b)可以只给一部分元素赋值。

例如:

int[5]a={0,1,2};

定义a数组有5个元素,但花括弧内只提供3个初值,这表示只给前面3个元素赋初值,后2个元素为0。

IntTag[5]b={&tag0,&tag1,&tag2};

定义b数组有5个元素,但花括弧内只提供3个初值,表示前三个元素依次赋初值,后两个元素值为null。

11.3.2支持的运算符

脚本的运算符范围很宽,把除了控制语句以外的几乎所有的基本操作都作为运算符处理,例如将赋值符“=”作为赋值运算符,方括号作为下标运算符,点作为域访问运算符等。

KingSCADA脚本语言支持的运算符如下:

11.3.2.1算术运算符

1、基本的算术运算符

+:

加法运算符,或正值运算符,如3+5、+3

-:

减法运算符,或负值运算符,如5-2、-3

*:

乘法运算符,如3*5

/:

除法运算符,如5/3

%:

模运算符,或称求余运算符,%两侧均应为整型数据,如7%3的值为1,在模数或被模数为负数的情况下,模数的符号将忽略,取模的结果的符号与被模数的符号一致,这与C语言的语法是一致的。

2、自增、自减运算符

++:

自增运算符,如i++

――:

自减运算符,如i—

11.3.2.2关系运算符

>:

大于

<:

小于

==:

等于

>=:

大于等于

<=:

小于等于

!

=:

不等于

11.3.2.3逻辑运算符

非逻辑

||:

或逻辑

&&:

与逻辑

11.3.2.4位运算符

&:

按位与,参与运算的两个数据,按二进制位进行“与”运算,如果两个相应的二进制位都为1,则该位的结果指为1,否则为0。

|:

按位或,参与运算的两个数据,按二进制位进行“或”运算,如果两个相应的二进位中只要有一个为1,该位的结果值为1。

^:

异或,参加运算的两个二进位同号,则结果为0,异号则为1。

~:

取反,是一个单元运算符,用来对一个二进制数按位取反,即将0变1,1变0。

<<:

左位移运算,用来将一个数的二进制位全部左移若干位。

例如:

a=a<<2。

将a的二进制数左移2位,右补0。

高位左移溢出,舍弃不起作用。

>>:

右位移运算,用来将一个数的二进制位全部右移若干位。

例如:

a=a>>2。

将a的二进制数右移2位,左补0。

低位右移溢出,舍弃不起作用。

11.3.2.5赋值运算符

1、基本赋值运算符

=:

赋值运算符,将一个常量、变量或表达式的值赋给一个变量。

2、复合赋值运算符

在赋值赋“=”之前加上其他运算符,可以构成复合的运算符。

如果在“=”前加一个“+”就称了复合运算符“+=”。

例如,可以有:

a+=3等价于a=a+3

x*=y+3等价于x=x*(y+3)

a%=3等价于a=a%3

a+=3等价于a=a+3

凡是二元运算符,都可以与赋值运算符一起合成复合运算符。

脚本语言规定可以使用10种复合运算符。

即:

+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=

11.3.2.6其他运算符

除了上述运算符外还支持如下运算符:

1、指针运算符:

&

2、域运算符:

3、下标运算符:

[]

4、类型强制转换:

(type)expression

强制转换类型:

bool、int、long、float、double支持强制类型转换,string则不支持

用法示例:

floatfValue;

fValue=(float)100/200;//结果是0.5

fValue=100/200;//结果是0

fValue=(float)IntTag;

fValue=(float)IntTag.Value;

11.3.3支持的脚本语句

KingSCADA支持的脚本语句如下所示:

✧赋值语句

✧跳转语句

✧分支语句

✧循环语句

11.3.3.1附值语句

赋值语句用得最多,语法如下:

变量(变量的可读写域)=表达式;

可以给一个变量赋值,也可以给可读写变量的域赋值。

例如:

自动开关=1;表示将自动开关置为开(1表示开,0表示关)

颜色=2;将颜色置为黑色(如果数字2代表黑色)

反应罐温度.priority=3;表示将反应罐温度的报警优先级设为3

11.3.3.2跳转语句

1、return

基本形式:

return;

return表达式;

其作用为结束本次脚本执行,如果是第二种形式,则表示将表达式的值作为脚本执行完的返回值。

2、break

基本形式:

break;

其作用为从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句。

3、continue

基本形式:

continue;

其作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。

continue语句和break语句的区别是:

continue语句只结束本次循环,而不是终止整个循环的执行。

而break语句则是结束整个循环过程,不再执行循环的条件是否成立。

举例:

Tag1=0;

Tag2=0;

do

{

Tag1++;

continue;

Tag2++;//使用continue语句跳过此句

}while(Tag1<10);

if((Tag1==10)&&(Tag2==0))

{

Bool_RunResult.Value=true;

}

else

{

Bool_RunResult.Value=false;

}

11.3.3.3分支语句

1、if语句

if语句的三种形式:

(a)if(表达式)语句

(b)if(表达式)语句1else语句2

(c)if(表达式1)语句1

elseif(表达式2)语句2

……

elseif(表达式m)语句m

else语句n

举例:

if(IntTag1==0)

{

Bool_RunResult.Value=true;

}

else

{

Bool_RunResult.Value=false;

}

2、switch语句

switch语句是多分支选择语句。

它的一般形式如下:

switch(表达式)

{

case常量表达式1:

语句1

case常量表达式2:

语句2

……

case常量表达式n:

语句n

default:

语句n+1

}

说明:

(1)switch后面括弧内的表达式,允许它为基本数据类型,不能为对象类型。

(2)当表达式的值与某一个case后面的常量表达式的值相等时,就执行此case后面的语句,若所有的case中的常量表达式的值都没有与表达式的值匹配时,就执行default后面的语句。

(3)每一个case的常量表达式的值必须互不相同,否则编译时会给出相应的警告信息,也会导致执行结果错误。

(4)各个case和default的出现的次序不影响执行结果。

(5)执行完一个case后面语句后,流程控制转移到下一个case继续执行。

“case常量表达式”只是起语句标号作用,并不是在该处进行条件判断。

在执行switch语句时,根据switch后面表达式的值找到匹配的入口标号,就从此标号开始执行下去,不再进行判断,因此,应该在执行一个case分支后,使流程跳出switch结构,即终止switch语句的执行,可以用break语句达到此目的。

举例:

Tag1=11;

Tag2=0;

switch(IntTag1)

{

case1:

Tag2=1;break;

case2:

Tag2=2

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 家庭教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1