问题:
1、wincc主画面多设备调用同一按钮画面,按钮画面中有启动和停止按钮。
通过C语言设置变量:
#include "apdefap.h"
void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y)
{
#define PW_FP "Top"
#define FP "1FM"
#define TagPrefix "DJ01"
if (y>512)
SetTop(lpszPictureName,PW_FP,y-10);
else
SetTop(lpszPictureName,PW_FP,y-10);
SetTagPrefix(lpszPictureName,PW_FP,TagPrefix);
SetPictureName(lpszPictureName,PW_FP,FP);
if (x<640)
SetLeft(lpszPictureName,PW_FP,x-20);
else
SetLeft(lpszPictureName,PW_FP,x-300);
SetPropChar(lpszPictureName,PW_FP,"CaptionText",GetPropChar(lpszPictureName,lpszObjectName,"ObjectName"));
SetVisible(lpszPictureName,PW_FP,1);
SetText(FP,"StaticTopic",TagPrefix);
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END
和画面中按钮直接连接变量:_OpenValve1开阀;_CloseValve1关阀
即实现通过变量DJ1__OpenValve1开阀和DJ1_CloseValve1关阀,
好像没有问题?!
2、现在的问题是:现在想采用被调用的画面中如果只通过设置一个按钮置位和复位来控制开阀和关阀,按钮画面中按钮如何用C语言实现变量连接:
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
BOOL Z;
Z=GetTagBit("TAG");
if(Z==0) SetTagBit("TAG",1);
else
SetTagBit("TAG",0);
中TAG如何设置?需要添加那些语句函数?
请专家或高手指导。
问题补充:
关于问题2中,被调用按钮有3个,
第1组调用对应变量:m1_start_stop;m2_start_stop;m3_start_stop
第2组调用对应变量:m4_start_stop;m5_start_stop;m6_start_stop
第3组调用对应变量:m7_start_stop;m8_start_stop;m9_start_stop
如何实现变量传送?
谢谢!
最佳答案
这个,有两种方法可以实现。
1、建立项目函数,并在项目函数里面建立全局变量,实现变量参数的传递。这个比较麻烦,不再详述。
2、这个方法是通过建立一个内部8位文本型变量Tag1,用来传递变量参数,这个比较容易实现。具体步骤如下:
a、在打开需要调用的画面的按钮里面加上以下脚本:SetTagChar("Tag1","Start_Stop"); Start_Stop是变量名称,即为控制阀门开启和关闭的BOOL变量名称。现在变量Tag1的内容是“Start_Stop”;
2、在公共画面中建立一个按钮,写上如下脚本:
char *st;
int a;
st=GetTagChar("Tag1");
a=GetTagBit(st);
a=!a;
SetTagWord(st,a);
该脚本即可实现变量“Start_Stop”的翻转。
注意:再点击烦阀门弹出控制画面之前,务必按照步骤1将该阀门的实际变量写到Tag1中去。此外,需要注意的是,此画面不再需要变量前缀。
补充说明:如果变量不多的的话,完全可以参考上述方法,建立三个内部字符型变量,然后将你需要操作的三个变量名称写进这三个内部变量里面就可以了!
提问者对于答案的评价:
谢谢!
不是我要的答案。
你回答的是,单次调用画面。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc213650.html