📄 calctask.cpp
字号:
#include "stdafx.h"
#include "CalcBasedDDE.h"
#include "CalcBasedDDEDlg.h"
#include "math.h"
#include "resource.h"
#include "CurveData.h"
int M_RunFlag[MchNum];
float curLift=0,M_Flow[MchNum],M_Effi[MchNum],M_Power[MchNum];
extern DDE_DATA ddeReadData[DDE_READ_NUM],ddeWriteData[DDE_WRITE_NUM];
extern BOOL DDEComBusy,CalcBusy;
void InitData();
UINT MainCalcProcess(LPVOID lpParam);
/////////////////////////////////////////////////////////////////////////////
void InitData()
{
//机组运行状态
strcpy(ddeReadData[0].Tagname,"JZ1_RUN");
strcpy(ddeReadData[1].Tagname,"JZ2_RUN");
strcpy(ddeReadData[2].Tagname,"JZ3_RUN");
strcpy(ddeReadData[3].Tagname,"JZ4_RUN");
strcpy(ddeReadData[4].Tagname,"JZ5_RUN");
//机组功率
strcpy(ddeReadData[5].Tagname,"LCU1_EIN008");
strcpy(ddeReadData[6].Tagname,"LCU2_EIN008");
strcpy(ddeReadData[7].Tagname,"LCU3_EIN008");
strcpy(ddeReadData[8].Tagname,"LCU4_EIN008");
strcpy(ddeReadData[9].Tagname,"LCU5_EIN008");
//机组叶片角度
strcpy(ddeReadData[10].Tagname,"YP_AIN0001");
strcpy(ddeReadData[11].Tagname,"YP_AIN0002");
strcpy(ddeReadData[12].Tagname,"YP_AIN0003");
strcpy(ddeReadData[13].Tagname,"YP_AIN0004");
strcpy(ddeReadData[14].Tagname,"YP_AIN0005");
//当前扬程
strcpy(ddeReadData[15].Tagname,"LCU_LEVEL");
//机组流量
strcpy(ddeWriteData[0].Tagname,"LCU1_FLOW");
strcpy(ddeWriteData[1].Tagname,"LCU2_FLOW");
strcpy(ddeWriteData[2].Tagname,"LCU3_FLOW");
strcpy(ddeWriteData[3].Tagname,"LCU4_FLOW");
strcpy(ddeWriteData[4].Tagname,"LCU5_FLOW");
//机组效率
strcpy(ddeWriteData[5].Tagname,"LCU1_EFF");
strcpy(ddeWriteData[6].Tagname,"LCU2_EFF");
strcpy(ddeWriteData[7].Tagname,"LCU3_EFF");
strcpy(ddeWriteData[8].Tagname,"LCU4_EFF");
strcpy(ddeWriteData[9].Tagname,"LCU5_EFF");
}
FLOAT CalMFlow(int no,float lift,float angel)
{
int i;
float result=0,Temp1,Temp2;
if (angel>dAngl[dAnglNum-1])
angel=dAngl[dAnglNum-1];
if (angel<dAngl[0])
angel=dAngl[0];
for (i=0;i<dAnglNum;i++)
{
if (angel>=dAngl[i] && angel<=dAngl[i+1])
{
Temp1=(angel-dAngl[i])*(dFlow[no+1][i+1]-dFlow[no+1][i])/(dAngl[i+1]-dAngl[i])+dFlow[no+1][i];
Temp2=(angel-dAngl[i])*(dFlow[no][i+1]-dFlow[no][i])/(dAngl[i+1]-dAngl[i])+dFlow[no][i];
break;
}
}
result=(lift-dLift[no])*(Temp1-Temp2)/(dLift[no+1]-dLift[no])+Temp2;
return (result);
}
FLOAT CalMEffi(float lift,float flow,float power)
{
float result=0;
if (power>0.01)
{
result=(float)(100*(9.81*flow*lift/power));
if (result>MAX_EFFI) result=MAX_EFFI;
if (result<MIN_EFFI) result=MIN_EFFI;
}
else
{
result=0;
}
return (result);
}
UINT MainCalcProcess(LPVOID lpParam)
{
CCalcBasedDDEDlg *pDlg= (CCalcBasedDDEDlg *)lpParam;
int i,nLift;
float TFlow;
float M_Angle[MchNum];
BOOL NoAngData[MchNum];
for (i=0; i<MchNum; i++)
{
NoAngData[i]=FALSE;
}
while (pDlg->mainAlive)
{
//等待读数据完成事件
while (DDEComBusy)
Sleep(20);
CalcBusy=TRUE;
//取得机组运行状态数据
for (i=0; i<MchNum; i++)
{
if (ddeReadData[i].value != BAD_DATA)
{
M_RunFlag[i]=(int)ddeReadData[i].value;
}
}
//取得机组有功功率数据
for (i=0; i<MchNum; i++)
{
if (ddeReadData[MchNum+i].value != BAD_DATA)
M_Power[i]=ddeReadData[MchNum+i].value;
}
//取得机组叶片角度数据
for(i=0; i<MchNum; i++)
{
if(ddeReadData[2*MchNum+i].value != BAD_DATA)
{
M_Angle[i]=ddeReadData[2*MchNum+i].value;
NoAngData[i]=FALSE;
}
else
NoAngData[i]=TRUE;
}
//取得当前扬程数据
if(ddeReadData[3*MchNum].value != BAD_DATA)
curLift=ddeReadData[3*MchNum].value;
//计算扬程数组索引
if (curLift<dLift[0])
nLift=0;
else if (curLift>dLift[dLiftNum-1])
nLift=dLiftNum-2;
else
{
for(i=0;i<dLiftNum;i++)
{
if ( curLift>=dLift[i] && curLift<=dLift[i+1])
{
nLift=i;
break;
}
}
}
//计算流量、效率
for(i=0; i<MchNum; i++)
{
if((M_RunFlag[i]==1) && (!NoAngData[i]))
{
M_Flow[i]=CalMFlow(nLift,curLift,M_Angle[i]);
M_Effi[i]=CalMEffi(curLift,M_Flow[i],M_Power[i]);
}
else
{
M_Flow[i]=0.0f;
M_Effi[i]=0.0f;
}
TFlow=TFlow+M_Flow[i];
}
//赋值到DDE写缓存
for (i=0; i<MchNum; i++)
{
ddeWriteData[i].value =M_Flow[i];
ddeWriteData[i+MchNum].value=M_Effi[i];
}
CalcBusy=FALSE;
Sleep(300);
}
if (pDlg)
{
if (pDlg->mainAlive)
pDlg->SendMessage(WM_COMMAND,IDOK,0);
}
return 333;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -