VBS读写wincc变量

已锁定

rission

  • 帖子

    222
  • 精华

    2
  • 被关注

    15

论坛等级:侠圣

注册时间:2011-10-23

普通 普通 如何晋级?

VBS读写wincc变量

7465

4

2012-03-05 09:30:42

项目组态过程中,用vbs对wincc变量进行读取和写入操作是比较常用的。
但是,看似简单的语句,其中却有点需要注意的地方,虽然即使忽略这小小的细节大多数情况也不影响编程的准确性,但是直观地看到这其中的小差别,可以帮助自己养成一个编程的好习惯,体会一下编程语言所谓逻辑性之所在。

在画面上创建一个按钮,鼠标左键vbs动作里写如下脚本,前提是已经建立了8位无符号类型的变量instatus。
Dim i
Set i = HMIRuntime.Tags("instatus")
HMIRuntime.Tags ("instatus").write 0 '首先把instatus置为0

MsgBox i.read '结果是0,说明read方法可以直接获取变量的值
MsgBox i.Value '结果是0,说明用过read方法之后value属性就成了当前的变量值
'也说明msgbox虽然只用于查看,但是read方法在函数中用过之后,wincc的脚本程序就算从变量管理程序中读回变量值了。

MsgBox HMIRuntime.Tags ("instatus").value '这种形式看value属性,结果为空

Dim a
a = HMIRuntime.Tags ("instatus").value
MsgBox a '如果用这种方式直接赋给变量,结果是空的,因此不能用这种方式把变量值读到过程里
a = HMIRuntime.Tags ("instatus").read
MsgBox a '这样读到a中,结果就有了,为0

MsgBox HMIRuntime.Tags ("instatus").read '当然,这个结果是0

HMIRuntime.Tags ("instatus").Read '那是不是这样先读一下,value的属性就会有了呢?
MsgBox HMIRuntime.Tags ("instatus").value '结果还是没有

i.value = 1 '对value属性赋值

MsgBox i.Value '看看赋为新值了没有,结果是1,ok
MsgBox i.read '读一下呢?看看现在的变量值是多少?还是0
MsgBox i.Value '再看value属性,成为0了

i.Value = 1 '重新再把value属性置为1

'MsgBox HMIRuntime.Tags ("instatus").value '当然,这种方式仍然回不来数
MsgBox HMIRuntime.Tags ("instatus").read '读到的变量值还是0
MsgBox i.Value '这里应该是多少呢?如果MsgBox i.read 和 HMIRuntime.Tags ("instatus").read
'在msgbox函数中作用一样的话,这里应该是0,但是这里是1 !
'说明什么呢?
'说明HMIRuntime.Tags ("instatus").read方法做过之后,并不影响,或者说并没有
'重新把value属性赋给i这个代表着wincc变量对象的脚本变量,从逻辑上这是特别合理的,没重新赋
‘值之前,变量还是原值,
'但是,如果忽略了这一点,认为程序中用i.read和HMIRuntime.Tags ("instatus").read完全一样的
’话,那就不妥了。
'得出的启示就是,在编程时,既然用了变量代表某个对象了,就一直用这个变量来写程序,如果编
'程过程中想看原对象的值的话,用对象原名来查看,比较合理,不会影响到脚本变量。

i.Write '好的,终于到write方法了
MsgBox HMIRuntime.Tags ("instatus").read '读回来的值为1
MsgBox i.read '这也是1 '有意思的是,如果注释掉上一行,i.Write 直接到这句,结果竟然是0 !下面的属性
‘也跟着都是0,
'为什么呢?
'这个问题要问大家了,我猜想是……

MsgBox i.Value '这也是1,就是说上次write或者read方法之后,value值就为最近的值
MsgBox HMIRuntime.Tags ("instatus").value '还是没有
MsgBox HMIRuntime.Tags ("instatus").read '这里不论上面注释掉MsgBox HMIRuntime.Tags
'("instatus").read没有,都是1

MsgBox "OK"

以上的代码都是在我的wincc中运行过多次的,结果都是这样,希望有兴趣的童鞋帮我验证一下,看看是不是这么回事儿。
VBS读写wincc变量 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC WinCC / Panel

共有32644条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。