⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mdlg.cpp

📁 为朋友编写的 分油机运行工况仿真程序 采用MFC编写
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			if(m_kj[22].GetN()) return;

			if(errn==0) return;

			if(isrun==1)
			{
				m_errout.Adderr(1,"上一个步骤还未完成");
				return;
			}

			for(int i=2;i<5;i++)
			{
				if(!m_kj[i].GetN())
				{
					m_kj[bufi].ChangeN(0);
					sbuf.Format("手动阀%d还没有开启",i+1);
					m_errout.Adderr(1,sbuf);
					return;
				}
			}

			if(!m_kj[21].GetN())
			{
				sbuf.Format("分油机马达还没有开启",i+1);
				m_errout.Adderr(1,sbuf);
				return;
			}

			m_kj[bufi].ChangeN(1);
			for(int i=2;i<5;i++)
				m_kj[i].SetUse(0);
			if(errn==1) prog=err_gl;
			else prog=oilpump;
			isrun=1;
			setp=0;
			dlay=0;
			m_errout.Adderr(0,"启动油泵");
		}
		else if(bufi==28)//故障设置
		{
			if(errn!=-1) m_kj[28].ChangeN(1);
			else m_kj[28].ChangeN(0);
			for(int i=21;i<26;i++)
			{
				if(m_kj[i].GetN())
				{
					m_errout.Adderr(1,"系统已启动不能设置故障");
					return;
				}
			}
			//设置故障
			CSeterr errset;
			errset.issecl=errn;
			errset.DoModal();
			errn=errset.issecl;
			if(errn!=-1) m_kj[28].ChangeN(1);
			else m_kj[28].ChangeN(0);
		}
		else if(bufi==23)// 加热器
		{
			if(m_kj[23].GetN()) return;

			if(errn==0||errn==1) return;

			if(isrun==1)
			{
				m_errout.Adderr(1,"上一个步骤还未完成");
				return;
			}

			for(int i=7;i<9;i++)
			{
				if(!m_kj[i].GetN())
				{
					m_kj[bufi].ChangeN(0);
					sbuf.Format("手动阀%d还没有开启",i+1);
					m_errout.Adderr(1,sbuf);
					return;
				}
			}
			if(!m_kj[22].GetN())
			{
				sbuf.Format("油泵还没有开启",i+1);
				m_errout.Adderr(1,sbuf);
				return;
			}

			m_kj[bufi].ChangeN(1);
			for(int i=7;i<9;i++)
				m_kj[i].SetUse(0);
			if(errn==2) prog=err_ht;
			else prog=heater;
			isrun=1;
			setp=0;
			dlay=0;
			m_errout.Adderr(0,"启动加热器");
		}
		else if(bufi==21)//分油机
		{
			if(m_kj[21].GetN()) return;

			if(isrun==1)
			{
				m_errout.Adderr(1,"上一个步骤还未完成");
				return;
			}

			if(errn==0)
			{
				prog=err_fy;
				m_kj[bufi].ChangeN(0);
			}
			else
			{
				prog=sep;
				m_kj[bufi].ChangeN(1);
			}
			isrun=1;
			setp=0;
			dlay=0;
			m_errout.Adderr(0,"启动分油机马达");
		}
		else if(bufi==25) //Discharge
		{
			if(m_kj[25].GetN()) return;

			if(errn>=0&&errn<10) return;

			if(isrun==1)
			{
				m_errout.Adderr(1,"上一个步骤还未完成");
				return;
			}

			if(m_kj[24].GetN())
			{
				if(m_kj[20].GetN())	//分杂
				{
					prog=disr2;
				}
				else
				{
					switch(errn) {
					case 10:
						prog=err_psp;
						break;
					default:prog=disr;
					}
				}
				m_kj[25].ChangeN(1);
				isrun=1;
				setp=0;
				dlay=0;
			}
			else
			{
			}
		}
		else if(bufi==27)	//重置
		{
			for(int i=0;i<3;i++)
			{
				m_youg[i].reset();
			}
			m_kj[27].ChangeN(0);
		}
		else if(bufi==26) //STOP
		{
			m_errout.Adderr(1,"系统停机!");
			isrun=0;
			dostop=1;
			dlay=0;
			setp=0;
			for(int i=0;i<10;i++)
				m_kj[i].SetUse(1);
			for(int i=10;i<20;i++)
				m_kj[i].ChangeN(0);
			m_kj[20].SetUse(1);
			for(int i=21;i<26;i++)
			{
				m_kj[i].SetUse(1);
				m_kj[i].ChangeN(0);
			}
			m_kj[27].ChangeN(0);
			for(int i=0;i<19;i++)
				m_dh[i].ChangeN(0);
			for(int i=0;i<4;i++)
				setshow[i]=0;
			for(int i=0;i<3;i++)
			{
				m_youg[i].SetCanchage(0);
				m_youg[i].reset();
			}
		}
	}

	CDialog::OnLButtonDown(nFlags, point);
}

//判断坐标点
int CMDLG::chkrect(CPoint point)
{
	for(int bufi=0;bufi<29;bufi++)
	{	
		if(bufi<10||bufi>19&&bufi<29)
		{
			if(m_kj[bufi].ckrect(point)) return bufi;
		}
	}
	return -1;
}

void CMDLG::Drewme(void)
{
//	if(!isactive) return;//未激活
	CDC *dc=GetDC();

	for(int bufi=0;bufi<3;bufi++)
	{
		str[bufi].Format("%.2fM",(float)show[bufi]/100);
	}
	str[3].Format("%d℃",show[3]);
	UpdateData(FALSE);

	for(int bufi=0;bufi<30;bufi++)
		m_kj[bufi].Drew(&bitmap[0],dc);
	for(int bufi=0;bufi<21;bufi++)
		m_dh[bufi].Drew(&bitmap[0],dc);
	for(int bufi=0;bufi<3;bufi++)
		m_youg[bufi].Drew(&bitmap[0],dc);
	m_errout.Drew(&bitmap[0],dc);
	ReleaseDC(dc);
}

void CMDLG::chk()
{
	int j;
	for(int i=0;i<4;i++)
	{
		if(show[i]<setshow[i]-1)
		{
			show[i]+=2;
		}
		else if(show[i]>setshow[i]+2)
		{
			show[i]-=2;
			if(setshow[i]==0&&show[i]<0)
				show[i]=0;
		}
		else
		{
			j=rand()%3-1;
			if(show[i]+j<=setshow[i]+1&&show[i]+j>=setshow[i]-1) show[i]+=j;
		}
	}

	//油柜
	if(m_youg[0].shoudreset||m_youg[1].shoudreset||m_youg[2].shoudreset)
	{
		if(!m_kj[27].GetN()) 
		{
			m_errout.Adderr(1,"油柜需要清理");
			m_kj[27].ChangeN(1);
		}
	}
	else
	{
		if(m_dh[2].GetN()&&!m_dh[3].GetN()&&!m_dh[5].GetN()&&!m_youg[0].shoudreset)
			m_youg[0].SetCanchage(1);
		else m_youg[0].SetCanchage(0);
		if(m_dh[9].GetN()&&!m_youg[2].shoudreset)
			m_youg[2].SetCanchage(1);
		else m_youg[0].SetCanchage(0);
		if(m_dh[15].GetN()&&!m_youg[1].shoudreset)
			m_youg[1].SetCanchage(1);
		else m_youg[1].SetCanchage(0);
	}
}

void CMDLG::luoji()
{
	int buf;
	int kj,dh;
	CString strbuf;
	if(dlay==0&&isrun==1)
	{
		buf=prog[setp];
		setp++;
		while(buf!=0)
		{
			switch(buf) {
			case 1:						// 改变某阀、开关的状态
				kj=prog[setp];
				setp++;
				dh=prog[setp];
				setp++;
				m_kj[kj].ChangeN(dh);
				if(kj>9&&kj<19)
				{

					if(kj>9&&kj<16)
						strbuf.Format("阀V%d被",kj-9);
					else if(kj==16||kj==17)
						strbuf.Format("阀V%d被",kj-7);
					else if(kj==18)
						strbuf.Format("阀VT被");
					dh==1?strbuf+="打开":strbuf+="关闭";
					m_errout.Adderr(0,strbuf);
				}
				break;
			case 2:						// 改变某箭头状态
				kj=prog[setp];
				setp++;
				dh=prog[setp];
				setp++;
				m_dh[kj].ChangeN(dh);
				break;
			case 3:						// 延时
				kj=prog[setp];
				setp++;
				dlay=kj;
				break;
			case 4:						// 设置一个开关控件能否使用
				kj=prog[setp];
				setp++;
				dh=prog[setp];
				setp++;
				m_kj[kj].SetUse(dh);
				break;
			case -1:					// 退出
				buf=0;
				setp=0;
				dlay=0;
				isrun=0;
				break;
			case 5:						// 提示
				kj=prog[setp];
				setp++;
				dh=prog[setp];
				setp++;
				m_errout.Adderr(kj,errmsg[dh]);
				break;
			case 6:						// 数值显示屏
				kj=prog[setp];
				setp++;
				dh=prog[setp];
				setp++;
				setshow[kj]=dh;
				break;
			}
			if(buf!=0)
			{
				buf=prog[setp];
				setp++;
			}
		}
	}
}

void CMDLG::OnBnClickedA()
{
	show[4]<10?show[4]++:show[4];
	m_youg[0].ste=-show[4]*10-10;
	m_youg[1].ste=show[4]*10;
	m_youg[2].ste=show[4]*5;
	mjd.SetPos(show[4]);
	UpdateData(FALSE);
}

void CMDLG::OnBnClickedJ()
{
	show[4]>1?show[4]--:show[4];
	m_youg[0].ste=-show[4]*10-10;
	m_youg[1].ste=show[4]*10;
	m_youg[2].ste=show[4]*5;
	mjd.SetPos(show[4]);
	UpdateData(FALSE);
}

void CMDLG::showmsg(int sty, int msg)
{
	m_errout.Adderr(sty,errmsg[msg]);
}
/*
void CMDLG::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
	CDialog::OnActivate(nState, pWndOther, bMinimized);

	// TODO: 在此处添加消息处理程序代码
	if(nState==WA_INACTIVE) isactive=0;
	else isactive=1;
	
}
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -