购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.7 脚本程序

脚本程序是组态软件中的一种内置编程语言引擎。当某些控制和计算任务通过常规组态方法难以实现时,通过使用脚本语言,能够增强整个系统的灵活性,解决其常规组态方法难以解决的问题。

MCGS脚本程序为有效地编制各种特定的流程控制程序和操作处理程序提供了方便的途径,它被封装在一个功能构件里(称为脚本程序功能构件),在后台由独立的线程运行和处理,能够避免由于单个脚本程序的错误而导致整个系统瘫痪。

在MCGS中,脚本语言是一种语法上类似Basic的编程语言,可以应用在运行策略中,把整个脚本程序作为一个策略功能块执行,也可以在菜单组态中作为菜单的一个辅助功能运行,更常见的用法是应用在动画界面的事件中。MCGS引入的事件驱动机制,与VB或VC中的事件驱动机制类似。比如,对用户窗口,有装载、卸载事件;对窗口中的控件,有鼠标单击事件、键盘按键事件等。这些事件发生时就会触发一个脚本程序,执行脚本程序中的操作。

2.7.1 脚本程序语言要素
1.数据类型

MCGS脚本程序语言使用的数据类型只有3种:

(1)开关型:表示开或者关的数据类型,通常0表示关,非0表示开,也可以作为整数使用。

(2)数值型:值在3.4E±38范围内。

(3)字符型:最多由512个字符组成的字符串。

2.变量、常量及系统函数

1)变量

脚本程序中,用户不能定义子程序和子函数,其中数据对象可以看作脚本程序中的全局变量,在所有的程序段共用。可以用数据对象的名称来读/写数据对象的值,也可以对数据对象的属性进行操作。

开关型、数值型、字符型三种数据对象分别对应于脚本程序中的三种数据类型。在脚本程序中不能对组对象和事件型数据对象进行读/写操作,但可以对组对象进行存盘处理。

2)常量

(1)开关型常量:0或非0的整数,通常0表示关,非0表示开。

(2)数值型常量:带小数点或不带小数点的数值,如12.45,100。

(3)字符型常量:双引号内的字符串,如“OK”、“正常”。

3)系统变量

MCGS系统定义的内部数据对象作为系统变量,在脚本程序中可自由使用,在使用系统变量时,变量的前面必须加“$”符号,如 $Date。

4)系统函数

MCGS系统定义的系统函数,在脚本程序中可自由使用,在使用系统函数时,函数的前面必须加“!”符号,如!abs( )。

5)属性和方法

MCGS系统内的属性和方法都是相对于MCGS的对象而言的,引用对象的方法可以参见下个部分。

3.MCGS对象

MCGS的对象形成一个对象树,树根从“MCGS”开始,MCGS对象的属性就是系统变量,MCGS对象的方法就是系统函数。MCGS对象下面有“用户窗口”对象、“设备”对象、“数据对象”等子对象。“用户窗口”以各个用户窗口作为子对象,每个用户窗口对象以这个窗口里的动画构件作为子对象。

使用对象的方法和属性必须要引用对象,然后使用点操作来调用这个对象的方法或属性。为了引用一个对象,需要从对象根部开始引用,这里的对象根部是指可以公开使用的对象。MCGS对象、用户窗口、设备和数据对象都是公开对象,因此,语句InputETime = $Time是正确的,而语句InputETime = MCGS.$Time也是正确的,同样,调用函数!Beep()时,也可以采用MCGS.!Beep()的形式。可以写:窗口0.Open();也可以写:MCGS.用户窗口。窗口0.Open();还可以写:用户窗口。窗口0.Open()。但是,如果要使用控件,就不能只写:控件0.Left;而必须写:窗口0.控件0.Left,或用户窗口。窗口0.控件0.Left。在对象列表框中,双击需要的方法和属性,MCGS将自动生成最小可能的表达式。

4.事件

在MCGS的动画界面组态中,可以组态处理动画事件。动画事件是在某个对象上发生的,可能带有参数也可能没有参数的动作驱动源。如用户窗口上可以发生事件:Load,Unload,分别在用户窗口打开和关闭时触发。可以对这两个事件组态一段脚本程序,当事件触发时(用户窗口打开或关闭时)被调用。

用户窗口的Load和Unload事件是没有参数的,但是MouseMove事件有,在组态这个事件时,可以在参数组态中选择把MouseMove事件的几个参数连接到数据对象上,从而当MouseMove事件被触发时,就会把MouseMove的参数,包括鼠标位置、按键信息等送到连接的数据对象,然后在事件连接的脚本程序中就可以对这些数据对象进行处理。

5.表达式

由数据对象(包括设计者在实时数据库中定义的数据对象、系统内部数据对象和系统函数)、括号和各种运算符组成的运算式称为表达式,表达式的计算结果称为表达式的值。

当表达式中包含有逻辑运算符或比较运算符时,表达式的值只可能为0(条件不成立,假)或非0(条件成立,真),这类表达式称为逻辑表达式;当表达式中只包含算术运算符,表达式的运算结果为具体的数值时,这类表达式称为算术表达式;常量或数据对象是狭义的表达式,这些单个量的值即为表达式的值。表达式值的类型即为表达式的类型,必须是开关型、数值型、字符型三种类型中的一种。

表达式是构成脚本程序的最基本元素,在MCGS的部分组态中,也常常需要通过表达式来建立实时数据库与其对象的连接关系,正确输入和构造表达式是MCGS的一项重要工作。

6.运算符

1)算术运算符

2)逻辑运算符

3)比较运算符

7.运算符优先级

按照优先级从高到低的顺序,各个运算符排列如下:

(1)( );

(2)∧;

(3)*,/,\,Mod;

(4)+,—;

(5)< , > ,<= ,>=,= ,<>;

(6)NOT;

(7)AND,OR,XOR。

2.7.2 脚本程序基本语句

由于MCGS脚本程序是为了实现某些多分支流程的控制及操作处理,因此包括了几种最简单的语句:赋值语句、条件语句、退出语句和注释语句,同时,为了提供一些高级的循环和遍历功能,还提供了循环语句。所有的脚本程序都可由这5种语句组成,当需要在一个程序行中包含多条语句时,各条语句之间须用“:”分开,程序行也可以是没有任何语句的空行。大多数情况下,一个程序行只包含一条语句,赋值程序行中根据需要可在一行上放置多条语句。

1.赋值语句

赋值语句的形式为:数据对象 = 表达式。赋值语句用赋值号(=)来表示,它具体的含义是:把“=”号右边表达式的运算值赋给左边的数据对象。赋值号左边必须是能够读/写的数据对象。例如:开关型数据、数值型数据,以及能进行写操作的内部数据对象,而组对象、事件型数据对象、只读的内部数据对象、系统函数及常量均不能出现在赋值号的左边,因为不能对这些对象进行写操作。

赋值号的右边为一表达式,表达式的类型必须与左边数据对象值的类型相符合,否则系统会提示“赋值语句类型不匹配”的错误信息。

2.条件语句

条件语句有如下三种形式:

条件语句中的4个关键字“If”、“Then”、“Else”、“EndIf”不分大小写,如拼写不正确,检查程序会提示出错信息。

条件语句允许多级嵌套,即条件语句中可以包含新的条件语句,MCGS脚本程序的条件语句最多可以有8级嵌套,为编制多分支流程的控制程序提供了可能。

“IF”语句的表达式一般为逻辑表达式,也可以是值为数值型的表达式,当表达式的值为非0时,条件成立,执行“Then”后的语句,否则,条件不成立,将不执行该条件块中包含的语句,开始执行该条件块后面的语句。

值为字符型的表达式不能作为“IF”语句中的表达式。

3.循环语句

循环语句为While和EndWhile,其结构为:

当条件表达式成立时(非零),循环执行While和EndWhile之间的语句,直到条件表达式不成立(为零),退出。

4.退出语句

退出语句为“Exit”,用于中断脚本程序的运行,停止执行其后面的语句。一般在条件语句中使用退出语句,以便在某种条件下停止并退出脚本程序的执行。

5.注释语句

以单引号“’”开头的语句称为注释语句,注释语句在脚本程序中只起到注释说明的作用,实际运行时,系统不对注释语句作任何处理。

2.7.3 脚本程序的查错和运行

脚本程序编制完成后,系统首先对程序代码进行检查,以确认脚本程序的编写是否正确。检查过程中,如果发现脚本程序有错误,则会返回相应的信息,以提示可能的出错原因,帮助用户查找和排除错误。常见的提示信息有:

(1)组态设置正确,没有错误。

(2)未知变量。

(3)未知表达式。

(4)未知的字符型变量。

(5)未知的操作符。

(6)未知函数。

(7)函数参数不足。

(8)括号不配对。

(9)IF语句缺少ENDIF。

(10)IF 语句缺少THEN。

(1 1)ELSE 语句缺少对应的IF语句。

(12)ENDIF 缺少对应的 IF 语句。

(13)未知的语法错误。

根据系统提供的错误信息,做出相应的改正,系统检查通过,就可以在运行环境中运行,从而达到简化组态过程、优化控制流程的目的。 ue56EPbHwEl61IlVqOZF6K5InzCsduy16h0VkBNZ4DmKlXJBMPlUsSqHonsyoEJM

点击中间区域
呼出菜单
上一章
目录
下一章
×