![Advantech-WebAccess培训-08第八章-脚本课件_第1页](http://file4.renrendoc.com/view/02a18fcb3a50b60de13c563832a7cc67/02a18fcb3a50b60de13c563832a7cc671.gif)
![Advantech-WebAccess培训-08第八章-脚本课件_第2页](http://file4.renrendoc.com/view/02a18fcb3a50b60de13c563832a7cc67/02a18fcb3a50b60de13c563832a7cc672.gif)
![Advantech-WebAccess培训-08第八章-脚本课件_第3页](http://file4.renrendoc.com/view/02a18fcb3a50b60de13c563832a7cc67/02a18fcb3a50b60de13c563832a7cc673.gif)
![Advantech-WebAccess培训-08第八章-脚本课件_第4页](http://file4.renrendoc.com/view/02a18fcb3a50b60de13c563832a7cc67/02a18fcb3a50b60de13c563832a7cc674.gif)
![Advantech-WebAccess培训-08第八章-脚本课件_第5页](http://file4.renrendoc.com/view/02a18fcb3a50b60de13c563832a7cc67/02a18fcb3a50b60de13c563832a7cc675.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2007年6月Advantech
WebAccess
培训教程
第八章脚本2007年6月AdvantechWebAccess培训教培训目标这一章节将向您介绍WebAccess脚本功能。培训结束时您将掌握以下知识: 了解什么是脚本,脚本的功能、性能等 编写TCL脚本 编写VB脚本 编写JAVA脚本 用脚本控制动画 在脚本运行时查错培训目标这一章节将向您介绍WebAccess脚本功能。什么是脚本脚本是一种简单的编程语言,用于快速开发简单的控制流程,脚本文件也是一种可执行文件,但是与普通的exe可执行文件不同的是,它内部不是经过编译的二进制码,而是可以用记事本查看的文本,它执行时需要由脚本引擎边解释边执行,因此,脚本文件的执行速度比exe文件要低很多。为了简单,脚本不支持复杂的数据结构和运算,只能实现一些简单的逻辑和运算。一个脚本的例子如下:if{a==b}then{ c=d;}这段脚本的含义就是如果变量a等于变量b,则让变量c等于变量d的值。什么是脚本脚本是一种简单的编程语言,用于快速开发简单的控制流脚本的功能和性能脚本虽然简单,但是也可以完成大多数的工业控制所需的功能,例如条件判断,循环执行某段代码,数学运算,字符串运算,甚至可以操作数据库和调用其他可执行程序(*.exe)来完成更加复杂的功能。WebAccess中的脚本还可以执行WebAccess特有的指令,来完成取WebAccess点值和给WebAccess点赋值的操作。如上一节所述,因为脚本文件是由脚本引擎边解释边执行,因此运行速度上会和exe文件有较大差距,根据电脑硬件配置不同,脚本执行的速度在每秒几十行到二三百行之间。因此,建议写脚本时,内容最好在100行以内。脚本的功能和性能脚本虽然简单,但是也可以完成大多数的工业控制如何进入脚本编辑器在监控节点属性页面点击“开始绘图”链接,进入绘图页面,然后在图上点鼠标右键,在弹出菜单中选择“原文文件”命令,就会弹出“原文设定”对话框如何进入脚本编辑器在监控节点属性页面点击“开始绘图”链接,进2. 在“原文设定”对话框中,可以选择脚本类型,中间那个大的输入窗口就是编辑脚本的地方,右边列出了脚本运行关键字、可用函数、已建立的点的列表,运算符等,双击其中的条目就可以自动把所选内容插入到脚本中2. 在“原文设定”对话框中,可以选择脚本类型,中间那个大3.我们开始用TCL脚本编写空调控制脚本:在该脚本中我们使用几个本地点来控制风机运转动画和空气流动动画4.我们先熟悉以下在脚本中使用的WebAccess的指令:
a.SETVAL:给指定点赋值语法:SETVALTagName=Value
其中:TagName:点名称
Value:点值注意:等号两边不能有空格,因为TagName=Value是作为一个参数传给SETVAL指令的,若其中有空格则会被当成由空格分割的多个参数,因而导致语法错误。3.我们开始用TCL脚本编写空调控制脚本:在该脚本中我们使b.GETVAL:取指定点的当前值语法:GETVALTagName
其中:TagName:点名称注意:该指令返回的结果是字符串格式,若在VB脚本和Java脚本中使用,则必须进行合适的类型转换。c.%LOOPPLUS:令指定点循环累加,加到最高输出值时自动返回最低输出值重新累加。
语法:
SETVAL{TagName=%LOOPPLUSn}其中:
TagName:点名称n:累加量b.GETVAL:取指定点的当前值d.%ROTATEPLUS:令指定点循环累加,加到最高输出值时自动重新累加,该指令与LOOPPLUS的区别在于该指令更适合做旋转动画,因为该指令在TagName加到最高输出值时,不一定返回最低输出值,而是在最低输出值的基础上加上累加量未加完的部分,如:当前值为98,最高输出值为100,最低输出值为0,累加量为5,则下次累加的结果不是0,而是3。语法:
SETVAL{TagName=%ROTATEPLUSn}参数:同%LOOPPLUSe.%LOOPMINUS:令指定点循环减小
语法:
SETVAL{TagName=%LOOPMINUSn}参数:同%LOOPPLUSd.%ROTATEPLUS:令指定点循环累加,加到最高输f.%ROTATEMINUS:令指定点循环减小,与%LOOPMINUS的区别同%ROTATEPLUS与%LOOPPLUS
语法:
SETVAL{TagName=%ROTATEMINUSn}参数:同%LOOPPLUSg.%PLUS:将指定点加上一个值,作用类似与SETVALTagName=[[GETVALTagName]+n]
语法:
SETVAL{TagName=%PLUSn}参数:同%LOOPPLUSh.%MINUS:将指定点减小一个值,作用类似与SETVALTagName=[[GETVALTagName]-n]f.%ROTATEMINUS:令指定点循环减小,与%LOO语法:
SETVAL{TagName=%MINUSn}参数:同%LOOPPLUS语法:5.现在用脚本让风机旋转起来:和风机旋转动画对应的点是本地点“c”,风机旋转的角度对应与c的值,为了让风机转动起来,我们必须让c的值不断的累加,并到最高量程的时候自动重新开始,我们使用如下指令:
SETVAL{c=%ROTATEPLUS8} 其中8是自定的一个值,这个值越小,风机转动的越慢,反之越快,但这个值也不能太大,否则风机会看起来在反转。5.现在用脚本让风机旋转起来:6.现在我们用移动动画模拟空气在风道中流动,我们让表示空气流动的点Air1到Air6按照不同的速度和初始值循环累加,指令如下:
SETVAL{Air1=%LOOPPLUS0.4} SETVAL{Air2=%LOOPPLUS0.4} SETVAL{Air3=%LOOPPLUS0.4} SETVAL{Air4=%LOOPPLUS0.8} SETVAL{Air5=%LOOPPLUS0.8} SETVAL{Air6=%LOOPPLUS0.5}6.现在我们用移动动画模拟空气在风道中流动,我们让表示空气7.TCL脚本的内部变量:
TCL脚本中可以定义脚本变量,用来暂存某个中间值,语法为: 定义变量:
vara
给变量赋值5:
seta5
使用变量:
SETVALTagName=$a
在使用变量时,要在变量前面加$符号,否则该变量名字将被当成字符串处理,变成了:SETVALTagName=“a”7.TCL脚本的内部变量:8.TCL脚本的判断语句: 格式: if{}then{ }
或
if{}then{ }else{ }
或
if{}then{ }elseif{}then{ }else{ }8.TCL脚本的判断语句:
需要注意的地方是if和{之间要有一个空格,then两边要各有一个空格,then要和if以及后面的{写在同一行,else和elseif两边也要各有一个空格,else也要和后面的{在同一行,若有elseif,则elseif也要和后面的then在同一行。 总之,TCL脚本对空格和换行是很敏感的,若用的不对,就会导致语法错误,当您有时候怎么也找不到错误原因时,很可能就是某处少了一个空格 需要注意的地方是if和{之间要有一个空格,then9.TCL脚本Debug TCL脚本可以在运行期间捕捉错误,语法如下:
catch{ ...... }err
把要捕捉错误的语句放在catch的{}内,若发生错误,则会跳出catch语句,并把错误信息放到变量err中,可以用 BWSPOOL\r\n$err指令把错误信息输出到Bwspool.exe中,其中\r\n表示回车换行。9.TCL脚本Debug10.TCL脚本的注释 TCL的注释是已#开头的字符串,可以跟在语句后面,也可以单独占一行,如:
SETVAL{NewAirValve_Value=%MINUS3}#风机停止时关闭新风阀
#==================室内湿度控制================= 红色部分为注释11.我们暂时先讲这些常用的指令,其他指令的说明请参考用户文档。10.TCL脚本的注释12.完成的脚本:catch{#BWSPOOL\r\n101010\r\nif{[GETVALGSwitch]==1}then{#1为启动
SETVAL{c=%ROTATEPLUS8}SETVAL{Air1=%LOOPPLUS0.4}SETVAL{Air2=%LOOPPLUS0.4}SETVAL{Air3=%LOOPPLUS0.4}SETVAL{Air4=%LOOPPLUS0.8}SETVAL{Air5=%LOOPPLUS0.8}SETVAL{Air6=%LOOPPLUS0.5}#BWSPOOL\r\n303030\r\n#==================冬天室内温度控制====================if{[GETVALAirPump_State]==1}then{if{[GETVALNewAirTemp_Value]<=[GETVALRoomTemp_Set]}then{if{[GETVALWaterValve_Value]<=[expr60+rand()*13-6]}then{SETVAL{WaterValve_Value=%PLUS3}}if{[GETVALNewAirValve_Value]<=[expr50+rand()*5-2]}then{SETVAL{NewAirValve_Value=%PLUS3}}12.完成的脚本:catch{if{[GETVALCAirValve_Value]<=[expr80+rand()*5-2]}then{SETVAL{CAirValve_Value=%PLUS3}}SETVALNewAirTemp_Value=[expr[GETVALNewAirTemp_Value]+1+rand()*2-0.5]}else{if{[GETVALWaterValve_Value]>=[expr20+rand()*5-2]}then{SETVAL{WaterValve_Value=%MINUS3}}if{[GETVALNewAirValve_Value]>=[expr40+rand()*3-1]}then{SETVAL{NewAirValve_Value=%MINUS3}}if{[GETVALCAirValve_Value]>=[expr30+rand()*3-1]}then{SETVAL{CAirValve_Value=%MINUS3}}SETVALNewAirTemp_Value=[expr[GETVALNewAirTemp_Value]-1+rand()*2-0.5]}SETVALRoomTemp_Value=[expr[GETVALNewAirTemp_Value]+rand()*2-0.5]}else{
SETVAL{NewAirValve_Value=%MINUS3}#风机停止时关闭新风阀
SETVAL{CAirValve_Value=%MINUS3}#风机停止时关闭回风阀
SETVAL{WaterValve_Value=%MINUS3}#风机停止时关闭水阀
SETVALHumidifier_State=0if{[GETVALCAirValve_if{[GETVALNewAirValve_Value]<1}then{SETVALIsOrNotRunning=0#0为停止
}}#==================室内湿度控制=================if{[GETVALHumidifier_State]==1}then{#启动状态
if{[GETVALNewAirHum_Value]<[GETVALRoomHum_Set]}then{#新风湿度小于设定湿度
SETVALNewAirHum_Value=[expr[GETVALNewAirHum_Value]+1+rand()*2-0.5]}else{SETVALNewAirHum_Value=[expr[GETVALNewAirHum_Value]-1+rand()*2-0.5]}SETVALRoomHum_Value=[expr[GETVALNewAirHum_Value]+rand()*2-0.5]}else{if{[GETVALNewAirHum_Value]>10}then{SETVALNewAirHum_Value=[expr[GETVALNewAirHum_Value]-1+rand()*2-0.5]}if{[GETVALRoomHum_Value]>20}then{SETVALRoomHum_Value=[expr[GETVALRoomHum_Value]-1+rand()*2-0.5]}}}#BWSPOOL\r\n505050\r\n}errBWSPOOL\r\n$errif{[GETVALNewAirValveVB脚本和Java脚本在VB脚本和Java脚本中,WebAccess指令的格式和前面提到的相同,但是这些指令的参数和返回值都是字符串格式,所以用到的时候,要用cstring()、cInt()、cdbl()之类的函数进行转换。VB脚本和Java脚本的语法请参考VB脚本和Java脚本的用户文档。
VB脚本的用户文档请参考:/library/default.asp?url=/library/en-us/script56/html/0a8270d7-7d8f-4368-b2a7-065acb52fc54.aspVB脚本和Java脚本在VB脚本和Java脚本中,WebAc JAVA脚本的用户文档请参考:
/en-us/library/hbxc2t98(vs.71).aspxPC版WebAccess可以执行TCL脚本、VB脚本和Java脚本,CE版WebAccess仅可以执行TCL脚本,用CE版WebAccess的需要注意这一点! JAVA脚本的用户文档请参考:ThankYou.ThankYou.2007年6月Advantech
WebAccess
培训教程
第八章脚本2007年6月AdvantechWebAccess培训教培训目标这一章节将向您介绍WebAccess脚本功能。培训结束时您将掌握以下知识: 了解什么是脚本,脚本的功能、性能等 编写TCL脚本 编写VB脚本 编写JAVA脚本 用脚本控制动画 在脚本运行时查错培训目标这一章节将向您介绍WebAccess脚本功能。什么是脚本脚本是一种简单的编程语言,用于快速开发简单的控制流程,脚本文件也是一种可执行文件,但是与普通的exe可执行文件不同的是,它内部不是经过编译的二进制码,而是可以用记事本查看的文本,它执行时需要由脚本引擎边解释边执行,因此,脚本文件的执行速度比exe文件要低很多。为了简单,脚本不支持复杂的数据结构和运算,只能实现一些简单的逻辑和运算。一个脚本的例子如下:if{a==b}then{ c=d;}这段脚本的含义就是如果变量a等于变量b,则让变量c等于变量d的值。什么是脚本脚本是一种简单的编程语言,用于快速开发简单的控制流脚本的功能和性能脚本虽然简单,但是也可以完成大多数的工业控制所需的功能,例如条件判断,循环执行某段代码,数学运算,字符串运算,甚至可以操作数据库和调用其他可执行程序(*.exe)来完成更加复杂的功能。WebAccess中的脚本还可以执行WebAccess特有的指令,来完成取WebAccess点值和给WebAccess点赋值的操作。如上一节所述,因为脚本文件是由脚本引擎边解释边执行,因此运行速度上会和exe文件有较大差距,根据电脑硬件配置不同,脚本执行的速度在每秒几十行到二三百行之间。因此,建议写脚本时,内容最好在100行以内。脚本的功能和性能脚本虽然简单,但是也可以完成大多数的工业控制如何进入脚本编辑器在监控节点属性页面点击“开始绘图”链接,进入绘图页面,然后在图上点鼠标右键,在弹出菜单中选择“原文文件”命令,就会弹出“原文设定”对话框如何进入脚本编辑器在监控节点属性页面点击“开始绘图”链接,进2. 在“原文设定”对话框中,可以选择脚本类型,中间那个大的输入窗口就是编辑脚本的地方,右边列出了脚本运行关键字、可用函数、已建立的点的列表,运算符等,双击其中的条目就可以自动把所选内容插入到脚本中2. 在“原文设定”对话框中,可以选择脚本类型,中间那个大3.我们开始用TCL脚本编写空调控制脚本:在该脚本中我们使用几个本地点来控制风机运转动画和空气流动动画4.我们先熟悉以下在脚本中使用的WebAccess的指令:
a.SETVAL:给指定点赋值语法:SETVALTagName=Value
其中:TagName:点名称
Value:点值注意:等号两边不能有空格,因为TagName=Value是作为一个参数传给SETVAL指令的,若其中有空格则会被当成由空格分割的多个参数,因而导致语法错误。3.我们开始用TCL脚本编写空调控制脚本:在该脚本中我们使b.GETVAL:取指定点的当前值语法:GETVALTagName
其中:TagName:点名称注意:该指令返回的结果是字符串格式,若在VB脚本和Java脚本中使用,则必须进行合适的类型转换。c.%LOOPPLUS:令指定点循环累加,加到最高输出值时自动返回最低输出值重新累加。
语法:
SETVAL{TagName=%LOOPPLUSn}其中:
TagName:点名称n:累加量b.GETVAL:取指定点的当前值d.%ROTATEPLUS:令指定点循环累加,加到最高输出值时自动重新累加,该指令与LOOPPLUS的区别在于该指令更适合做旋转动画,因为该指令在TagName加到最高输出值时,不一定返回最低输出值,而是在最低输出值的基础上加上累加量未加完的部分,如:当前值为98,最高输出值为100,最低输出值为0,累加量为5,则下次累加的结果不是0,而是3。语法:
SETVAL{TagName=%ROTATEPLUSn}参数:同%LOOPPLUSe.%LOOPMINUS:令指定点循环减小
语法:
SETVAL{TagName=%LOOPMINUSn}参数:同%LOOPPLUSd.%ROTATEPLUS:令指定点循环累加,加到最高输f.%ROTATEMINUS:令指定点循环减小,与%LOOPMINUS的区别同%ROTATEPLUS与%LOOPPLUS
语法:
SETVAL{TagName=%ROTATEMINUSn}参数:同%LOOPPLUSg.%PLUS:将指定点加上一个值,作用类似与SETVALTagName=[[GETVALTagName]+n]
语法:
SETVAL{TagName=%PLUSn}参数:同%LOOPPLUSh.%MINUS:将指定点减小一个值,作用类似与SETVALTagName=[[GETVALTagName]-n]f.%ROTATEMINUS:令指定点循环减小,与%LOO语法:
SETVAL{TagName=%MINUSn}参数:同%LOOPPLUS语法:5.现在用脚本让风机旋转起来:和风机旋转动画对应的点是本地点“c”,风机旋转的角度对应与c的值,为了让风机转动起来,我们必须让c的值不断的累加,并到最高量程的时候自动重新开始,我们使用如下指令:
SETVAL{c=%ROTATEPLUS8} 其中8是自定的一个值,这个值越小,风机转动的越慢,反之越快,但这个值也不能太大,否则风机会看起来在反转。5.现在用脚本让风机旋转起来:6.现在我们用移动动画模拟空气在风道中流动,我们让表示空气流动的点Air1到Air6按照不同的速度和初始值循环累加,指令如下:
SETVAL{Air1=%LOOPPLUS0.4} SETVAL{Air2=%LOOPPLUS0.4} SETVAL{Air3=%LOOPPLUS0.4} SETVAL{Air4=%LOOPPLUS0.8} SETVAL{Air5=%LOOPPLUS0.8} SETVAL{Air6=%LOOPPLUS0.5}6.现在我们用移动动画模拟空气在风道中流动,我们让表示空气7.TCL脚本的内部变量:
TCL脚本中可以定义脚本变量,用来暂存某个中间值,语法为: 定义变量:
vara
给变量赋值5:
seta5
使用变量:
SETVALTagName=$a
在使用变量时,要在变量前面加$符号,否则该变量名字将被当成字符串处理,变成了:SETVALTagName=“a”7.TCL脚本的内部变量:8.TCL脚本的判断语句: 格式: if{}then{ }
或
if{}then{ }else{ }
或
if{}then{ }elseif{}then{ }else{ }8.TCL脚本的判断语句:
需要注意的地方是if和{之间要有一个空格,then两边要各有一个空格,then要和if以及后面的{写在同一行,else和elseif两边也要各有一个空格,else也要和后面的{在同一行,若有elseif,则elseif也要和后面的then在同一行。 总之,TCL脚本对空格和换行是很敏感的,若用的不对,就会导致语法错误,当您有时候怎么也找不到错误原因时,很可能就是某处少了一个空格 需要注意的地方是if和{之间要有一个空格,then9.TCL脚本Debug TCL脚本可以在运行期间捕捉错误,语法如下:
catch{ ...... }err
把要捕捉错误的语句放在catch的{}内,若发生错误,则会跳出catch语句,并把错误信息放到变量err中,可以用 BWSPOOL\r\n$err指令把错误信息输出到Bwspool.exe中,其中\r\n表示回车换行。9.TCL脚本Debug10.TCL脚本的注释 TCL的注释是已#开头的字符串,可以跟在语句后面,也可以单独占一行,如:
SETVAL{NewAirValve_Value=%MINUS3}#风机停止时关闭新风阀
#==================室内湿度控制================= 红色部分为注释11.我们暂时先讲这些常用的指令,其他指令的说明请参考用户文档。10.TCL脚本的注释12.完成的脚本:catch{#BWSPOOL\r\n101010\r\nif{[GETVALGSwitch]==1}then{#1为启动
SETVAL{c=%ROTATEPLUS8}SETVAL{Air1=%LOOPPLUS0.4}SETVAL{Air2=%LOOPPLUS0.4}SETVAL{Air3=%LOOPPLUS0.4}SETVAL{Air4=%LOOPPLUS0.8}SETVAL{Air5=%LOOPPLUS0.8}SETVAL{Air6=%LOOPPLUS0.5}#BWSPOOL\r\n303030\r\n#==================冬天室内温度控制====================if{[GETVALAirPump_State]==1}then{if{[GETVALNewAirTemp_Value]<=[GETVALRoomTemp_Set]}then{if{[GETVALWaterValve_Value]<=[expr60+rand()*13-6]}then{SETVAL{WaterValve_Value=%PLUS3}}if{[GETVALNewAirValve_Value]<=[expr50+rand()*5-2]}then{SETVAL{NewAirValve_Value=%PLUS3}}12.完成的脚本:catch{if{[GETVALCAirValve_Value]<=[expr80+rand()*5-2]}then{SETVAL{CAirValve_Value=%PLUS3}}SETVALNewAirTemp_Value=[expr[GETVALNewAirTemp_Value]+1+rand()*2-0.5]}else{if{[GETVALWaterValve_Value]>=[expr20+rand()*5-2]}then{SETVAL{WaterValve_Value=%MINUS3}}if{[GETVALNewAirValve_Value]>=[expr40+rand()*3-1]}then{SETVAL{NewAirValve_Value=%MINUS3}}if{[GETVALCAirValve_Value]>=[expr30+rand()*3-1]}then{SETVAL{CAirValve_Value=%MINUS3}}SETVALNewAirTemp_Value=[expr[GETVALNewAirTemp_Value]-1+rand()*2-0.5]}SETVALRoomTemp_Value=[expr[GETVALNewAirTemp_Value]+rand()*2-0.5]}else{
SETVAL{NewAirValve_Value=%MINUS3}#风机停止时关闭新风阀
SETVAL{CAirValve_Value=%MINUS3}#风机停止时关闭回风阀
SETVAL{WaterValve_Value=%MINUS3}#风机停止时关闭水阀
SETVALHumidifier_State=0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论