我要当反贼 发表于 2023-4-10 14:41:57

Sub OnClick(Byval Item)
#language "vbscript"
Dim flag
flag = False '初始值为false,表示tag1为0
Sub Button1_OnClick()
   Dim result
   If flag Then
       result = MsgBox("是否确认此操作?", vbYesNo, "提示")
       If result = vbYes Then
         SetTagVal "tag1", 0
         flag = False '改变标志位的值
       End If
   Else
       result = MsgBox("是否确认此操作?", vbYesNo, "提示")
       If result = vbYes Then
         SetTagVal "tag1", 1
         flag = True '改变标志位的值
       End If
   End If
End Sub
#End language "vbscript"
End Sub
详细讲些下这段程序,比如#language "vbscript"是什么意思,为什么编译时会报错:缺少语句(5)#language "vbscript"

我要当反贼 发表于 2023-4-10 14:42:53

Sub OnClick(Byval Item)
#language "vbscript"
Dim flag
flag = False '初始值为false,表示tag1为0
Sub Button1_OnClick()
   Dim result
   If flag Then
       result = MsgBox("是否确认此操作?", vbYesNo, "提示")
       If result = vbYes Then
         SetTagVal "tag1", 0
         flag = False '改变标志位的值
       End If
   Else
       result = MsgBox("是否确认此操作?", vbYesNo, "提示")
       If result = vbYes Then
         SetTagVal "tag1", 1
         flag = True '改变标志位的值
       End If
   End If
End Sub
#End language "vbscript"
End Sub
详细讲些下这段程序,比如#language "vbscript"是什么意思,为什么编译时会报错:缺少语句(5)#language "vbscript"

chatGPT_小智 发表于 2023-4-10 14:43:06

我要当反贼 发表于 2023-04-10 14:41
Sub OnClick(Byval Item)
#language "vbscript"
Dim f ...

这是一个WINCC VBS脚本,可实现按下按钮控制一个二进制变量tag1。当按下按钮时,弹出一个对话框,询问“是否确认此操作”,有“是”、“否”两个选项。若选中“是”,则将二进制变量tag1置1,并关闭对话框。若选中“否”,则不作任何操作,关闭对话框。再次按下按钮时,又会弹出对话框,若选中“是”,则将二进制变量tag1置0。

#language "vbscript"表示这段程序的开头是VBS脚本代码。#End language "vbscript"标志着VBS脚本的结束。

在这段程序中,Sub OnClick(ByVal Item)语句定义了一个OnClick子过程,指定了该过程的名称和参数。程序中flag表示标志位,初始值为false,表示tag1为0。当flag为true时,意味着上一次设置了tag1为1,此时按下按钮应该设置tag1为0。反之,当flag为false时,按下按钮应该设置tag1为1。接着程序进入Button1_OnClick()子过程,当flag为true时先弹出对话框,询问用户是否对tag1进行操作;当flag为false时同样弹出对话框,继续询问用户是否对tag1进行操作。根据用户选择的不同,程序使用SetTagVal方法将tag1值改变,并将flag的值修改为相应的状态,以便下一次按钮按下时使用。

编译时报错:“缺少语句(5)”,可能是因为代码中存在不符合语法要求的错误。推荐对照以上程序检查代码是否完整、格式是否正确,特别是检查"End Sub"语句是否在已有语句后出现。

我要当反贼 发表于 2023-4-10 14:49:48

使用WINCC c脚本 写一段程序,要求如下:
1.WINCC版本WINCC7.4SP1。
2.使用一个按钮控制一个二进制变量tag1,按下按钮时,弹出一个对话框”是否确认此操作,有’是否‘两个选项,点击’是‘则二进制变量tag1置1,同时对话框关闭,点’否‘则tag1不动作,对话框关闭。再次按下这个按钮时,继续弹出一个对话框”是否确认此操作,点击’是‘则二进制变量tag1置0,同时对话框关闭,点’否‘则tag1不动作。

chatGPT_小智 发表于 2023-4-10 14:50:41

我要当反贼 发表于 2023-04-10 14:49
使用WINCC c脚本 写一段程序,要求如下:
1.WINCC版本W ...

下面是使用WINCC c脚本实现的程序:

void Button1_Click()
{   
    static bool flag = false; // 静态变量,用于记录tag1当前值
    if (flag) {
      if (MessageBox("是否确认此操作?", "提示", MB_YESNO) == IDYES) {
            SetTagVal("tag1", 0);
            flag = false; // tag1置0,标志位设置为false
      }
    } else {
      if (MessageBox("是否确认此操作?", "提示", MB_YESNO) == IDYES) {
            SetTagVal("tag1", 1);
            flag = true; // tag1置1,标志位设置为true
      }
    }
}

解释一下代码:

1. 首先声明一个静态变量`flag`,用于记录tag1当前的值。

2. 按钮按下后触发`Button1_Click()`函数。

3. 判断标志位`flag`是否为true。如果是true,说明上一次操作是将tag1置为1,需要弹出对话框询问是否将tag1置为0。否则,说明上一次操作是将tag1置为0,需要弹出对话框询问是否将tag1置为1。

4. 使用`MessageBox()`函数弹出对话框,询问是否确认操作。如果用户选择“是”,则调用`SetTagVal()`函数设置tag1的值,并更新标志位`flag`的值。如果用户选择“否”,则什么也不做。

注意:使用WINCC c脚本时,需要在WINCC的“属性”窗口中将“脚本语言”设置为“C/C++”。

我要当反贼 发表于 2023-4-10 15:01:48

#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END

// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END
void Button1_Click()
{   
    static bool flag = false; // 静态变量,用于记录tag1当前值
    if (flag) {
      if (MessageBox("是否确认此操作?", "提示", MB_YESNO) == IDYES) {
            SetTagVal("tag1", 0);
            flag = false; // tag1置0,标志位设置为false
      }
    } else {
      if (MessageBox("是否确认此操作?","提示", MB_YESNO) == IDYES) {
            SetTagVal("tag1", 1);
            flag = true; // tag1置1,标志位设置为true
      }
    }
}}
这段程序编译时有13个错误,为什么

chatGPT_小智 发表于 2023-4-10 15:02:04

我要当反贼 发表于 2023-04-10 15:01
#include "apdefap.h"
void OnClick(char* lpszPictur ...

这段程序编译时有13个错误,可能是因为缺少一些头文件或库文件。请确认是否已经正确引入相关头文件和库文件,并检查代码中是否存在语法错误或拼写错误。

另外,在WINCC C脚本中,不需要声明OnClick函数,可以直接在Button1_Click函数中编写代码实现所需功能。

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

还有没有别的vbs脚本方案,上述vbs脚本我一直编译不过去

chatGPT_小智 发表于 2023-4-10 15:35:47

我要当反贼 发表于 2023-04-10 15:35
还有没有别的vbs脚本方案,上述vbs脚本我一直编译不过 ...

下面是一个使用 WinCC VBS 脚本实现的程序,可以实现类似的功能:

Sub Button1_OnClick()
    Dim tagValue
    tagValue = GetTagValue("tag1")
   
    If tagValue Then
      If MsgBox("是否确认此操作?", vbYesNo, "提示") = vbYes Then
            SetTagValue "tag1", 0
      End If
    Else
      If MsgBox("是否确认此操作?", vbYesNo, "提示") = vbYes Then
            SetTagValue "tag1", 1
      End If
    End If
End Sub

请注意,这个脚本还需要在 WinCC 中添加一个名为 tag1 的二进制标签来完整实现该功能。

我要当反贼 发表于 2023-4-10 15:49:50

Sub Button1_OnClick()
    Dim tagValue
    tagValue = GetTagValue("tag1")
   
    If tagValue Then
      If MsgBox("是否确认此操作?", vbYesNo, "提示") = vbYes Then
            SetTagValue "tag1", 0
      End If
    Else
      If MsgBox("是否确认此操作?", vbYesNo, "提示") = vbYes Then
            SetTagValue "tag1", 1
      End If
    End If
End Sub
错误:Sub Button1_OnClick()存在语法错误
页: 1 [2] 3
查看完整版本: WINCC VBS脚本