📄 manage_whview.cpp
字号:
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 + -