VB操作wincc脚本心得

Vbs 操作wincc画面脚本总结

一: 不使用变量单纯的操作界面

1.操作某个画面中控件的属性 如 Home1.Pdl(总窗体) 下的 画面窗口2(画面窗口)

Sub OnClick(ByVal Item)

Dim objCircle

Dim screenname

Dim pwname

Set objCircle= ScreenItems("圆1" )

objCircle.Radius = 60

Set screenname=HMIRuntime.Screens("Home1") //获取要操作的窗体

Set pwname=screenname.ScreenItems("画面窗口2") //获取要操作的控件,这里填入你要操作的控件名

MsgBox(objCircle.Radius) //输出圆的半径

MsgBox (pwname.Picturename) //输出当前画面窗口2的名字

End Sub

注意 当调用某窗体下的某控件的某个属性时,需要声明两个对象,一个接纳这个控件,一个接纳值 例如

Dim object

Dim value

Set object =HMIRuntime.Screens("Home1").ScreenItems("画面窗口2")

Set value=object.picturename

2.更改画面窗口的对象

Sub OnClick(Byval Item)

Dim opObject

Set opObject=HMIRuntime.Screens ("Home1").ScreenItems("画面窗口2")

opObject.PictureName="Page1.Pdl"

End Sub

3.设置文本

Set titleTxt=HMIRuntime.Screens ("Home1").ScreenItems("静态文本2")

titleTxt.Text =titleTxt.Text+"EF" //获取文本的值并追加字符

4.vb 字符串函数 VB的字符串截取函数有Left(字符串,n),返回字符串前N个字符;Mid(字符串,p,n),从第p个字符开始,向后截取N个字符;right(字符串,n),返回字符串的最后n个字符。

获取下标

VB中的InStr()函数与InStrRev()函数:

都是在主字符串当中搜寻寻找子字符串,返回找到的子字符串在主字符串中出现的位置; 不同在于;

InStr()函数,从左开始向右寻找,InStrRev()函数,从右开始向左寻找。

截取 right 和left 获取长度 Len

二:操作变量

1. Dim objTag

Dim AText

Set objTag = HMIRuntime.Tags("a") //获取变量

objTag.Read //执行读取

Set AText=ScreenItems("静态文本2") //获取控件

AText.Text=objTag.Value //给控件写入值

objTag.Value =100 //给目标变量写入值

objTag.Write //执行写入

2. vb 中 Switch 语句的变体

Dim objTag

Dim AText

Set objTag = HMIRuntime.Tags("a") //获取内部变量a的值

objTag.Read //必须要有这一步,这是读取操作,同理如果改写值必须要有ogjTag.write

Set AText=ScreenItems("静态文本2")

Select Case objTag.Value Case 1

AText.Text="a" Case 2

AText.Text="b"

Case Else

AText.Text=objTag.Value

End Select

三.弹出对话框

设置

buttons 参数可以有以下值:

常数 值 描述

vbOKOnly 0 只显示确定按钮。

vbOKCancel 1 显示确定和取消按钮。

vbAbortRetryIgnore 2 显示放弃、重试和忽略按钮。

vbYesNoCancel 3 显示是、否和取消按钮。

vbYesNo 4 显示是和否按钮。

vbRetryCancel 5 显示重试和取消按钮。

vbCritical 16 显示临界信息图标。

vbQuestion 32 显示警告查询图标。

vbExclamation 48 显示警告消息图标。

vbInformation 64 显示信息消息图标。

vbDefaultButton1 0 第一个按钮为默认按钮。

vbDefaultButton2 256 第二个按钮为默认按钮。

vbDefaultButton3 512 第三个按钮为默认按钮。

vbDefaultButton4 768 第四个按钮为默认按钮。

vbApplicationModal 0 应用程序模式:用户必须响应消息框才能继续在当前应用程序中工作。

vbSystemModal 4096 系统模式:在用户响应消息框前,所有应用程序都被挂起。

第一组值 (0 - 5) 用于描述对话框中显示的按钮类型与数目;第二组值 (16, 32, 48, 64) 用于描述图标的样式;第三组值 (0, 256, 512) 用于确定默认按钮;而第四组值 (0, 4096) 则决定消息框的样式。在将这些数字相加以生成 buttons 参数值时,只能从每组值中取用一个数字。

返回值

MsgBox 函数有以下返回值:

常数 值 按钮

vbOK 1 确定

vbCancel 2 取消

vbAbort 3 放弃

vbRetry 4 重试

vbIgnore 5 忽略

vbYes 6 是

vbNo 7 否

下面的例子演示了 MsgBox 函数的用法:

Dim MyVar

MyVar = MsgBox ("Hello World!", 65, "MsgBox Example")

' MyVar contains either 1 or 2, depending on which button is clicked.

你要求是有是和否两个按钮那么MyVar = MsgBox ("Hello World!", 65, "MsgBox Example")中 的65改成4就可以了!

vbs脚本中:

if msgbox("确实要启动设备吗?",4,"警告")=6 then

hmiruntime.tags("tag1").write 1

end if

 

第二篇:VB学习总结也心得

学习VB两个星期以来, (其实真正时间也不到两个星期吧 平时有空闲就学习了下 在这里是想告诉大家 VB基本操作不难,)第一个串口调试程序通了 能够实现更改波特率,串口号,接收数据实现字符也十六进制显示,在发送文本框输入数据 电机发送将在接收框内显示 记住将RS232的2和3管脚直接接起来

下面是我测试实际过程

大家也可以和我一样练习练习

下面是我的源代码 可以供大家参考下 也希望高手指点下 (框架就没必要给了) Dim baud As String

Dim text2enbale, asciflag As Boolean '停止显示标志 false将不能显示

Private Sub Check2_Click()

End Sub

Private Sub Combo1_Click()’端口控制

Select Case Combo1.Text

Case "COM1"

MSComm1.CommPort = 1

Case "COM2"

MSComm1.CommPort = 2

Case "COM3"

MSComm1.CommPort = 3

Case "COM4"

MSComm1.CommPort = 4

Case "COM5"

MSComm1.CommPort = 5

Case "COM6"

MSComm1.CommPort = 6

End Select

End Sub

Private Sub Combo2_Click()’波特率控制

If MSComm1.PortOpen = True Then

MSComm1.PortOpen = False

Select Case Combo2.Text

Case "300"

baud = "300"

Case "600"

baud = "600"

Case "1200"

baud = "1200"

Case "2400"

baud = "2400"

Case "4800"

baud = "4800"

Case "9600"

baud = "9600"

Case "19200"

baud = "19200"

Case "38400"

baud = "38400"

End Select

MSComm1.Settings = baud & ",n,8,1"

MSComm1.PortOpen = True

Else

Select Case Combo2.Text

Case "300"

baud = "300"

Case "600"

baud = "600"

Case "1200"

baud = "1200"

Case "2400"

baud = "2400"

Case "4800"

baud = "4800"

Case "9600"

baud = "9600"

Case "19200"

baud = "19200"

Case "38400"

baud = "38400"

End Select

MSComm1.Settings = baud & ",n,8,1"

End If

End Sub

Private Sub Command5_Click()

'Dim s As String

Dim a() As Byte

If MSComm1.PortOpen = False Then

MsgBox "串口未打开,请打开串口", 48, "警告"

End If

'ReDim a(3)

'a(0) = &HF

'a(1) = &HFE

'a(2) = &HDD

'a(3) = &HCC

s = Text3.Text

'a = s

MSComm1.RThreshold = Len(s) ' UBound(a) + 1

If MSComm1.PortOpen = True Then

MSComm1.Output = s

End If

Call Delay(20)

End Sub

Private Sub MSComm1_OnComm()

Dim idata As Variant

Dim arr() As Byte

intInputLen = MSComm1.InBufferCount '不这样将会提示不能给数组赋值

ReDim arr(intInputLen) '和上面一样

Select Case MSComm1.CommEvent

Case comEvReceive '接收成功信息

arr = MSComm1.Input '得到 接收缓冲区数据

If asciflag = True Then

For i = 0 To UBound(arr)

Text2.Text = Text2.Text + Chr$(arr(i))

Next i

Else

For i = 0 To UBound(arr)

Text2.Text = Text2.Text + " " & arr(i)

Next i

End If

MSComm1.InBufferCount = 0

End Select

End Sub

Private Sub Option1_Click()

If Option1.Value = True Then

asciflag = True

End If

End Sub

Private Sub Option2_Click()

If Option2.Value = True Then

asciflag = False

End If

End Sub

Private Sub Timer1_Timer()

Label11.Caption = Time

End Sub

Private Sub uart_open_Click()

MSComm1.PortOpen = Not MSComm1.PortOpen

If MSComm1.PortOpen Then

Shape2.BackColor = &HFF&

uart_open.Caption = "关闭串口"

Else

Shape2.BackColor = &HE0E0E0

uart_open.Caption = "打开串口"

End If

End Sub

Private Sub text2_clr_Click()

Text2.Text = ""

End Sub

Private Sub text2_en_Click()

text2enable = Not text2enbale

End Sub

Private Sub Command6_Click()

End

End Sub

Private Sub Form_Load()

Show '没有show后面的设置焦点将失败 错误

text2enbale = True

Option2.Value = True '默认显示是以16进制显示

MSComm1.CommPort = 1

MSComm1.Settings = "9600,n,8,1"

MSComm1.InputMode = comInputModeBinary '二进制接收数据

MSComm1.InBufferCount = 0

MSComm1.RThreshold = 1 '缓冲区接收到4个字符 就产生一个oncomm事件

Text3.Text = ""

Text3.SetFocus

End Sub

至此 一个简单的小工程就完成了,因为我是电子信息工程专业对高级编程还是很菜鸟的,其实这个功能也是我一直想能够自己实现的,因为之前一直以为学习VB 会花好多时间,就像之前一直在学习ARM一样半天模不着头脑。所以迟迟不敢接触。估计也好多人和我一样,其实学习开始了 也会发现并不是想象中那样。

20xx-7-30

青檐铃风