我要当反贼 发表于 2023-4-9 21:10:10

WINCC

使用条件:
1.软件版本wincc7.4sp1.
2.使用一个按钮,按下按钮时变量tag1置位。再按一下按钮时变量tag1复位.
3.使用VBS脚本。

chatGPT_小控 发表于 2023-4-9 21:10:54

可以按照以下步骤实现:

1. 在WinCC中创建一个按钮对象,并将其命名为“Button1”。

2. 右键单击“Button1”,选择“属性”打开属性面板,将“变量”设置为“tag1”。

3. 双击“Button1”,打开事件编辑器。

4. 在事件编辑器中选择“OnClick”事件,并选择“脚本”选项卡。

5. 在脚本编辑器中编写如下代码:

If HMIRuntime.Tags("tag1").Read Then
    HMIRuntime.Tags("tag1").Write False
Else
    HMIRuntime.Tags("tag1").Write True
End If

6. 点击“保存并退出”按钮保存脚本。

7. 运行WinCC应用程序,在界面上点击“Button1”按钮,可以看到tag1变量的值在True和False之间切换。

我要当反贼 发表于 2023-4-9 21:29:52

If HMIRuntime.Tags("tag1").Read Then
    HMIRuntime.Tags("tag1").Write False
Else
    HMIRuntime.Tags("tag1").Write True
End If
这段脚本中存在什么错误

chatGPT_小控 发表于 2023-4-9 21:30:26

我要当反贼 发表于 2023-04-09 21:29
If HMIRuntime.Tags("tag1").Read Then
    HMIRuntim ...

这段脚本中存在一个语法错误,即引号的使用不正确。正确的写法应该是:
If HMIRuntime.Tags("tag1").Read Then
    HMIRuntime.Tags("tag1").Write False
Else
    HMIRuntime.Tags("tag1").Write True
End If
在VBS脚本中,字符串的开头和结尾都需要用双引号或者单引号括起来。在这段脚本中,使用了"代替了双引号,导致脚本无法正确解析。

我要当反贼 发表于 2023-4-10 18:22:07

这个按钮置位或复位前,要弹窗提醒,是否确认该操作

chatGPT_小控 发表于 2023-4-10 18:22:41

我要当反贼 发表于 2023-04-10 18:22
这个按钮置位或复位前,要弹窗提醒,是否确认该操作 ...

可以按照以下步骤实现:

1. 双击“Button1”,打开事件编辑器。

2. 在事件编辑器中选择“OnClick”事件,并选择“脚本”选项卡。

3. 在脚本编辑器中编写如下代码:

If HMIRuntime.Tags("tag1").Read Then
    Dim confirm
    confirm = MsgBox("是否要将变量置为不激活状态?", vbQuestion+vbYesNo, "确认操作")
    If confirm = vbYes Then
      HMIRuntime.Tags("tag1").Write False
    End If
Else
    Dim confirm
    confirm = MsgBox("是否要将变量置为激活状态?", vbQuestion+vbYesNo, "确认操作")
    If confirm = vbYes Then
      HMIRuntime.Tags("tag1").Write True
    End If
End If
4. 点击“保存并退出”按钮保存脚本。

5. 运行WinCC应用程序,在界面上点击“Button1”按钮时,会弹出一个确认弹窗,询问用户是否确认进行该操作。如果用户点击了“是”按钮,则进行相应的操作;如果用户点击了“否”按钮,则取消操作。

我要当反贼 发表于 2023-4-10 18:38:48

Sub OnClick(Byval Item)   
If HMIRuntime.Tags("DB18_手动操作投入").Read Then
    Dim confirm
    confirm = MsgBox("是否要将变量置为不激活状态?", vbQuestion+vbYesNo, ";确认操作")
    If confirm = vbYes Then
      HMIRuntime.Tags("DB18_手动操作投入").Write False
    End If
Else
    Dim confirm
    confirm = MsgBox("是否要将变量置为激活状态?", vbQuestion+vbYesNo, "确认操作")
    If confirm = vbYes Then
      HMIRuntime.Tags("DB18_手动操作投入").Write True
    End If
End If
End Sub
这段程序中存在什么错误

chatGPT_小控 发表于 2023-4-10 18:39:19

我要当反贼 发表于 2023-04-10 18:38
Sub OnClick(Byval Item)   
If HMIRuntime.Tags("DB1 ...

这段程序中没有明显的语法错误,但需要注意以下几点:

1. 在VBS中,参数类型需要在参数名前面加上数据类型,而不是在函数名后面加上括号。
2. 在MsgBox函数中,第二个参数需要使用OR运算符(|)将选项组合起来。例如:vbQuestion|vbYesNo表示同时显示"问号"和"是/否"按钮。
3. 虽然不影响程序运行,但建议将变量名改为有意义的名称,以提高代码的可读性。

修改后的程序如下:

Sub OnClick(ByVal Item)
    If HMIRuntime.Tags("DB18_手动操作投入").Read Then
      Dim confirm
      confirm = MsgBox("是否要将变量置为不激活状态?", vbQuestion|vbYesNo, "确认操作")
      If confirm = vbYes Then
            HMIRuntime.Tags("DB18_手动操作投入").Write False
      End If
    Else
      Dim confirm
      confirm = MsgBox("是否要将变量置为激活状态?", vbQuestion|vbYesNo, "确认操作")
      If confirm = vbYes Then
            HMIRuntime.Tags("DB18_手动操作投入").Write True
      End If
    End If
End Sub

我要当反贼 发表于 2023-4-10 18:43:52

Sub OnClick(Byval Item)   
If HMIRuntime.Tags("DB18_手动操作投入").Read Then
    Dim confirm
    confirm = MsgBox("是否要将变量置为不激活状态?", vbQuestion+vbYesNo, ";确认操作")
    If confirm = vbYes Then
      HMIRuntime.Tags("DB18_手动操作投入").Write False
    End If
Else
    Dim confirm
    confirm = MsgBox("是否要将变量置为激活状态?", vbQuestion+vbYesNo, "确认操作")
    If confirm = vbYes Then
      HMIRuntime.Tags("DB18_手动操作投入").Write True
    End If
End If
End Sub
编译时存在错误,名称重定义(12)Dim confirm

chatGPT_小控 发表于 2023-4-10 18:44:14

我要当反贼 发表于 2023-04-10 18:43
Sub OnClick(Byval Item)   
If HMIRuntime.Tags("DB1 ...

这个报错是因为重复定义了变量“confirm”。在VBS中对于每一个变量只能进行一次声明,也就是说,在同一作用域内不能使用相同名称的变量。可以按照以下修改程序:

Sub OnClick(ByVal Item)   
    If HMIRuntime.Tags("DB18_手动操作投入").Read Then      
      Dim confirm1 '将变量名修改为confirm1
      confirm1 = MsgBox("是否要将变量置为不激活状态?", vbQuestion|vbYesNo, "确认操作")      
      If confirm1 = vbYes Then            
            HMIRuntime.Tags("DB18_手动操作投入").Write False      
      End If   
    Else      
      Dim confirm2 '将变量名修改为confirm2
      confirm2 = MsgBox("是否要将变量置为激活状态?", vbQuestion|vbYesNo, "确认操作")      
      If confirm2 = vbYes Then            
            HMIRuntime.Tags("DB18_手动操作投入").Write True      
      End If   
    End If
End Sub

这样就解决了名称重定义的问题。
页: [1]
查看完整版本: WINCC