组态王除了在建立动画连接时支持连接表达式外,还允许用户定义命令语言来驱动应用程序,极大地增强了应用程序的灵活性。
命令语言的语法和C语言非常类似,是C的一个子集,具有完备的语法查错功能和丰富的运算符、数学函数、字符串函数、控件函数、SQL函数和系统函数。
命令语言都是靠事件触发执行的,如定时、数据的变化、键盘按键的按下、鼠标的单击等。命令语言具有完备的词法、语法查错功能和丰富的运算符、数学函数、字符串函数、控件函数、SQL函数和系统函数。各种命令语言通过“命令语言编辑器”编辑输入,在组态王运行系统中被编译执行。
根据事件和功能的不同,命令语言有6种形式,包括应用程序命令语言、热键命令语言、事件命令语言、数据改变命令语言、自定义函数命令语言和画面命令语言等。如图2-17所示,其区别在于命令语言执行的时机或条件不同。
图2-17 命令语言菜单
应用程序命令语言、热键命令语言、事件命令语言、数据改变命令语言可以称为“后台命令语言”,它们的执行不受画面打开与否的限制,只要符合条件就可以执行。另外可以使用运行系统中的菜单—“特殊→开始执行后台任务”和“特殊→停止执行后台任务”来控制所有这些命令语言是否执行,而画面和动画连接命令语言的执行不受影响;也可以通过修改系统变量“$启动后台命令语言”的值来实现上述控制,该值置0时停止执行,置1时开始执行。
根据工程人员的要求,应用程序命令语言可以在程序启动时执行、关闭时执行或者在程序运行期间定时执行。如果希望定时执行,还需要指定时间间隔(或频率)。
应用程序命令语言主要用于系统的初始化、系统退出时的处理,以及常规程序处理。
当应用数据改变命令语言时,在变量或变量的域的值变化到超出数据词典中所定义的变化灵敏度时,命令语言程序就被执行一次。
当应用事件命令语言时,可以规定在事件发生、存在和消失时分别执行的程序。离散变量名或表达式都可以作为事件。
在使用“事件命令语言”或“数据改变命令语言”过程中要注意防止死循环。例如,在数据改变命令语言中若变量A变化执行程序B=B+1,那么在数据改变命令语言中若变量B变化就不能再执行程序A=A+1,否则程序运行就会进入死循环。
热键命令语言被链接到工程人员指定的热键上,软件运行期间,操作人员随时按下热键都可以启动这段命令语言程序。热键命令语言可以指定使用权限和操作安全区,主要用于处理用户的键盘命令。
如果组态王提供的各种函数不能满足工程的特殊需要,则可以利用它提供的用户自定义函数功能。用户可以自己定义各种类型的函数,通过这些函数能够实现工程的特殊需要。自定义函数是利用类似C语言来编写的一段程序,通过其他命令语言来调用执行编写好的自定义函数,从而实现工程的特殊需要,如累加、线性化、阶乘计算等。
根据工程人员的要求,画面命令语言可以在画面显示时执行、隐含时执行,或者在画面存在期间定时执行。如果希望定时执行,还需要指定时间间隔。
各种命令语言通过“命令语言”对话框编辑输入,在组态王运行系统中被编译执行。在工程浏览器左侧树形菜单中双击命令语言“应用程序命令语言”项,出现“应用程序命令语言”编辑对话框,如图2-18所示。
图2-18 应用程序命令语言对话框
(1)命令语言编辑区。该区域是输入命令语言程序的区域。命令语言对话框的左侧区域为命令语言编辑区,用户在此编辑区输入和编辑程序。编辑区支持块操作。块操作之前需要定义块。
(2)关键字选择列表。可以在此处直接选择现有的画面名称、报警组名称、其他关键字(运算连接符等)到命令语言编辑区。如选中一个画面名称,然后双击它,则该画面名称就被自动添加到编辑器中。
(3)函数选择。组态王支持使用内建的复杂函数,其中包括字符串函数、数学函数、系统函数、控件函数、配方函数、报告函数及其他函数。
函数选择按钮如下。
①“全部函数”—显示组态王提供的所有函数列表。
②“系统”—显示系统函数列表。
③“字符串”—显示与字符串操作相关的函数列表。
④“数学”—显示数学函数列表。
⑤“SQL”—显示SQL函数列表。
⑥“控件”—选择ActiveX控件的属性和方法。
⑦“自定义”—显示自定义函数列表。
单击某一按钮,弹出相关的函数选择列表,直接选择某一函数到命令语言编辑区中。
当用户不知道函数的用法时,可以单击“帮助”按钮进入在线帮助,查看使用方法。
(4)运算符输入。单击某一按钮,按钮上标签表示的运算符或语句自动被输入编辑器中。
(5)变量选择。单击“变量[。域]”按钮时,弹出“选择变量名”对话框。所有变量名均可通过左下角的“变量[。域]”按钮来选择。
以上几种工具都是为减少手工输入而设计的。
命令语言可以进行赋值、比较、数学运算,还提供了可执行IF-ELSE及WHILE型表达式的逻辑操作能力。
用运算符连接变量或常量就可以组成较简单的命令语言语句,如赋值、比较、数学运算等。
(1)赋值语句。赋值语句用得最多,语法如下:
例如:自动开关=1,表示将自动开关置为开(1表示开,0表示关);
(2)IF-ELSE语句。IF语句用于按表达式的状态有条件地执行各个指令,语法为:
需注意的是,IF里的语句即使是单条语句,也必须在一对花括弧“{}”中,这与C语言不同,ELSE分支可以省略。
在命令语言程序中添加注释增强了程序的可读性,也方便了程序的维护和修改。组态王的所有命令语言中都支持注释。注释的方法分为单行注释和多行注释两种,可以在程序的任何地方进行。
单行注释在注释语句的开头加注释符“//”,例如:
多行注释是在注释语句前加“/*”,在注释语句后加“*/”。多行注释也可以用在单行注释上,例如: