工控人生

欢迎光临
我们一直在努力

在WinCC中使用脚本进行二次确认

在WinCC做了一个按钮,用来生成一个脉冲清零累积量,这个功能我直接做成了按钮,如:点鼠标左键变量置1,松开鼠标左键变量置0。这个功能逻辑没有问题,但有一定可能性造成鼠标误点,因为在鼠标指针刚好在这个按钮上,碰了一下鼠标键,这个置1清零的操作就下去了。

想着还是做一个二次确认的对话框,最简单的方法还是利用按钮通过C脚本或是VB脚本来实现。

以下两个脚本,一个是C写的,一个是VB写的,都能实现二次确认,但是要么是长置1或是长置0,不能生成一个脉冲,功能未完成实现。

WinCC_C_Confirm

WinCC_VB_Confirm

网上继续搜罗一番,在C脚本里变量置1后,可以申明使用Sleep()来中断一定的时间,再继续执行变量置0操作,这样就生成一个脉冲。在VB脚本中,在变量置1后,可以定义一个变量循环一定的周期以创造等待时间,再执行变量置0操作,这样也能生成一个脉冲。具体修改后的如下:

WinCC_C_Pulse_Confirm

WinCC_VB_Pulse_Confirm

好娃娃代码如下:

C脚本代码:

#include “apdefap.h”
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{

// Define Sleep()
#pragma option(mbcs)
#pragma code(“Kernel32.dll”)
void Sleep(int Milliseconds);

HWND WindowClassHandle_PDLRT = NULL;
WindowClassHandle_PDLRT = FindWindow (“PDLRTisAliveAndWaitsForYou”,NULL);

if(WindowClassHandle_PDLRT)
{
int iRet = MessageBox(WindowClassHandle_PDLRT, “Confirm reset to zero?”, “Reset To Zero”,     MB_YESNO|MB_ICONEXCLAMATION|MB_SETFOREGROUND|MB_SYSTEMMODAL);

switch (iRet){
case IDYES:
SetTagBit(“YourTag”,1);// set data
Sleep(1000); //wait 1s
SetTagBit(“YourTag”,0);// set data
break;
case IDNO:
SetTagBit(“YourTag”,0);// set data
break;
}
}
}

VB脚本代码:

Sub OnClick(Byval Item)

‘ 弹出确认窗口
Dim response
response = MsgBox(“Confirm reset to zero?”, vbYesNo, “Confirm”)

‘ 根据用户的选择进行处理
If response = vbYes Then
‘ 用户点击了”是”按钮
‘ tag 置1
HMIRuntime.Tags(“YourTag”).Write 1

‘ 利用循环来制造一个等待时间
Dim i
For i=0 To 100000000 ‘yue 2s
next

‘ 循环时间过后将tag复位为0
HMIRuntime.Tags(“YourTag”).Write 0
‘ 若单纯的是否来置1和置0,上两段程序不要即可

Elseif response = vbNo Then
‘ 用户点击了”否”按钮
HMIRuntime.Tags(“YourTag”).Write 0
End If

End Sub

未经允许不得转载:编程 » 在WinCC中使用脚本进行二次确认
分享到:

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址