《AdvantechWebAccess培训-08第八章脚本.ppt》由会员分享,可在线阅读,更多相关《AdvantechWebAccess培训-08第八章脚本.ppt(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、20072007年年6 6月月AdvantechAdvantech WebAccessWebAccess 培训教程培训教程培训教程培训教程 第八章第八章 脚本脚本培训目标培训目标这一章节将向您介绍这一章节将向您介绍WebAccess 脚本功能。脚本功能。培训结束时您将掌握以下知识:培训结束时您将掌握以下知识:了解什么是脚本,脚本的功能、性能等了解什么是脚本,脚本的功能、性能等编写编写TCL脚本脚本编写编写VB脚本脚本编写编写JAVA脚本脚本用脚本控制动画用脚本控制动画 在脚本运行时查错在脚本运行时查错1.什么是脚本什么是脚本脚本是一种简单的编程语言,用于快速开发简单的控制流程,脚本文件脚本是一
2、种简单的编程语言,用于快速开发简单的控制流程,脚本文件也是一种可执行文件,但是与普通的也是一种可执行文件,但是与普通的exe可执行文件不同的是,它内部不是经可执行文件不同的是,它内部不是经过编译的二进制码,而是可以用记事本查看的文本,它执行时需要由脚本引过编译的二进制码,而是可以用记事本查看的文本,它执行时需要由脚本引擎边解释边执行,因此,脚本文件的执行速度比擎边解释边执行,因此,脚本文件的执行速度比exe文件要低很多。为了简单,文件要低很多。为了简单,脚本不支持复杂的数据结构和运算,只能实现一些简单的逻辑和运算。一个脚本不支持复杂的数据结构和运算,只能实现一些简单的逻辑和运算。一个脚本的例子
3、如下:脚本的例子如下:if a=b then c=d;这段脚本的含义就是如果变量这段脚本的含义就是如果变量a等于变量等于变量b,则让变量,则让变量c等于变量等于变量d的值。的值。2.脚本的功能和性能脚本的功能和性能脚本虽然简单,但是也可以完成大多数的工业控制所需的功能,例如条脚本虽然简单,但是也可以完成大多数的工业控制所需的功能,例如条件判断,循环执行某段代码,数学运算,字符串运算,甚至可以操作数据库件判断,循环执行某段代码,数学运算,字符串运算,甚至可以操作数据库和调用其他可执行程序(和调用其他可执行程序(*.exe)来完成更加复杂的功能。)来完成更加复杂的功能。WebAccess中的脚中的
4、脚本还可以执行本还可以执行WebAccess特有的指令,来完成取特有的指令,来完成取WebAccess点值和给点值和给WebAccess点赋值的操作。点赋值的操作。如上一节所述,因为脚本文件是由脚本引擎边解释边执行,因此运行速如上一节所述,因为脚本文件是由脚本引擎边解释边执行,因此运行速度上会和度上会和exe文件有较大差距,根据电脑硬件配置不同,脚本执行的速度在每文件有较大差距,根据电脑硬件配置不同,脚本执行的速度在每秒几十行到二三百行之间。秒几十行到二三百行之间。因此,建议写脚本时,内容最好在因此,建议写脚本时,内容最好在100行以内。行以内。3.如何进入脚本编辑器如何进入脚本编辑器1.在监
5、控节点属性页面点击在监控节点属性页面点击“开始绘图开始绘图”链接,进入绘图页面,然后在图上链接,进入绘图页面,然后在图上点鼠标右键,在弹出菜单中选择点鼠标右键,在弹出菜单中选择“原文文件原文文件”命令,就会弹出命令,就会弹出“原文设定原文设定”对话框对话框2.在在“原文设定原文设定”对话框中,可以选择脚本类型,中间那个大对话框中,可以选择脚本类型,中间那个大的输入窗口就是编辑脚本的地方,右边列出了脚本运行关键字、可用的输入窗口就是编辑脚本的地方,右边列出了脚本运行关键字、可用函数、已建立的点的列表,运算符等,双击其中的条目就可以自动把函数、已建立的点的列表,运算符等,双击其中的条目就可以自动把
6、所选内容插入到脚本中所选内容插入到脚本中3.我们开始用我们开始用TCL脚本编写空调控制脚本:在该脚本中我们使用几个脚本编写空调控制脚本:在该脚本中我们使用几个本地点来控制风机运转动画本地点来控制风机运转动画 和空气流动动画和空气流动动画4.我们先熟悉以下在脚本中使用的我们先熟悉以下在脚本中使用的WebAccess的指令:的指令:a.SETVAL:给指定点赋值给指定点赋值 语法:语法:SETVAL TagName=Value 其中:其中:TagName:点名称点名称 Value:点值:点值 注意:等号两边不能有空格,因为注意:等号两边不能有空格,因为TagName=Value是是 作为一个参数作
7、为一个参数传给传给SETVAL指令的,若其中有空格则指令的,若其中有空格则 会被当成由空格分割的多个参会被当成由空格分割的多个参数,因而导致语法错误。数,因而导致语法错误。b.GETVAL:取指定点的当前值取指定点的当前值 语法:语法:GETVAL TagName 其中:其中:TagName:点名称点名称 注意:该指令返回的结果是字符串格式,若在注意:该指令返回的结果是字符串格式,若在VB脚本和脚本和Java脚本脚本 中使用,则必须进行合适的类型转换。中使用,则必须进行合适的类型转换。c.%LOOPPLUS:令指定点循环累加,加到最高输出值时自动返回:令指定点循环累加,加到最高输出值时自动返回
8、 最低输出值重新累加。最低输出值重新累加。语法:语法:SETVAL TagName=%LOOPPLUS n 其中:其中:TagName:点名称:点名称 n:累加量:累加量d.%ROTATEPLUS:令指定点循环累加,加到最高输出值时自动重新令指定点循环累加,加到最高输出值时自动重新累加,该指令与累加,该指令与LOOPPLUS的区别在于该指令更适合做旋转动画,的区别在于该指令更适合做旋转动画,因为该指令在因为该指令在TagName加到最高输出值时,不一定返回最低输出值,加到最高输出值时,不一定返回最低输出值,而是在最低输出值的基础上加上累加量未加完的部分,如:当前值而是在最低输出值的基础上加上累
9、加量未加完的部分,如:当前值为为98,最高输出值为,最高输出值为100,最低输出值为,最低输出值为0,累加量为,累加量为5,则下次累加,则下次累加的结果不是的结果不是0,而是,而是3。语法:语法:SETVAL TagName=%ROTATEPLUS n 参数:同参数:同%LOOPPLUSe.%LOOPMINUS:令指定点循环减小令指定点循环减小 语法:语法:SETVAL TagName=%LOOPMINUS n 参数:同参数:同%LOOPPLUSf.%ROTATEMINUS:令指定点循环减小,与:令指定点循环减小,与%LOOPMINUS的区别的区别同同%ROTATEPLUS与与%LOOPPLU
10、S 语法:语法:SETVAL TagName=%ROTATEMINUS n 参数:同参数:同%LOOPPLUSg.%PLUS:将指定点加上一个值,作用类似与:将指定点加上一个值,作用类似与 SETVAL TagName=GETVAL TagName+n 语法:语法:SETVAL TagName=%PLUS n 参数:同参数:同%LOOPPLUSh.%MINUS:将指定点减小一个值,作用类似与:将指定点减小一个值,作用类似与 SETVAL TagName=GETVAL TagName-n 语法:语法:SETVAL TagName=%MINUS n 参数:同参数:同%LOOPPLUS5.现在用脚本
11、让风机旋转起来:现在用脚本让风机旋转起来:和风机旋转动画对应的点是本地点和风机旋转动画对应的点是本地点“c”,风机旋转的角度对,风机旋转的角度对应与应与c的值,为了让风机转动起来,我们必须让的值,为了让风机转动起来,我们必须让c的值不断的累的值不断的累加,并到最高量程的时候自动重新开始,我们使用如下指令:加,并到最高量程的时候自动重新开始,我们使用如下指令:SETVAL c=%ROTATEPLUS 8其中其中8是自定的一个值,这个值越小,风机转动的越慢,反之是自定的一个值,这个值越小,风机转动的越慢,反之越快,但这个值也不能太大,否则风机会看起来在反转。越快,但这个值也不能太大,否则风机会看起
12、来在反转。6.现在我们用移动动画模拟空气在风道中流动,我们让表示空气流现在我们用移动动画模拟空气在风道中流动,我们让表示空气流动的点动的点Air1到到Air6按照不同的速度和初始值循环累加,指令如按照不同的速度和初始值循环累加,指令如下:下:SETVAL Air1=%LOOPPLUS 0.4SETVAL Air2=%LOOPPLUS 0.4SETVAL Air3=%LOOPPLUS 0.4 SETVAL Air4=%LOOPPLUS 0.8 SETVAL Air5=%LOOPPLUS 0.8 SETVAL Air6=%LOOPPLUS 0.57.TCL脚本的内部变量:脚本的内部变量:TCL脚本
13、中可以定义脚本变量,用来暂存某个中间值,语法为:脚本中可以定义脚本变量,用来暂存某个中间值,语法为:定义变量:定义变量:var a给变量赋值给变量赋值5:set a 5使用变量:使用变量:SETVAL TagName=$a在使用变量时,要在变量前面加在使用变量时,要在变量前面加$符号,否则该变量名字将被符号,否则该变量名字将被当成字符串处理,变成了:当成字符串处理,变成了:SETVAL TagName=“a”8.TCL脚本的判断语句:脚本的判断语句:格式:格式:if then 或或if then else 或或if then elseif then else 需要注意的地方是需要注意的地方是
14、if 和和 之间要有一个空格,之间要有一个空格,then 两边要各有两边要各有一个空格,一个空格,then 要和要和if以及后面的以及后面的 写在同一行,写在同一行,else和和elseif 两边也要各有一个空格,两边也要各有一个空格,else也要和后面的也要和后面的 在同一行在同一行,若有若有elseif,则,则 elseif也要和后面的也要和后面的then在同一行。在同一行。总之,总之,TCL脚本对空格和换行是很敏感的,若用的不对,就会脚本对空格和换行是很敏感的,若用的不对,就会导致语法错误,当您有时候怎么也找不到错误原因时,很可能导致语法错误,当您有时候怎么也找不到错误原因时,很可能就是
15、某处少了一个空格就是某处少了一个空格9.TCL脚本脚本DebugTCL脚本可以在运行期间捕捉错误,语法如下:脚本可以在运行期间捕捉错误,语法如下:catch.err把要捕捉错误的语句放在把要捕捉错误的语句放在catch的的内,若发生错误,则会跳出内,若发生错误,则会跳出catch语句,并把错误信息放到变量语句,并把错误信息放到变量err中,可以用中,可以用BWSPOOL rn$err指令把错误信息输出到指令把错误信息输出到Bwspool.exe中,其中,其中中rn表示回车换行。表示回车换行。10.TCL脚本的注释脚本的注释TCL的注释是已的注释是已#开头的字符串,可以跟在语句后面,也可以开头的
16、字符串,可以跟在语句后面,也可以单独占一行,如:单独占一行,如:SETVAL NewAirValve_Value=%MINUS 3#风机停止时风机停止时关闭新风阀关闭新风阀#=室内湿度控制室内湿度控制=红色部分为注释红色部分为注释11.我们暂时先讲这些常用的指令,其他指令的说明请参考用户文档。我们暂时先讲这些常用的指令,其他指令的说明请参考用户文档。12.完成的脚本:完成的脚本:catch#BWSPOOL rn101010 rn if GETVAL GSwitch=1 then#1为启动 SETVAL c=%ROTATEPLUS 8 SETVAL Air1=%LOOPPLUS 0.4 SETV
17、AL Air2=%LOOPPLUS 0.4 SETVAL Air3=%LOOPPLUS 0.4 SETVAL Air4=%LOOPPLUS 0.8 SETVAL Air5=%LOOPPLUS 0.8 SETVAL Air6=%LOOPPLUS 0.5#BWSPOOL rn303030rn#=冬天室内温度控制=if GETVAL AirPump_State=1 then if GETVAL NewAirTemp_Value=GETVAL RoomTemp_Set then if GETVAL WaterValve_Value=expr 60+rand()*13-6 then SETVAL Wat
18、erValve_Value=%PLUS 3 if GETVAL NewAirValve_Value=expr 50+rand()*5-2 then SETVAL NewAirValve_Value=%PLUS 3 if GETVAL CAirValve_Value=expr 20+rand()*5-2 then SETVAL WaterValve_Value=%MINUS 3 if GETVAL NewAirValve_Value=expr 40+rand()*3-1 then SETVAL NewAirValve_Value=%MINUS 3 if GETVAL CAirValve_Valu
19、e=expr 30+rand()*3-1 then SETVAL CAirValve_Value=%MINUS 3 SETVAL NewAirTemp_Value=expr GETVAL NewAirTemp_Value-1+rand()*2-0.5 SETVAL RoomTemp_Value=expr GETVAL NewAirTemp_Value+rand()*2-0.5 else SETVAL NewAirValve_Value=%MINUS 3#风机停止时关闭新风阀 SETVAL CAirValve_Value=%MINUS 3#风机停止时关闭回风阀 SETVAL WaterValve
20、_Value=%MINUS 3#风机停止时关闭水阀 SETVAL Humidifier_State=0 if GETVAL NewAirValve_Value1 then SETVAL IsOrNotRunning=0#0为停止#=室内湿度控制=if GETVAL Humidifier_State=1 then#启动状态 if GETVAL NewAirHum_Value10 then SETVAL NewAirHum_Value=expr GETVAL NewAirHum_Value-1+rand()*2-0.5 if GETVAL RoomHum_Value20 then SETVAL R
21、oomHum_Value=expr GETVAL RoomHum_Value-1+rand()*2-0.5#BWSPOOL rn505050rn errBWSPOOL rn$err4.4.VBVB脚本和脚本和JavaJava脚本脚本在在VB脚本和脚本和Java脚本中,脚本中,WebAccess指令的格式和前面提到的相同,指令的格式和前面提到的相同,但是这些指令的参数和返回值都是字符串格式,所以用到的时候,要但是这些指令的参数和返回值都是字符串格式,所以用到的时候,要用用cstring()、cInt()、cdbl()之类的函数进行转换。之类的函数进行转换。VB脚本和脚本和Java脚本的语法请参考脚本的语法请参考VB脚本和脚本和Java脚本的用户文档。脚本的用户文档。VB脚本的用户文档请参考:脚本的用户文档请参考:JAVA脚本的用户文档请参考:脚本的用户文档请参考:http:/ You.