三问“sleep(500)”

WinCC中启动按钮的组态程序如下:
#include "apdetap.h"
void OnLButtonDown(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName,UINTnFlays,intx,inty)
{

#pragma code("keme132.dll")
VOID Sleep(time);

SetTagBit("H_BC1A_MStart",1);
Sleep(500);
SetTagBit("H_BC1A_MStart",0);

}

操作人员按动启动按钮,WinCC将"H_BC1A_MStart"信号传给Step7项目,从而启动设备。但是,当操作人员连击或者多次击启动按钮后,"H_BC1A_MStart"信号就保持长导通,在后一级设备一启动,本级设备也跟着动起来,多次险些酿成事故。我在Step7中增加下面的程序以求解决问题:
A   M   103.0
=   L        0.0
A   L        0.0
AN    T    103
=   M    104.0
A   L        0.0
BLD     102
L    S5T#500MS
SD   T  103

用M104.0代替M103.0(M103.0就是WinCC里的"H_BC1A_MStart"),安全问题不会发生了,但是,根本性的"H_BC1A_MStart"问题还是存在,操作人员如果不对启动按钮进行再击的话,设备无法启动,请问大侠们,如果只是改动WinCC而不改动Step7项目,怎么改为好?谢谢!

最佳答案

同楼上,用MessageBox函数确认就可以取消掉长时间点住按钮或者多次点击按钮,让你不能连点鼠标..

另外时间要求不严格的话还可以把SetTagBit("H_BC1A_MStart",1)写到点击鼠标左键事件,把SetTagBit("H_BC1A_MStart",0)写到释放鼠标左键事件去. 这样的话点击鼠标左键发出动作信号,释放左键的时候切断动作信号,不管点多少次鼠标都能执行SetTagBit("H_BC1A_MStart",0).

提问者对于答案的评价:
谢谢!两种方案都可以,都能达到目的。为安全起见,在点击启动按钮后报警器响,要延时15S才能启动设备,操作工没等设备动起来就乱点而造成问题。再次谢谢指导。

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc188123.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年7月26日 上午2:26
下一篇 2017年7月26日 上午2:26

相关推荐