C#用来编写工控软件,而vbs用来为工控软件编写脚本。
1 VBS概述
1.1简介
VBS(Microsoft Visual Basic Script Edition,微软公司可视化BASIC脚本版)是基于Visual Basic的脚本语言。
脚本是普通的文本文件,属于批处理文件,它导演了一个序列事件的发生。
关于脚本周期
设定好脚本周期后,每当新的周期开始,脚本就会自动按顺序执行指令,如果脚本指令执行完毕而周期还未结束,脚本会等待直至周期结束,然后在新一轮周期开始时从头执行指令;如果周期已结束而脚本还未执行完毕全部指令,那么还未执行的指令被放弃,脚本从头执行指令,未执行的指令一直不会被执行。
因此必须计算好脚本周期,确保所有指令都能被执行的同时,避免周期过长降低效率。
1.2使用下来与其他语言语法最直观的区别
- 关键字首字母大写(编译器会自动将关键字首字母大写,日常输入时输入小写并不会影响语句执行)
- 语句结尾不需要分号(;)
- 没有花括号{}
- 不存在 相等==
- 注释:使用 ’
- 任何一种文本编辑器都可以用来开发VBS,包括记事本
2 VBS语法
2.1变量
创建变量的方法:
Dim X //创建单个变量
Dim X,Y //创建多个变量
变量赋值和C语言类似:
X=1
在VBS中似乎不能直接使用 Dim X=1 的形式,即在创建变量时直接赋值,我测试时不管是记事本还是编译器都会报错,需要改成
Dim X
X=1
2.2条件
只用到一个IF时,其语法为If…Then:
If i=1 Then y=1//只执行一条语句,可以把代码写为一行
/*****************/
IF i=1 Then
y=1
z=2
End If //执行多条语句,需要用关键词 "End If" 来结束这个语句
特别注意比较i是否等于1用的是等号(i=1),而不是一般语法用的==(i==1)
如果需要用到Else,其语法为If…Then…Else
If i=1 Then
y=1
Else
z=2
End If
如果需要用到Elself,其语法为If…Then…ElseIf
If i=1 Then
y=1
ElseIf i=2 Then
y=2
...
Else
y=3
End If
2.3循环
循环指定的次数
使用 For…Next 语句运行一段代码指定的次数,For 语句规定计数变量以及它的初始值和结束值;Next 语句会以 1 作为步进值来递增变量。
For i=0 To 5
x=x+1
Next
条件循环
Do…Loop 语句重复执行某段代码直到条件是 true 或条件变成 true。
Do While i>10
i=i-1
Loop
如果需要执行死循环,可改为:
Do While 1
...
Loop
2.4创建函数
函数体被封装在 Function 和 End Function 语句内,基本格式为:
Function 函数名(形参1,形参2)//如果没有参数,必须带有空的圆括号 ()
内容
End Function
调用格式为:
Call 函数名(实参1,实参2)
函数一般放在程序末尾:
主程序
…
…
…
函数1
…
…
函数2
…
…
其它
- 弹窗
msgbox "弹窗内容"
- 时间函数
见VBS函数—日期/时间
在很多情况下都非常有用。
3 VBS基于对象
具体的说应该是COM对象。
之前给物联网网关编写脚本的时候我都快忘了vbs是基于对象(与“面向对象”含义不同,基于对象相当于不完全面向对象)的,因为脚本用到的语法结构很简单,并没有像C#那样涉及到显著的面向对象的特征,导致我一直以为它是面向过程的,直到后来给wincc编程时涉及到了WSHshell,现在就来做一个简要的补充。
概念
- Windows:脚本宿主。
- WshShell 对象:提供对本地Windows 外壳程序的访问。在程序中通常只是给一个变量取名WshShell以方便理解,因此也可以更换成其它单词。
- set:给对象变量赋值,与dim的区别在于后者用于定义变量。
- WScript 对象:提供对 Windows 脚本宿主对象模型根对象的访问。
- CreateObject函数:用于创建对象
VBS中CreateObject和WScript.CreateObject的区别介绍 - WScript.Shell:WshShell对象的ProgID(COM技术相关)
ProgID 概念 - run方法:object.Run(strCommand, [intWindowStyle], [bWaitOnReturn]),详见:vbs的Run方法
'以上对象、函数和关键字常组成下面这行:
set WSHshell = wscript.createobject("wscript.shell")
'这一行基本是固定的
'意思是创建一个脚本命令窗口,这句话之后就是进行命令的输入
其它功能
- 延时
WScript.Sleep 10000 '数字为毫秒数
- 自动按键
CreateObject("wscript.shell").sendkeys "{F5}"
'这里对语句进行了简化,删去了定义对象变量和给对象变量赋值
附录:脚本的关闭
使用记事本作脚本运行时,如果脚本内写入了死循环,那么脚本会保持运行直到进程被杀死;并且由于脚本在运行时不会有任何窗口出现,所以有时候很难察觉脚本仍在运行。
最简便关闭脚本的方法是直接打开任务管理器,找到wscript.exe然后结束它。
当然也可以尝试使用脚本来关闭脚本,其代码为:
dim WSHshell
set WSHshell = wscript.createobject("wscript.shell")
WSHshell.run "taskkill /im wscript.exe /f ",0 ,true