WinCC VBScript教程一
(2010-05-01 08:01:04)
转载
标签winccvbscritp
教程it
本文内容是基于WinCC V6.2中文版的文中脚本程序均在WinCC V6.2中文版测试通过。
WinCC作为西门子公司的监控组态软件具有非常强的的功能和很好的系统稳定性。本系列教程主要讨论WinCC中的VBScript脚本系统在实际开发中的应用。
WinCC提供了丰富完整、功能强大的脚本编程。主要分为C脚本、VBS脚本和VBA三种具有不同功能、及应用环境的脚本语言。C脚本提供了访问各种Win32 API的功能通过对不同的Win32 API的访问可以使用Window s平台及该平台上各种应用的功能。VBS脚本者为开发者提供了一种易用和快速开发的脚本语言。VBA提供了对WinCC软件功能扩展的能力。
Visual Basic Scripting Edition是程序开发语言Visual Bas ic家族的最新成员。VB Script是非常易学的。如果您已了解Visual Basic或Visual Basic for Applications就会很快熟悉VBScript。如果您没有学过Visual Bas ic只要学会VBScript就能够使用所有的VisualBasic语言进行程序设计。
本节主要对WinCC脚本、及VB Script进行简单介绍。下节将介绍VB Script的基本语法。
本文转载自 中华工控168网
WinCC VBScript教程二语法
(2010-05-0223:11:25)
转载
标签it
本节主要介绍VBScript语法包括数据类型、变量、常数、过程、编码规则。
VBScript数据类型
VBScript只有一种数据类型称为Var iant。 Variant是一种特殊的数据类型根据使用的方式它可以包含不同类别的信息。因为Var iant是VBS cript中唯一的数据类型所以它也是VBScript中所有函数的返回值的数据类型。
最简单的Var iant可以包含数字或字符串信息。 Var iant用于数字上下文中时作为数字处理用于字符串上下文中时作为字符串处理。这就是说如果使用看起来象是数字的数据则VBScript会假定其为数字并以适用于数字的方式处理。与此类似如果使用的数据只可能是字符串则VBScript将按字符串处理。也可以将数字包含在引号(" ")中使其成为字符串。
Vari ant子类型
除简单数字或字符串以外 Vari ant可以进一步区分数值信息的特定含义。例如使用数值信息表示日期或时间。此类数据在与其他日期或时间数据一起使用时结果也总是表示为日期或时间。从Boolean值到浮点数数值信息是多种多样的。 Variant包含的数值信息类型称为子类型。大多数情况下可将所需的数据放进Var iant中而Variant也会按照最适用于其包含的数据的方式进行操作。
下表显示Var iant包含的数据子类型
子类型
描述
Emp ty
未初始化的Var iant。对于数值变量值为0对于字符串变量值为零长度字符串("")。Null
不包含任何有效数据的Var iant。
Boolean
包含True或F als e。
Byte
包含0到255之间的整数。
Integer
包含-32,768到32,767之间的整数。
Curr enc y
-922,337,203,685,477.5808到922,337,203,685,477.5807。
Long
包含-2,147,483,648到2,147,483,647之间的整数。
Single
包含单精度浮点数负数范围从-3.402823E38到-1.401298E-45正数范围从1.401298E-45到3.402823E38。
Double
包含双精度浮点数负数范围从-1.79769313486232E308到-4.94065645841247E-324正数范围从4.94065645841247E-324到1.79769313486232E308。
Date(Time)
包含表示日期的数字 日期范围从公元100年1月 1 日到公元9999年12月31 日。S tring
包含变长字符串最大长度可为20亿个字符。
Object
包含对象。
Error
包含错误号。
您可以使用转换函数来转换数据的子类型。另外可使用Var Typ e函数返回数据的Var i ant子类型。
VBScript变量
变量是一种使用方便的占位符用于引用计算机内存地址该地址可以存储脚本运行时可更改的程序信息。例如可以创建一个名为Clic kCount的变量来存储用户单击Web页面上某个对象的次数。使用变量并不需要了解变量在计算机内存中的地址只要通过变量名引用变量就可以查看或更改变量的值。在VBScript中只有一个基本数据类型即Variant因此所有变量的数据类型都是Var iant。
声明变量
声明变量的一种方式是使用Dim语句、 Public语句和Private语句在脚本中显式声明变量。例如
Dim DegreesFahrenheit
声明多个变量时使用逗号分隔变量。例如
Dim Top,Bottom,Left,Right
另一种方式是通过直接在脚本中使用变量名这一简单方式隐式声明变量。这通常不是一个好习惯因为这样有时会由于变量名被拼错而导致在运行脚本时出现意外的结果。因此最好使用Option Explicit语句显式声明所有变量并将其作为脚本的第一条语句。
命名规则
变量命名必须遵循VBScript的标准命名规则。变量命名必须遵循
第一个字符必须是字母。
不能包含嵌入的句点。
长度不能超过255个字符。
在被声明的作用域内必须唯一。
变量的作用域与存活期
变量的作用域由声明它的位置决定。如果在过程中声明变量则只有该过程中的代码可以访问或更改变量值此时变量具有局部作用域并被称为过程级变量。如果在过程之外声明变量则该变量可以被脚本中所有过程所识别称为Script级变量具有脚本级作用域。变量存在的时间称为存活期。Script级变量的存活期从被声明的一刻起直到脚本运行结束。对于过程级变量其存活期仅是该过程运行的时间该过程结束后变量随之消失。在执行过程时局部变量是理想的临时存储空间。可以在不同过程中使用同名的局部变量这是因为每个局部变量只被声明它的过程识别。
给变量赋值
创建如下形式的表达式给变量赋值变量在表达式左边要赋的值在表达式右边。例如B=200
标量变量和数组变量
多数情况下只需为声明的变量赋一个值。只包含一个值的变量被称为标量变量。有时候将多个相关值赋给一个变量更为方便 因此可以创建包含一系列值的变量称为数组变量。数组变量和标量变量是以相同的方式声明的唯一的区别是声明数组变量时变量名后面带有括号( )。下例声明了一个包含11个元素的一维数组
Dim A(10)
虽然括号中显示的数字是10但由于在VBScript中所有数组都是基于0的所以这个数组实际上包含11个元素。在基于0的数组中数组元素的数目总是括号中显示的数目加
1 。这种数组被称为固定大小的数组。
在数组中使用索引为数组的每个元素赋值。从0到10将数据赋给数组的元素如下所示A(0)=256 A(1)=324 A(2)=100 . . . A(10)=55
与此类似使用索引可以检索到所需的数组元素的数据。例如
. . . SomeVariable=A(8) . . .
数组并不仅限于一维。数组的维数最大可以为60 尽管大多数人不能理解超过3或4的维数。声明多维数组时用逗号分隔括号中每个表示数组大小的数字。在下例中MyTab le变量是一个有6行和11列的二维数组
Dim MyTable(5, 10)
在二维数组中括号中第一个数字表示行的数目第二个数字表示列的数目。
也可以声明动态数组即在运行脚本时大小发生变化的数组。对数组的最初声明使用Dim语句或ReD im语句。但是对于动态数组括号中不包含任何数字。例如
Dim MyArray() ReDim AnotherArray()
要使用动态数组必须随后使用ReDim确定维数和每一维的大小。在下例中 ReD im将动态数组的初始大小设置为25而后面的ReDim语句将数组的大小重新调整为30 同时使用Preserve关键字在重新调整大小时保留数组的内容。
ReDim MyArray(25) . . . ReDim Preserve MyArray(30)
重新调整动态数组大小的次数是没有任何限制的将数组的大小调小时将会丢失被删除元素的数据。
VBScript常数
常数是具有一定含义的名称用于代替数字或字符串其值从不改变。 VBScript定义了许多内部常数。详细信息请参阅VBScript语言参考。
创建常数
您可以使用Const语句在VBScript中创建用户自定义常数。使用Const语句可以创建名称具有一定含义的字符串型或数值型常数并给它们赋原义值。例如
Const MyString="这是一个字符串。 " Const MyAge=49
请注意字符串文字包含在两个引号(" ")之间。这是区分字符串型常数和数值型常数的最明显的方法。 日期文字和时间文字包含在两个井号(#)之间。例如
Const CutoffDate=#6-1-97#
最好采用一个命名方案以区分常数和变量。这样可以避免在运行脚本时对常数重新赋值。例如可以使用“vb”或“c on”作常数名的前缀或将常数名的所有字母大写。将常数和变量区分开可以在开发复杂的脚本时避免混乱。
VBScript运算符
VBScript有一套完整的运算符包括算术运算符、比较运算符、连接运算符和逻辑运算符。
运算符优先级
当表达式包含多个运算符时将按预定顺序计算每一部分这个顺序被称为运算符优先级。可以使用括号越过这种优先级顺序强制首先计算表达式的某些部分。运算时总是先执行括号中的运算符然后再执行括号外的运算符。但是在括号中仍遵循标准运算符优先级。当表达式包含多种运算符时首先计算算术运算符然后计算比较运算符最后计算逻辑运算符。所有比较运算符的优先级相同即按照从左到右的顺序计算比较运算符。算术运算符和逻辑运算符的优先级如下所示
算术运算符
比较运算符
逻辑运算符
描述
符号
描述
符号
描述
符号
求幂
^
等于
=
逻辑非
Not
负号
-
不等于
<>
逻辑与
And
乘
*
小于
<
逻辑或
Or
除
/
大于
>
逻辑异或
Xor
整除
\
小于等于
<=
逻辑等价
Eqv
求余
Mod
大于等于
>=
逻辑隐含
I mp
加
+
对象引用比较
Is
减
-
字符串连接
&
当乘号与除号同时出现在一个表达式中时按从左到右的顺序计算乘、除运算符。同样当加与减同时出现在一个表达式中时按从左到右的顺序计算加、减运算符。
字符串连接(&)运算符不是算术运算符但是在优先级顺序中它排在所有算术运算符之后和所有比较运算符之前。 Is运算符是对象引用比较运算符。它并不比较对象或对象的值而只是进行检查判断两个对象引用是否引用同一个对象。
条件语句
控制程序执行
使用条件语句和循环语句可以控制脚本的流程。使用条件语句可以编写进行判断和重复操作的VBScript代码。在VBScript中可使用以下条件语句
I f.. .Then. ..Els e语句
Select Case语句
使用If.. .Then. ..Els e进行判断
I f.. .Then. ..Els e语句用于计算条件是否为True或F als e并且根据计算结果指定要运行的语句。通常条件是使用比较运算符对值或变量进行比较的表达式。有关比较运算符的详细信息请参阅比较运算符。 I f.. .Then. ..Els e语句可以按照需要进行嵌套。
条件为True时运行语句
要在条件为True时运行单行语句可使用I f.. .Then.. .Els e语句的单行语法。下例示范了单行语法。请注意此例省略了关键字Els e。
Sub FixDate() Dim myDate myDate=#2/13/95# If myDate<Now Then myDate=Now End Sub
要运行多行代码必须使用多行或块语法。多行或块语法包含End If语句如下所示
Sub AlertUser(value) If value = 0 Then AlertLabel.ForeColor =vbRed AlertLabel.Font.Bold=True AlertLabel.Font.Italic =True End If EndSub
条件为True和F als e时分别运行某些语句
可以使用I f. ..Then.. .Els e语句定义两个可执行语句块条件为True时运行某一语句块条件为F als e时运行另一语句块。
Sub AlertUser(value) If value = 0 Then AlertLabel.ForeColor =vbRed AlertLabel.Font.Bold = True AlertLabel.Font.Italic =True Else AlertLabel.Forecolor = vbBlack AlertLabel.Font.Bold =False AlertLabel.Font.Italic=False End If End Sub
对多个条件进行判断
I f.. .Then. ..Els e语句的一种变形允许您从多个条件中选择 即添加E ls eI f子句以扩充I f. ..Then.. .Els e语句的功能使您可以控制基于多种可能的程序流程。例如
Sub ReportValue(value) If value = 0 Then MsgBox value ElseIf value = 1Then MsgBox value ElseIf value = 2 then Msgboxvalue Else Msgbox"数值超出范围 " End If
可以添加任意多个Els eI f子句以提供多种选择。使用多个Els eI f子句经常会变得很累赘。在多个条件中进行选择的更好方法是使用Select Case语句。
使用Select Case进行判断
Select Case结构提供了If.. .Then. ..ElseIf结构的一个变通形式可以从多个语句块中选择执行其中的一个。 Select Case语句提供的功能与If. ..Then. ..Else语句类似但是可以使代码更加简练易读。
Select Case结构在其开始处使用一个只计算一次的简单测试表达式。表达式的结果将与结构中每个Case的值比较。如果匹配则执行与该Case关联的语句块,示例代码如下Select Case Document.Form1.CardType.Options(SelectedIndex).Text Case"MasterCard" DisplayMCLogo ValidateMCAccount Case"Visa" DisplayVisaLogo ValidateVisaAccount Case "AmericanExpress" DisplayAMEXCOLogo ValidateAMEXCOAccount CaseElse DisplayUnknownImage PromptAgain End Select
请注意Select Case结构只计算开始处的一个表达式只计算一次而If.. .Then. ..ElseIf结构计算每个Els eI f语句的表达式这些表达式可以各不相同。仅当每个Els eI f语句计算的表达式都相同时才可以使用Select Case结构代替If. ..Then.. .ElseIf结构。
使用循环语句
循环用于重复执行一组语句。循环可分为三类一类在条件变为F als e之前重复执行语句一类在条件变为True之前重复执行语句另一类按照指定的次数重复执行语句。在VBScript中可使用下列循环语句
Do. . .Loop 当或直到条件为True时循环。
While. . .Wend 当条件为True时循环。
For. ..Next 指定循环次数使用计数器重复运行语句。
For Each. ..Next对于集合中的每项或数组中的每个元素重复执行一组语句。
使用Do循环
可以使用Do. ..Loop语句多次次数不定运行语句块。当条件为True时或条件变为True之前重复执行语句块。
当条件为True时重复执行语句
While关键字用于检查Do. . .Loop语句中的条件。有两种方式检查条件在进入循环之前检查条件如下面的ChkF ir s tWhile示例或者在循环至少运行完一次之后检查条件如下面的ChkLas tWhil e示例。在ChkF ir s tWhile过程中如果myNum的初始值被设置为9而不是20则永远不会执行循环体中的语句。在ChkLas tWh ile过程中循环体中的语句只会执行一次 因为条件在检查时已经为F als e。
Sub ChkFirstWhile() Dim counter,myNum counter=0 myNum=20 Do WhilemyNum>10 myNum=myNum- 1 c ounter=c ounter+1 Loop MsgBox"循环重复了 "& counter&"次。 " End Sub Sub ChkLastWhile() Dim counter,myNum c ounter=0 myNum=9 Do myNum=myNum- 1 c ounter=counter+ 1 Loop While myNum> 10 MsgBox "循环重复了 "&counter&"次。" End Sub
重复执行语句直到条件变为T rue
Unt il关键字用于检查Do. ..Loop语句中的条件。有两种方式检查条件在进入循环之前检查条件如下面的ChkF ir s tUnt i l示例或者在循环至少运行完一次之后检查条件如下面的ChkLas tUnti l示例。只要条件为F als e就会进行循环。
Sub ChkFirstUntil() Dim counter,myNum counter=0 myNum=20 Do UntilmyNum=10 myNum=myNum- 1 c ounter=c ounter+1 Loop MsgBox"循环重复了 " & counter& "次。 " End Sub Sub ChkLastUntil() Dim counter,myNum c ounter=0 myNum=1 Do myNum=myNum+1 c ounter=counter + 1 Loop Until myNum= 10 MsgBox "循环重复了 "&counter&"次。" End Sub
退出循环
Exit Do语句用于退出Do. . .Loop循环。因为通常只是在某些特殊情况下要退出循环例如要避免死循环所以可在If. ..Then.. .Else语句的True语句块中使用Exit Do语句。如果条件为F als e循环将照常运行。
在下面的示例中myNum的初始值将导致死循环。 If.. .T hen. ..Els e语句检查此条件防止出现死循环。
Sub ExitExample() Dim counter,myNum counter = 0 myNum= 9 Do UntilmyNum=10 myNum=myNum- 1 c ounter=c ounter+1 If myNum<10Then Exit Do Loop MsgBox"循环重复了 "&counter&"次。 " End Sub使用While. . .Wend
While. . .Wend语句是为那些熟悉其用法的用户提供的。但是由于While. . .Wend缺少灵活性
所以建议最好使用Do. ..Loop语句。
使用For. ..Next
For. ..Next语句用于将语句块运行指定的次数。在循环中使用计数器变量该变量的值随每一次循环增加或减少。
例如下面的示例将过程MyProc重复执行50次。 For语句指定计数器变量x及其起始值与终止值。Next语句使计数器变量每次加1 。
Sub DoMyProc50Times() Dimx Forx=1 To 50 MyProc Next End Sub关键字Step用于指定计数器变量每次增加或减少的值。在下面的示例中计数器变量j每次加2。循环结束后 total的值为2、 4、 6、 8和10的总和。
Sub TwosTotal() Dim j, total For j = 2 To 10 Step 2 total = total +j Next MsgBox"总和为"&total&"。 " End Sub
要使计数器变量递减可将Step设为负值。此时计数器变量的终止值必须小于起始值。在下面的示例中计数器变量myNum每次减2。循环结束后 to ta l的值为16、 14、 12、
10、 8、 6、 4和2的总和。
Sub NewTotal() Dim myNum, total For myNum=16 To 2 Step-2 total=total+myNum Next MsgBox"总和为"&total&"。 " End Sub
Exit For语句用于在计数器达到其终止值之前退出For. . .Next语句。因为通常只是在某些特殊情况下例如在发生错误时要退出循环所以可以在I f. ..Then.. .Els e语句的True语句块中使用Exit F or语句。如果条件为F als e循环将照常运行。
使用For Eac h. ..Next
For Each. ..Next循环与For.. .Next循环类似。 For Each. ..Next不是将语句运行指定的次数而是对于数组中的每个元素或对象集合中的每一项重复一组语句。这在不知道集合中元素的数目时非常有用。
在以下示例中 Dictionary对象的内容用于将文本分别放置在多个文本框中
<HTML> <HEAD><TITLE> 窗 体 与 元 素 </TITLE></HEAD> <S CRIPTLANGUAGE="VBScript"> <!-- Sub cmdChange_OnClick Dim d '创建一个变量 Set d=CreateObject("Scripting.D ictionary") d.Add "0", "Athens" '添加键和项目 d.Add "1", "Belgrade" d.Add "2", "Cairo" For Each I ind Document.frmForm.Elements(I).Value = D.Item(I) Next EndSub --> </SCRIPT> <BOD Y> <CENTER> <FORM NAME="frmForm"<Input Type="Text"><p> <Input Type = "Text"><p> <Input Type = "Text"><p> <Input Type ="Text"><p> <Input Type = "Button" NAME="c mdChange" VALUE="单击此处"><p> </FORM> </CENTER> </BODY> </HTML>
VBScript过程
在VBScript中过程被分为两类 Sub过程和Function过程。
Sub过程
Sub过程是包含在Sub和End Sub语句之间的一组VBScript语句执行操作但不返回值。Sub过程可以使用参数由调用过程传递的常数、变量或表达式。如果Sub过程无任何参数则Sub语句必须包含空括号()。
下面的Sub过程使用两个固有的或内置的VBScript函数 即MsgBox和InputBox来提示用户输入信息。然后显示根据这些信息计算的结果。计算由使用VBScript创建的Function过程完成。此过程在以下讨论之后演示。
Sub ConvertTemp() temp =InputBox("请输入华氏温度。 ", 1) Ms gBox "温度为"&Cels ius(temp)&"摄氏度。 " End Sub
racknerd从成立到现在发展是相当迅速,用最低的价格霸占了大部分低端便宜vps市场,虽然VPS价格便宜,但是VPS的质量和服务一点儿都不拉跨,服务器稳定、性能给力,尤其是售后方面时间短技术解决能力强,估计这也是racknerd这个品牌能如此成功的原因吧! 官方网站:https://www.racknerd.com 多种加密数字货币、信用卡、PayPal、支付宝、银联、webmoney,可...
速云怎么样?速云是一家国人商家。速云商家主要提供广州移动、深圳移动、广州茂名联通、香港HKT等VDS和独立服务器。目前,速云推出深圳独服优惠活动,机房为深圳移动机房,购买深圳服务器可享受5折优惠,目前独立服务器还支持申请免费试用,需要提交工单开通免费体验试用,次月可享受永久8折优惠,也是需工单申请哦!点击进入:速云官方网站地址活动期限至 2021年7月22日速云云服务器优惠活动:活动1:新购首月可...
UCloud优刻得近日针对全球大促活动进行了一次改版,这次改版更加优惠了,要比之前的优惠价格还要低一些,并且新增了1核心1G内存的快杰云服务器,2元/首年,47元/年,这个价格应该是目前市面上最低最便宜的云服务器产品了,有需要国内外便宜VPS云服务器的朋友可以关注一下。UCloud好不好,UCloud服务器怎么样?UCloud服务器值不值得购买UCloud是优刻得科技股份有限公司旗下拥有的云计算服...