花满楼是也 发表于 2023-3-18 16:37:10

帮我写一个西门子WINCC VBS脚本,要求如下:

帮我写一个西门子WINCC VBS脚本,要求如下:
1、在按钮组态事件中,鼠标动作触发
2、读取二进制内部变量"RUN_1"
3、当按钮有动作时,变量"RUN_1"为1
4、当按钮再次有动作时,变量"RUN_1"为0
5、wincc是7.4版本的

chatGPT_小柔 发表于 2023-3-18 16:37:23

以下是符合要求的脚本:

```
Sub CommandButton1_OnMouseDown()
    Dim objTag, objValue
    Set objTag = HMIRuntime.Tags(\"RUN_1\")
    objValue = objTag.Read
    If objValue = 1 Then
      objTag.Write 0
    Else
      objTag.Write 1
    End If
End Sub
```

解释一下脚本的实现原理:

当按钮组态事件中鼠标按下时,脚本开始执行。首先通过HMIRuntime.Tags方法获取标签对象,然后使用Read方法读取标签值。如果值为1,则说明当前处于启动状态,将写入0来停止;反之,则将值写入1来启动。

需要注意的是,WINCC的版本可能会影响脚本的具体实现方法。此脚本适用于WINCC7.4版本。

花满楼是也 发表于 2023-3-18 16:43:45

还有其他的编程方式吗

chatGPT_小柔 发表于 2023-3-18 16:44:01

可以使用另一种方式实现同样的功能,即通过内部变量的OnDataChange事件来实现。具体的脚本代码如下:```Dim objTag\'定义标签对象Set objTag = HMIRuntime.Tags(\\\"RUN_1\\\")\'获取标签对象Private Sub objTag_OnDataChange()    If objTag.Read = 1 Then      objTag.Write 0    Else      objTag.Write 1    End IfEnd Sub```这个脚本的原理是,在加载界面时,会自动监听并绑定标签对象的OnDataChange事件,当内部变量值发生变化时,触发该事件,并执行相应的操作。在此脚本中,当读取到RUN_1的值为1时,将其写入为0,反之将其写入为1。需要注意的是,在使用此种方式进行编程时,应该将RUN_1的值设置为Boolean类型。

花满楼是也 发表于 2023-3-18 16:46:09

Sub OnClick(ByVal Item)
Dim objTag, objValue
Set objTag = HMIRuntime.Tags(\"RUN_1"\)
objValue = objTag.Read
If objValue = 1 Then
objTag.Write 0
Else
objTag.Write 1
    End If
End Sub

这段程序哪里出错了

chatGPT_小柔 发表于 2023-3-18 16:46:20

这段程序有一个语法错误,具体原因是在Set objTag = HMIRuntime.Tags(\\\"RUN_1\"\\)这行代码中,引号的使用不正确。可以修改为```Set objTag = HMIRuntime.Tags(\"RUN_1\")```即可解决该问题。修改后的完整代码如下:```Sub OnClick(ByVal Item)    Dim objTag, objValue    Set objTag = HMIRuntime.Tags(\"RUN_1\")    objValue = objTag.Read    If objValue = 1 Then      objTag.Write 0    Else      objTag.Write 1    End IfEnd Sub```

amchina 发表于 2023-3-27 20:27:39

都是高手
页: [1]
查看完整版本: 帮我写一个西门子WINCC VBS脚本,要求如下: