技术论坛

 回复:关于WINCC全局脚本问题的请教!!!

返回主题列表
作者 主题
kaidy
侠圣

经验值:2029
发帖数:705
精华帖:1
楼主    2011-01-25 23:43:35
主题:关于WINCC全局脚本问题的请教!!!
各位大侠,我有个WINCC全局脚本的问题很困惑,烦请你们帮我释怀惑!具体程序如下:#include "apdefap.h"

int gscAction( void )
{
int i;
float Data[2];
float DISPLAY[2];//用于显示班产量 实时刷新
float TOTAL[2];//用于系统所有产量统计

//if (GetTagBit("QIDONG"))//取得启动信号后工作
//{
if(GetTagBit("M111501_5")&(GetTagFloat("CL1")<=280)&(GetTagFloat("CL1")>=0))
{
Data[0]=GetTagFloat("ARCHIVE.1#");//获取上次累计数据缓冲区数据
Data[0]=Data[0]+GetTagFloat("CL1")/3600;
SetTagFloat("ARCHIVE.1#",Data[0]);
}

if(GetTagBit("M112001_5")&(GetTagFloat("CL2")<=70))
{
Data[1]=GetTagFloat("ARCHIVE.2#");
Data[1]=Data[1]+GetTagFloat("CL2")/3600;
SetTagFloat("ARCHIVE.2#",Data[1]);

}
//};
return 0;

}
此程序触发器的定时器为1秒钟,即1秒钟执行一次。
但是我在做模拟的时候,“M111501_5”赋值为1,"CL1"赋值200,即满足执行if(GetTagBit("M111501_5")&(GetTagFloat("CL1")<=280)&(GetTagFloat("CL1")>=0))的条件,按理来说
Data[0]=GetTagFloat("ARCHIVE.1#");//获取上次累计数据缓冲区数据
Data[0]=Data[0]+GetTagFloat("CL1")/3600;
SetTagFloat("ARCHIVE.1#",Data[0]);
应该会执行,也就是说"ARCHIVE.1#"1秒钟会变化一次,将"ARCHIVE.1#"在WINCC画面上显示出来也应会有相应的变化,可是"ARCHIVE.1#"在画面上显示的值却一直都是0,不知道是为什么?此程序原来是在WINCC5.1版的,我后来移植到WINCC6.0后就不行了。这是为什么呢?
还有就是有一个关于GetTagFloat("CL1")<=280的问题,如果我要在画面上输入任一个变量值作为判断条件的话,比如说CL1_SP,我在画面可是给CL_SP赋值100、150、200等等任意值,语句是不是GetTagFloat("CL1")<=GetTagFloat("CL1_SP")
I can do anything if I want
冲向蓝天
侠士

经验值:1821
发帖数:229
精华帖:2
5楼    2011-01-26 13:12:25
精华帖  主题:回复:关于WINCC全局脚本问题的请教!!!
在第一个if的最后面加上如下
sprintf(tmpBegin, "结果:%2.3f",Data[0]);
MessageBox(NULL,tmpBegin, "窗口确认",MB_YESNOMB_ICONQUESTIONMB_SYSTEMMODAL);
先定义tmpBegin变量
char tmpBegin[100];

就是改成这样:
int i;
char tmpBegin[100];
float Data[2];

float DISPLAY[2];//用于显示班产量 实时刷新

float TOTAL[2];//用于系统所有产量统计



//if (GetTagBit("QIDONG"))//取得启动信号后工作

//{

if(GetTagBit("2")&(GetTagFloat("Font-X")<=280)&(GetTagFloat("Font-X")>=0))

{



Data[0]=GetTagFloat("fly");//获取上次累计数据缓冲区数据

Data[0]=Data[0]+GetTagFloat("Font-X")/3600;

SetTagFloat("fly",Data[0]);

sprintf(tmpBegin, "结果:%2.3f",Data[0]);
MessageBox(NULL,tmpBegin, "窗口确认",MB_YESNOMB_ICONQUESTIONMB_SYSTEMMODAL);
}

内部变量我给改了名字了,你自己改回原先的行了。
如果没有弹出对话框,就把
sprintf(tmpBegin, "结果:%2.3f",Data[0]);
MessageBox(NULL,tmpBegin, "窗口确认",MB_YESNOMB_ICONQUESTIONMB_SYSTEMMODAL);
往上放,直到出现对话框,就知道问题出在哪了。
起飞!
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。