📄 workproc.cpp
字号:
current=m_APP_Current_Pos;
else
current=m_APP_Current; //YNRN=FLOW时,流量
//紧密关闭处理
k1=T*T/(m_mm+m_mK*T);
k2=(m_mK*T+2*m_mm)/(m_mm+m_mK*T);
k3=m_mm/(m_mm+m_mK*T);
k4=T*T/(m_mm+m_mK*T);
if((current-m_Valve_Pos)>m_DEBA)
{
m_mP1=p1;
m_mP2=0.0;
if(m_mW1-m_mW2>=0.1)
k5=1.0;
else if(m_mW1-m_mW2<-0.1)
k5=-1.0;
else k5=0;
}
else if((current-m_Valve_Pos)<-m_DEBA)
{
m_mP1=0.0;
m_mP2=p2;
if(m_mW1-m_mW2>=0.1)
k5=1.0;
else if(m_mW1-m_mW2<-0.1)
k5=-1.0;
else k5=0;
}
else
m_mF=0.0;
m_mW=k1*(m_mP1-m_mP2)+k2*m_mW1-k3*m_mW2-k4*k5*m_mF;
//m_mW为反馈的位置百分比
//实际是经电位器测量,经换算而得
if(m_mW<0) m_mW=0;
if(m_mW>100) m_mW=100;
/*
if(m_YCLS==1 || m_YCLS==2 || m_YCLS==3) //紧密关闭
{
if(m_YCLS==1 && m_APP_Current>99.0)
m_mW=m_mW-(m_YCUP-m_YE);
else if(m_YCLS==2 && m_APP_Current<1.0)
m_mW=m_mW+m_YA-m_YCDO;
else if(m_YCLS==3)
{
if(m_APP_Current>99.0)
{
m_mW=m_mW-(m_YCUP-m_YE);
if(m_mW<0) m_mW=0;
}
else if(m_APP_Current<1.0)
{
m_mW=m_mW+m_YA-m_YCDO;
}
}
}
*/
//阀实际位置
m_Valve_Pos=m_mW;
//将阀位置YA至YE数 转换成0至100%
m_Valve_Flow=100/(m_YE-m_YA)*(m_Valve_Pos-m_YA);
m_Valve_Check_Pos=m_Valve_Flow;
//将阀位置转换为流量,线性,等百分比,反等百分比,表插值
m_Valve_Flow=Work_Valve_Translate(m_Valve_Flow);
//m_Valve_Flow 当前阀流量
//用于计算
if(m_YNRM==0) //YNRM=MPOS时,行程显示
m_Valve_Pos=m_Valve_Pos;
else //YNRM=FLOW时,流量显示
m_Valve_Pos=m_Valve_Flow;
m_mA=m_mW*16.0/100.0+4.0;
W_Edit->Text=CurrToStr(m_mW);
A_Edit->Text=CurrToStr(m_mA);
if(m_mP1>0.01)
{
P1_Panel->Color=clRed;
m_Valve1_State=1;
}
else
{
m_Valve1_State=0;
P1_Panel->Color=clBtnFace;
}
if(m_mP2>0.01)
{
m_Valve2_State=1;
P2_Panel->Color=clRed;
}
else
{
m_Valve2_State=0;
P2_Panel->Color=clBtnFace;
}
Check_Number();
m_mW2=m_mW1;
m_mW1=m_mW;
}
///////////////////////////////////////////////////////////
//10、手动时控制
//需修改
void TMainForm::Work_Valve_Model_Mani(int d)
{
double k1,k2,k3,k4,k5,T=1,current,p1,p2;
// double max_p,min_p;
m_mP1=0.0;
m_mP2=0.0;
p1=P1_Edit->Text.ToDouble();
p2=P2_Edit->Text.ToDouble();
m_mK=K_Edit->Text.ToDouble();
m_mK=K_Edit->Text.ToDouble();
m_mF=F_Edit->Text.ToDouble();
m_mm=m_Edit->Text.ToDouble();
m_APP_Current=In_Edit->Text.ToDouble();
current=(m_APP_Current-4)*100.0/16.0;
k1=T*T/(m_mm+m_mK*T);
k2=(m_mK*T+2*m_mm)/(m_mm+m_mK*T);
k3=m_mm/(m_mm+m_mK*T);
k4=T*T/(m_mm+m_mK*T);
if(d==1)
{
m_mP1=p1;
m_mP2=0.0;
if(m_mW1-m_mW2>=0.1)
k5=1.0;
else if(m_mW1-m_mW2<-0.1)
k5=-1.0;
else k5=0;
}
else if(d==0)
{
m_mP1=0.0;
m_mP2=p2;
if(m_mW1-m_mW2>=0.1)
k5=1.0;
else if(m_mW1-m_mW2<-0.1)
k5=-1.0;
else k5=0;
}
m_mW=k1*(m_mP1-m_mP2)+k2*m_mW1-k3*m_mW2-k4*k5*m_mF;
if(m_mP1>0.01)
P1_Panel->Color=clRed;
else
P1_Panel->Color=clBtnFace;
if(m_mP2>0.01)
P2_Panel->Color=clRed;
else
P2_Panel->Color=clBtnFace;
// max_p=MaxEdit->Text.ToDouble();
// min_p=MinEdit->Text.ToDouble();
if(m_mW<m_YA) m_mW=m_YA;
if(m_mW>m_YE) m_mW=m_YE;
m_mW2=m_mW1;
m_mW1=m_mW;
m_mA=m_mW*16.0/100.0+4.0;
W_Edit->Text=CurrToStr(m_mW);
A_Edit->Text=CurrToStr(m_mA);
if(m_YNRM!=0 && m_System_State==1) //YNRM=MPOS时,需计算
m_Valve_Pos=100/(m_YE-m_YA)*(m_mW-m_YA);
else
m_Valve_Pos=m_mW;
}
///////////////////////////////////////////////////////////
//11、手动时控制,未初始化时
//需修改
void TMainForm::Work_Valve_Model_Mani_Noini(int d)
{
double k1,k2,k3,k4,k5,T=1,current,p1,p2;
double max_p,min_p;
int z,b;
m_mP1=0.0;
m_mP2=0.0;
p1=P1_Edit->Text.ToDouble();
p2=P2_Edit->Text.ToDouble();
m_mK=K_Edit->Text.ToDouble();
m_mK=K_Edit->Text.ToDouble();
m_mF=F_Edit->Text.ToDouble();
m_mm=m_Edit->Text.ToDouble();
m_APP_Current=In_Edit->Text.ToDouble();
current=(m_APP_Current-4)*100.0/16.0;
k1=T*T/(m_mm+m_mK*T);
k2=(m_mK*T+2*m_mm)/(m_mm+m_mK*T);
k3=m_mm/(m_mm+m_mK*T);
k4=T*T/(m_mm+m_mK*T);
if(d==1)
{
m_mP1=p1;
m_mP2=0.0;
if(m_mW1-m_mW2>=0.1)
k5=1.0;
else if(m_mW1-m_mW2<-0.1)
k5=-1.0;
else k5=0;
}
else if(d==0)
{
m_mP1=0.0;
m_mP2=p2;
if(m_mW1-m_mW2>=0.1)
k5=1.0;
else if(m_mW1-m_mW2<-0.1)
k5=-1.0;
else k5=0;
}
m_mW=k1*(m_mP1-m_mP2)+k2*m_mW1-k3*m_mW2-k4*k5*m_mF;
if(m_mP1>0.01)
P1_Panel->Color=clRed;
else
P1_Panel->Color=clBtnFace;
if(m_mP2>0.01)
P2_Panel->Color=clRed;
else
P2_Panel->Color=clBtnFace;
max_p=MaxEdit->Text.ToDouble();
min_p=MinEdit->Text.ToDouble();
if(m_mW<min_p) m_mW=min_p;
if(m_mW>max_p) m_mW=max_p;
m_mW2=m_mW1;
m_mW1=m_mW;
m_mA=m_mW*16.0/100.0+4.0;
W_Edit->Text=CurrToStr(m_mW);
A_Edit->Text=CurrToStr(m_mA);
z=zEdit->Text.ToInt();
b=bEdit->Text.ToInt();
if(b!=0)
{
if(z==0)
m_Valve_Pos=m_mW;
else
m_Valve_Pos=100.0-m_mW;
}
}
void TMainForm::Work_Func_Key(void)
{
if(m_Work_AM==0)
m_Work_AM=1;
else
m_Work_AM=0;
Parm_Save();
}
void TMainForm::Work_Start(void)
{
m_Work_State=0;
Work_Timer->Enabled=true;
Disp_Debug_Param();
}
void TMainForm::Work_Sub_Key(void)
{
if(m_System_State==1) //当前系统状态,0未初始化1已初始化
{
if(m_Work_AM==0) //当前系统状态,0手动1自动
Work_Valve_Model_Mani(0);
}
else
{
Work_Valve_Model_Mani_Noini(0);
}
}
void TMainForm::Work_Add_Key(void)
{
if(m_System_State==1) //当前系统状态,0未初始化1已初始化
{
if(m_Work_AM==0) //当前系统状态,0手动1自动
Work_Valve_Model_Mani(1);
}
else
{
Work_Valve_Model_Mani_Noini(1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -