总结,工程用的两个小功能:利用C语言实现。

已锁定

呆板吧

西门子1847工业学习平台

  • 帖子

    1151
  • 精华

    6
  • 被关注

    6

论坛等级:奇侠

注册时间:2006-12-19

普通 普通 如何晋级?

总结,工程用的两个小功能:利用C语言实现。

5256

16

2009-01-06 10:01:24

star star star
自己并不会用C语言,都是在论坛上提出问题,大侠们帮助回答的,再自己组合完善的。这次项目正好用上。
1:在WINCC运行后的画面总貌上加了计算器功能:方便操作人员用。
做一个按扭后,添加 C脚本:
{
HWND Hwnd;
BOOL bRet;
Hwnd=FindWindow(NULL,"Calculator");
if (!Hwnd)
{
ProgramExecute("CALC.exe");
Hwnd=FindWindow(NULL,"Calculator");
if (Hwnd)
{
printf("\r\n%d",Hwnd);
bRet=SetWindowPos(Hwnd,HWND_TOPMOST,300,300,200,200,SWP_NOSIZE);
if (!bRet) printf("\r\nSetWindowPos Error!");
}
}
}
如果在C脚本中仅仅有一句ProgramExecute("CALC.exe")
则运行后点击该按扭则出来计算器,此时不关计算器就切换画面,则计算器都在后台运行。最初我这样做关闭WINCC运行画面后发现后面有几十个计算器都没关。所以在脚本中加入使计算器必须显示在WINDOW的激活层上。

二:当对按钮操作需要二次确认时得自己一个个做小窗口,很麻烦。
所以就想利用WINDOWS的标准对话框:

同时也要求对话框出现后必须保持在激活窗口中。


直接在需要二次确认的按钮添加脚本:
{
HWND Hwnd;
Hwnd = FindWindow(NULL,"WinCC-运行系统 - "); //英文版变为"WinCC-Runtime - "
if (!Hwnd) Hwnd = FindWindow(NULL,"WinCC-Runtime - ");
if (!Hwnd) printf("\r\nGetWinCC Handle Failed!");
MessageBox(Hwnd,"Error Text","My Error Box",MB_OKMB_ICONEXCLAMATIONMB_SETFOREGROUNDMB_SYSTEMMODAL);
}
WINDOWS中提供的标准对话框我知道的有三种
MessageBox(Hwnd,"Error Text","My Error Box",MB_OKMB_ICONEXCLAMATIONMB_SETFOREGROUNDMB_SYSTEMMODAL);

MB_OK///MB_YESNO///MB_YESNOCANCEL
分别是错误框,询问框和YES/NO/CANCEL三按钮询问窗口
功能可以分别自己尝试,把相应的控制功能和按钮结合起来就可以。


自己做关于询问框的程序:

{
BOOL bool1;
HWND Hwnd;
int iRet;
Hwnd = FindWindow(NULL,"WinCC-Runtime - ");
if (!Hwnd) Hwnd = FindWindow(NULL,"WinCC-Runtime - ");
if (!Hwnd) printf("\r\nGetWinCC Handle Failed!");
iRet=MessageBox(Hwnd,"QUESTION Text","My QUESTION Box",MB_YESNOMB_ICONEXCLAMATIONMB_SETFOREGROUNDMB_SYSTEMMODAL);
if(iRet==IDYES)
{
printf("user do YES\r\n");
SetTagBit("m00",1);
}
else
{
printf("user do NO\r\n");
SetTagBit("m00",0);
}
}


自己做YES/NO/CANCEL三按钮询问窗口:
{
BOOL bool1;
HWND Hwnd;
int iRet;
Hwnd = FindWindow(NULL,"WinCC-Runtime - ");
if (!Hwnd) Hwnd = FindWindow(NULL,"WinCC-Runtime - ");
if (!Hwnd) printf("\r\nGetWinCC Handle Failed!");
iRet=MessageBox(Hwnd,"QUESTION Text","My QUESTION Box",MB_YESNOCANCELMB_ICONEXCLAMATIONMB_SETFOREGROUNDMB_SYSTEMMODAL);
switch (iRet)
{
case IDYES: printf("user do YES\r\n");
SetTagBit("m00",1);
break;
case IDNO: printf("user do NO\r\n");
SetTagBit("m00",0);
break;
case IDCANCEL: printf("user do CANCEL\r\n");
break;
}
}

不过觉得WINCC的二次确认功能还是很麻烦。
别的DCS系统自己就提供了二次确认按钮组件,做起来就简单多了
大家对做二次确认按钮有什么好方法还请教我啊
点击此处查看附件
总结,工程用的两个小功能:利用C语言实现。 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC WinCC / Panel

共有32659条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。