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

📄 manage_whview.cpp

📁 用VC编写的立体仓库的管理软件源程序和设计说明书。
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	
	pDC->SelectObject(pOldPen);
	pDC->SelectObject(pOldBrush);
	pen.DeleteObject();
	bruArm.DeleteObject();
	bruDown.DeleteObject();
}

void CManage_WHView::ThreeCoordinateStep5(CDC *pDC, BOOL bHave)
{
	CBrush bruDown,bruArm,*pOldBrush;
	CPen pen,*pOldPen;
	CRect rcMax,rcMin;
	rcMax.SetRect((int)(m_W*0.025),(int)(m_H*0.485),(int)(m_W*0.055),(int)(m_H*0.53));
	rcMin.left   = (int)(rcMax.left + rcMax.Width() * 0.2);
	rcMin.right  = (int)(rcMax.left + rcMax.Width() * 0.9);
	rcMin.top    = (int)(rcMax.top  + rcMax.Height()* 0.2);
	rcMin.bottom = (int)(rcMax.top  + rcMax.Height()* 0.9);
	pen.CreatePen(PS_SOLID,2,RGB(255,50,0));
	bruDown.CreateSolidBrush(RGB(193,192,192));
	bruArm.CreateSolidBrush(RGB(255,50,0));
	if (bHave)
	{
		pOldPen = pDC->SelectObject(&this->m_pen);
		pOldBrush = pDC->SelectObject(&this->m_bkBrush);
		//轨道
		float x1,x2,ratio;
		x1 = 0.019f; x2 = 0.022f; ratio = 0.018f; 
		for (int i=0;i<10;i++)
		{
			pDC->Rectangle((int)(m_W*(x1+i*ratio)),(int)(m_H*0.31),(int)(m_W*(x2+i*ratio)),(int)(m_H*0.4));
		}
		
		pDC->Rectangle((int)(m_W*0.013),(int)(m_H*0.32),(int)(m_W*0.19),(int)(m_H*0.33));
		pDC->Rectangle((int)(m_W*0.013),(int)(m_H*0.38),(int)(m_W*0.19),(int)(m_H*0.39));
		pDC->SelectStockObject(NULL_PEN);
		//画底盘、手臂
		pOldBrush = pDC->SelectObject(&bruDown);
		pDC->Rectangle((int)(m_W*0.036),(int)(m_H*0.32),(int)(m_W*0.066),(int)(m_H*0.39));		
		pOldBrush = pDC->SelectObject(&bruArm);
		pDC->Rectangle((int)(m_W*0.049),(int)(m_H*0.335),(int)(m_W*0.058),(int)(m_H*0.375));		
		pDC->Rectangle((int)(m_W*0.029),(int)(m_H*0.345),(int)(m_W*0.057),(int)(m_H*0.365));		
		pDC->Rectangle((int)(m_W*0.038),(int)(m_H*0.333),(int)(m_W*0.045),(int)(m_H*0.49));		
		pDC->Rectangle((int)(m_W*0.036),(int)(m_H*0.48),(int)(m_W*0.047),(int)(m_H*0.5));
		pOldPen = pDC->SelectObject(&pen);		
		pDC->MoveTo((int)(m_W*0.031),(int)(m_H*0.508));
		pDC->LineTo((int)(m_W*0.031),(int)(m_H*0.496));
		pDC->LineTo((int)(m_W*0.051),(int)(m_H*0.496));
		pDC->LineTo((int)(m_W*0.051),(int)(m_H*0.508));
		pDC->SelectStockObject(NULL_PEN);
		pDC->SelectObject(&m_haveBoxBrush);
		pDC->Rectangle(rcMin);
		this->m_iThreeCoordinateCurPos = 5;
	}
	else 
	{
		int iMode = pDC->GetROP2();
		pDC->SetROP2(R2_MASKNOTPEN);
		pDC->SelectStockObject(NULL_PEN);
		//画底盘
		pOldBrush = pDC->SelectObject(&bruDown);
		pDC->Rectangle((int)(m_W*0.036),(int)(m_H*0.32),(int)(m_W*0.066),(int)(m_H*0.39));	
		pOldBrush = pDC->SelectObject(&bruArm);
		pDC->Rectangle((int)(m_W*0.049),(int)(m_H*0.335),(int)(m_W*0.058),(int)(m_H*0.375));		
		pDC->Rectangle((int)(m_W*0.029),(int)(m_H*0.345),(int)(m_W*0.057),(int)(m_H*0.365));		
		pDC->Rectangle((int)(m_W*0.038),(int)(m_H*0.333),(int)(m_W*0.045),(int)(m_H*0.49));		
		pDC->Rectangle((int)(m_W*0.036),(int)(m_H*0.48),(int)(m_W*0.047),(int)(m_H*0.5));		
		pOldPen = pDC->SelectObject(&pen);		
		pDC->MoveTo((int)(m_W*0.031),(int)(m_H*0.508));
		pDC->LineTo((int)(m_W*0.031),(int)(m_H*0.496));
		pDC->LineTo((int)(m_W*0.051),(int)(m_H*0.496));
		pDC->LineTo((int)(m_W*0.051),(int)(m_H*0.508));

		pDC->SetROP2(iMode);
		pDC->SelectStockObject(NULL_PEN);
		pDC->SelectObject(&this->m_bkBrush);
		pDC->Rectangle(rcMin);

		//如果位置21的状态等于1,则重画
		if (gpDoc->m_iDeviceStatusArra[20] == 1)
		{
			rcMax.SetRect((int)(m_W*0.013),(int)(m_H*0.44),(int)(m_W*0.063),(int)(m_H*0.55));
			rcMin.left	 = (int)(rcMax.left + rcMax.Width() * 0.2);
			rcMin.right  = (int)(rcMax.left + rcMax.Width() * 0.9);
			rcMin.top    = (int)(rcMax.top  + rcMax.Height()* 0.2);
			rcMin.bottom = (int)(rcMax.top  + rcMax.Height()* 0.9);
			pDC->SelectObject(&this->m_haveTrayBrush);
			pDC->Rectangle(rcMin);
			
			CString sNowNum;	
			sNowNum.Format("%d",gpDoc->m_iNowNum[20]);
			LOGFONT nFont;
			memset(&nFont,0,sizeof(LOGFONT));
			nFont.lfHeight = 15; //字高
			lstrcpy(nFont.lfFaceName,"Arial");  //设置字体
			
			CFont ftNote,*pOldFont;
			ftNote.CreateFontIndirect(&nFont); 
			pOldFont = pDC->SelectObject(&ftNote);
			
			pDC->SetBkColor(RGB(255,153,255));
			pDC->SetTextColor(RGB(0,0,0));
			pDC->DrawText(sNowNum,&rcMin,DT_BOTTOM|DT_CENTER|DT_SINGLELINE);
			
			pDC->SelectObject(pOldFont);
			ftNote.DeleteObject();
		}

		pOldPen = pDC->SelectObject(&m_pen);
		pDC->MoveTo((int)(m_W*0.013),(int)(m_H*0.44));
		pDC->LineTo((int)(m_W*0.063),(int)(m_H*0.44));
	}	
	pDC->SelectObject(pOldPen);
	pDC->SelectObject(pOldBrush);
	pen.DeleteObject();
	bruArm.DeleteObject();
	bruDown.DeleteObject();
}

void CManage_WHView::ThreeCoordinateStep6(CDC *pDC, BOOL bHave)
{
	CBrush bruDown,bruArm,*pOldBrush;
	CPen pen,*pOldPen;
	pen.CreatePen(PS_SOLID,2,RGB(255,50,0));
	bruDown.CreateSolidBrush(RGB(193,192,192));
	bruArm.CreateSolidBrush(RGB(255,50,0));
	if (bHave)
	{
		pOldPen = pDC->SelectObject(&this->m_pen);
		pOldBrush = pDC->SelectObject(&this->m_bkBrush);
		//轨道
		float x1,x2,ratio;
		x1 = 0.019f; x2 = 0.022f; ratio = 0.018f; 
		for (int i=0;i<10;i++)
		{
			pDC->Rectangle((int)(m_W*(x1+i*ratio)),(int)(m_H*0.31),(int)(m_W*(x2+i*ratio)),(int)(m_H*0.4));
		}
		pDC->Rectangle((int)(m_W*0.013),(int)(m_H*0.32),(int)(m_W*0.19),(int)(m_H*0.33));
		pDC->Rectangle((int)(m_W*0.013),(int)(m_H*0.38),(int)(m_W*0.19),(int)(m_H*0.39));
		pDC->SelectStockObject(NULL_PEN);
		//画底盘
		pOldBrush = pDC->SelectObject(&bruDown);
		pDC->Rectangle((int)(m_W*0.09),(int)(m_H*0.32),(int)(m_W*0.12),(int)(m_H*0.39));	
		pOldBrush = pDC->SelectObject(&bruArm);
		pDC->Rectangle((int)(m_W*0.103),(int)(m_H*0.335),(int)(m_W*0.112),(int)(m_H*0.375));
		pDC->Rectangle((int)(m_W*0.083),(int)(m_H*0.345),(int)(m_W*0.111),(int)(m_H*0.365));
		pDC->Rectangle((int)(m_W*0.092),(int)(m_H*0.3),(int)(m_W*0.099),(int)(m_H*0.42));
		pDC->Rectangle((int)(m_W*0.09),(int)(m_H*0.41),(int)(m_W*0.101),(int)(m_H*0.43));
		pOldPen = pDC->SelectObject(&pen);
		pDC->MoveTo((int)(m_W*0.085),(int)(m_H*0.438));
		pDC->LineTo((int)(m_W*0.085),(int)(m_H*0.426));
		pDC->LineTo((int)(m_W*0.105),(int)(m_H*0.426));
		pDC->LineTo((int)(m_W*0.105),(int)(m_H*0.438));
		this->m_iThreeCoordinateCurPos = 6;
	}
	else 
	{
		int iMode = pDC->GetROP2();
		pDC->SetROP2(R2_MASKNOTPEN);
		pDC->SelectStockObject(NULL_PEN);
		//画底盘
		pOldBrush = pDC->SelectObject(&bruDown);
		pDC->Rectangle((int)(m_W*0.09),(int)(m_H*0.32),(int)(m_W*0.12),(int)(m_H*0.39));
		pOldBrush = pDC->SelectObject(&bruArm);
		pDC->Rectangle((int)(m_W*0.103),(int)(m_H*0.335),(int)(m_W*0.112),(int)(m_H*0.375));
		pDC->Rectangle((int)(m_W*0.083),(int)(m_H*0.345),(int)(m_W*0.111),(int)(m_H*0.365));
		pDC->Rectangle((int)(m_W*0.092),(int)(m_H*0.3),(int)(m_W*0.099),(int)(m_H*0.42));
		pDC->Rectangle((int)(m_W*0.09),(int)(m_H*0.41),(int)(m_W*0.101),(int)(m_H*0.43));
		pOldPen = pDC->SelectObject(&pen);
		pDC->MoveTo((int)(m_W*0.085),(int)(m_H*0.438));
		pDC->LineTo((int)(m_W*0.085),(int)(m_H*0.426));
		pDC->LineTo((int)(m_W*0.105),(int)(m_H*0.426));
		pDC->LineTo((int)(m_W*0.105),(int)(m_H*0.438));
		pDC->SetROP2(iMode);
	}
	pDC->SelectObject(pOldPen);
	pDC->SelectObject(pOldBrush);
	pen.DeleteObject();
	bruArm.DeleteObject();
	bruDown.DeleteObject();
}

void CManage_WHView::OnTimer(UINT nIDEvent) 
{
	CDC *pDC = GetDC();
	int iBeginSite(0),iEndSite(0),iTask(0);

	CAdoConnection cn;
	CAdoRecordSet  rs,rsLift;
	
	if (nIDEvent == 1 && !gpDoc->m_bTimeDealing)
	{
		gpDoc->m_bTimeDealing = TRUE;

		//六坐标机械手臂任务
		cn.OpenUDLFile(gstrConSQLSer);
		rs.SetAdoConnection(&cn);
		rs.Open("T_RobortArm_Task_Step",adCmdTable);
		if (rs.GetRecordCount() > 0)
		{
			rs.MoveFirst();
			rs.GetCollect("F_BeginSite",iBeginSite);
			rs.GetCollect("F_EndSite",iEndSite);
			rs.Delete();
		}
		rs.Close();
		cn.Close();
		
		switch(iBeginSite)
		{
		case 1:	this->RobortArmStep1(pDC,false); break;
		case 2:	this->RobortArmStep2(pDC,false); break;
		case 3:	this->RobortArmStep3(pDC,false); break;
		case 4:	this->RobortArmStep4(pDC,false); break;
		case 5:	this->RobortArmStep5(pDC,false); break;
		case 6:	this->RobortArmStep6(pDC,false); break;
		case 7:	this->RobortArmStep7(pDC,false); break;
		}
		
		switch(iEndSite)
		{
		case 1:	this->RobortArmStep1(pDC,true);	break;
		case 2:	this->RobortArmStep2(pDC,true);	break;
		case 3:	this->RobortArmStep3(pDC,true);	break;
		case 4:	this->RobortArmStep4(pDC,true);	break;
		case 5:	this->RobortArmStep5(pDC,true);	break;
		case 6:	this->RobortArmStep6(pDC,true);	break;
		case 7:	this->RobortArmStep7(pDC,true);	break;
		}
		//如果堆垛机有任务,则执行
		LiftTaskExecute(pDC);
		gpDoc->m_bTimeDealing = FALSE;
	}
	else if (nIDEvent == 2 && !gpDoc->m_bTimeDealing)
	{
		gpDoc->m_bTimeDealing = TRUE;

		int iState(0),iIndex(0),iNowNum(0),iChangePos(0);
		CRect rectAll,rect,rc;

		//刷新设备当前状态
		cn.OpenUDLFile(gstrConSQLSer);
		rs.SetAdoConnection(&cn);
		rs.Open("T_Device_Site_State",adCmdTable);
		while (!rs.IsEOF())
		{
			rs.GetCollect("F_Index",iIndex);
					
			//判断货物、木箱和托盘状态是否发生改变
			if (iIndex != 30)
			{
				rs.GetCollect("F_State",iState);
				rs.GetCollect("F_NowNum",iNowNum);
				rectAll.SetRect((int)(m_W*gpDoc->m_dCoordinateX1Arra[iIndex-1]),
								(int)(m_H*gpDoc->m_dCoordinateY1Arra[iIndex-1]),
								(int)(m_W*gpDoc->m_dCoordinateX2Arra[iIndex-1]),
								(int)(m_H*gpDoc->m_dCoordinateY2Arra[iIndex-1]));
				
				rc.left	  = (int)(rectAll.left + rectAll.Width()  * 0.2);
				rc.right  = (int)(rectAll.left + rectAll.Width()  * 0.9);
				rc.top    = (int)(rectAll.top  + rectAll.Height() * 0.2);
				rc.bottom = (int)(rectAll.top  + rectAll.Height() * 0.9);
				
				if (iState != gpDoc->m_iDeviceStatusArra[iIndex-1])
				{
					if (gpDoc->m_iDeviceKind[iIndex-1] == 1)
					{
						switch(iState)
						{
						case 0:	pDC->SelectObject(&m_bkBrush);		break;
						case 1:	pDC->SelectObject(&m_haveGoodsBrush);break;
						}
					}
					else if (gpDoc->m_iDeviceKind[iIndex-1] == 2)
					{
						switch(iState)
						{
						case 0:	pDC->SelectObject(&m_bkBrush);		break;
						case 1:	pDC->SelectObject(&m_haveBoxBrush);break;
						}
					}
					else if (gpDoc->m_iDeviceKind[iIndex-1] == 3)
					{
						switch(iState)
						{
						case 0:	pDC->SelectObject(&m_bkBrush);		break;
						case 1:	pDC->SelectObject(&m_haveTrayBrush);break;
						}
					}
					
					pDC->SelectStockObject(NULL_PEN);
					pDC->Rectangle(rc);
					
					gpDoc->m_iDeviceStatusArra[iIndex-1] = iState;
					iChangePos = iIndex;
				}
				
				//显示货箱和托盘上的当前货物数量
				if (gpDoc->m_iNowNum[iIndex-1] != iNowNum && gpDoc->m_iDeviceKind[iIndex-1] != 1 && iState == 1)
				{
					CString sCount;
					sCount.Format("%d",iNowNum);
					LOGFONT nFont;
					memset(&nFont,0,sizeof(LOGFONT));
					nFont.lfHeight = 15; //字高
					lstrcpy(nFont.lfFaceName,"Arial");  //设置字体
					
					CFont ftNote,*pOldFont;
					ftNote.CreateFontIndirect(&nFont); 
					pOldFont = pDC->SelectObject(&ftNote);
					
					switch (gpDoc->m_iDeviceKind[iIndex-1])
					{
					case 2:	pDC->SetBkColor(RGB( 51,255,255)); break;
					case 3:	pDC->SetBkColor(RGB(255,153,255)); break;
					}
					pDC->SetTextColor(RGB(0,0,0));
					pDC->DrawText(sCount,&rc,DT_BOTTOM|DT_CENTER|DT_SINGLELINE);

					pDC->SelectObject(pOldFont);
					ftNote.DeleteObject();
					
					gpDoc->m_iNowNum[iIndex-1] = iNowNum;
				}
				//判断机械手臂当前位置。重画机械手臂
				if (iChangePos == 25 && m_iRobortArmCurPos == 1)			RobortArmStep1(pDC,TRUE);
				else if (iChangePos == 25 && m_iRobortArmCurPos == 7)		RobortArmStep7(pDC,TRUE);
				else if (iChangePos == 15 && m_iRobortArmCurPos == 5)		RobortArmStep5(pDC,TRUE);
				else if (iChangePos == 18 && m_iRobortArmCurPos == 6)		RobortArmStep6(pDC,TRUE);
				else if (iChangePos == 13 && m_iThreeCoordinateCurPos == 2)	ThreeCoordinateStep2(pDC,TRUE);
				else if (iChangePos == 20 && m_iThreeCoordinateCurPos == 3)	ThreeCoordinateStep3(pDC,TRUE);
				else if (iChangePos == 23 && m_iThreeCoordinateCurPos == 4)	ThreeCoordinateStep4(pDC,TRUE);
				else if (iChangePos == 21 && m_iThreeCoordinateCurPos == 5)	ThreeCoordinateStep5(pDC,TRUE);
			}
			rs.MoveNext();
		}
		rs.Close();
		//判断堆垛机是否有任务
		rs.Open("select * from T_Device_Site_State where F_Index=30",adCmdText);
		rs.GetCollect("F_State",iState);
		rs.GetCollect("F_NowNum",iNowNum);
		rs.Close();
		CString sLiftSQL;
		if (iState !=0 || iNowNum != 0)
		{
			if (gpDoc->m_iLiftStatus > iState)
			{
				for (gpDoc->m_iLiftStatus;gpDoc->m_iLiftStatus>=iState;gpDoc->m_iLiftStatus--)
				{
					if (gpDoc->m_iLiftStatus != iState)
					{
						sLiftSQL.Format("INSERT INTO T_Lift_Site(F_BeginSite,F_EndSite)VALUES(%d,%d)",gpDoc->m_iLiftStatus,gpDoc->m_iLiftStatus-1);
						cn.Execute(sLiftSQL,adCmdText);
					}
				}
			}
			else if (gpDoc->m_iLiftStatus < iState)
			{
				for (gpDoc->m_iLiftStatus;gpDoc->m_iLiftStatus<=iState;gpDoc->m_iLiftStatus++)
				{
					if (gpDoc->m_iLiftStatus != iState)
					{
						sLiftSQL.Format("INSERT INTO T_Lift_Site(F_BeginSite,F_EndSite)VALUES(%d,%d)",gpDoc->m_iLiftStatus,gpDoc->m_iLiftStatus+1);
				

⌨️ 快捷键说明

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