int B9Terminal::getEstNextCycleTime(int iCur, int iTgt){ int iDelta = abs(iTgt - iCur); int iRaiseSpd,iLowerSpd,iOpnSpd,iClsSpd,iGap,iBreathe,iSettle; double cutOffPU = pSettings->m_dBTClearInMM*100000.0/(double)pPrinterComm->getPU(); if((double)iTgt<cutOffPU){ iRaiseSpd = pSettings->m_iRSpd1; iLowerSpd = pSettings->m_iLSpd1; iOpnSpd = pSettings->m_iOpenSpd1; iClsSpd = pSettings->m_iCloseSpd1; iGap = (int)(pSettings->m_dOverLift1*100000.0/(double)pPrinterComm->getPU()); iBreathe = pSettings->m_dBreatheClosed1*1000.0; iSettle = pSettings->m_dSettleOpen1*1000.0; } else{ iRaiseSpd = pSettings->m_iRSpd2; iLowerSpd = pSettings->m_iLSpd2; iOpnSpd = pSettings->m_iOpenSpd2; iClsSpd = pSettings->m_iCloseSpd2; iGap = (int)(pSettings->m_dOverLift2*100000.0/(double)pPrinterComm->getPU()); iBreathe = pSettings->m_dBreatheClosed2*1000.0; iSettle = pSettings->m_dSettleOpen2*1000.0; } // Time to move +iDelta + iGap, up and down int iTimeReq = getZMoveTime(iDelta+iGap, iRaiseSpd); iTimeReq += getZMoveTime(iDelta+iGap, iLowerSpd); // Plus time to close + open the vat iTimeReq += getVatMoveTime(iClsSpd)+getVatMoveTime(iOpnSpd); // Plus breathe & settle time; iTimeReq += iBreathe + iSettle; return iTimeReq; }
int B9Terminal::getEstNextCycleTime(int iCur, int iTgt){ int iDelta = abs(iTgt - iCur); int iRaiseSpd,iLowerSpd,iOpnSpd,iClsSpd,iGap,iBreathe,iSettle; double cutOffPU = pSettings->m_dBTClearInMM*100000.0/(double)pPrinterComm->getPU(); if((double)iTgt<cutOffPU){ iRaiseSpd = pSettings->m_iRSpd1; iLowerSpd = pSettings->m_iLSpd1; iOpnSpd = pSettings->m_iOpenSpd1; iClsSpd = pSettings->m_iCloseSpd1; iGap = (int)(pSettings->m_dOverLift1*100000.0/(double)pPrinterComm->getPU()); iBreathe = pSettings->m_dBreatheClosed1*1000.0; iSettle = pSettings->m_dSettleOpen1*1000.0; } else{ iRaiseSpd = pSettings->m_iRSpd2; iLowerSpd = pSettings->m_iLSpd2; iOpnSpd = pSettings->m_iOpenSpd2; iClsSpd = pSettings->m_iCloseSpd2; iGap = (int)(pSettings->m_dOverLift2*100000.0/(double)pPrinterComm->getPU()); iBreathe = pSettings->m_dBreatheClosed2*1000.0; iSettle = pSettings->m_dSettleOpen2*1000.0; } //移动+ iDelta和+ IGAP的时间,向上或向下 int iTimeReq = getZMoveTime(iDelta+iGap, iRaiseSpd); iTimeReq += getZMoveTime(iDelta+iGap, iLowerSpd); // 增加关闭及打开vat的时间 iTimeReq += getVatMoveTime(iClsSpd)+getVatMoveTime(iOpnSpd); // 增加评估和结算时间; iTimeReq += iBreathe + iSettle; return iTimeReq; }
int B9Terminal::getEstCompleteTimeMS(int iCurLayer, int iTotLayers, double dLayerThicknessMM, int iExposeMS) { //return estimated completion time int iTransitionPointLayer = (int)(pSettings->m_dBTClearInMM/dLayerThicknessMM); int iLowerCount = (int)(pSettings->m_dBTClearInMM/dLayerThicknessMM); int iUpperCount = iTotLayers - iLowerCount; if(iLowerCount>iTotLayers)iLowerCount=iTotLayers; if(iUpperCount<0)iUpperCount=0; if(iCurLayer<iTransitionPointLayer)iLowerCount = iLowerCount-iCurLayer; else iLowerCount = 0; if(iCurLayer>=iTransitionPointLayer) iUpperCount = iTotLayers - iCurLayer; int iTotalTimeMS = iExposeMS*iLowerCount + iExposeMS*iUpperCount; iTotalTimeMS = getLampAdjustedExposureTime(iTotalTimeMS); // Add Breathe and Settle iTotalTimeMS += iLowerCount*(pSettings->m_dBreatheClosed1 + pSettings->m_dSettleOpen1)*1000; iTotalTimeMS += iUpperCount*(pSettings->m_dBreatheClosed2 + pSettings->m_dSettleOpen2)*1000; // Z Travel Time int iGap1 = iLowerCount*(int)(pSettings->m_dOverLift1*100000.0/(double)pPrinterComm->getPU()); int iGap2 = iUpperCount*(int)(pSettings->m_dOverLift2*100000.0/(double)pPrinterComm->getPU()); int iZRaiseDistance1 = iGap1 + iLowerCount*(int)(dLayerThicknessMM*100000.0/(double)pPrinterComm->getPU()); int iZLowerDistance1 = iGap1; int iZRaiseDistance2 = iGap2 + iUpperCount*(int)(dLayerThicknessMM*100000.0/(double)pPrinterComm->getPU()); int iZLowerDistance2 = iGap2; iTotalTimeMS += getZMoveTime(iZRaiseDistance1,pSettings->m_iRSpd1); iTotalTimeMS += getZMoveTime(iZRaiseDistance2,pSettings->m_iRSpd2); iTotalTimeMS += getZMoveTime(iZLowerDistance1,pSettings->m_iLSpd1); iTotalTimeMS += getZMoveTime(iZLowerDistance2,pSettings->m_iLSpd2); // Vat movement Time iTotalTimeMS += iLowerCount*getVatMoveTime(pSettings->m_iOpenSpd1) + iLowerCount*getVatMoveTime(pSettings->m_iCloseSpd1); iTotalTimeMS += iUpperCount*getVatMoveTime(pSettings->m_iOpenSpd2) + iUpperCount*getVatMoveTime(pSettings->m_iCloseSpd2); return iTotalTimeMS; }
int B9Terminal::getEstFinalCycleTime(int iCur, int iTgt){ int iDelta = abs(iTgt - iCur); int iRaiseSpd,iClsSpd; double cutOffPU = pSettings->m_dBTClearInMM*100000.0/(double)pPrinterComm->getPU(); if((double)iTgt<cutOffPU){ iRaiseSpd = pSettings->m_iRSpd1; iClsSpd = pSettings->m_iCloseSpd1; } else{ iRaiseSpd = pSettings->m_iRSpd2; iClsSpd = pSettings->m_iCloseSpd2; } // Time to move +iDelta up int iTimeReq = getZMoveTime(iDelta, iRaiseSpd); // time to close the vat iTimeReq += getVatMoveTime(iClsSpd); return iTimeReq; }
int B9Terminal::getEstBaseCycleTime(int iCur, int iTgt){ int iDelta = abs(iTgt - iCur); int iLowerSpd,iOpnSpd,iSettle; double cutOffPU = pSettings->m_dBTClearInMM*100000.0/(double)pPrinterComm->getPU(); if((double)iTgt<cutOffPU){ iLowerSpd = pSettings->m_iLSpd1; iOpnSpd = pSettings->m_iOpenSpd1; iSettle = pSettings->m_dSettleOpen1*1000.0; } else{ iLowerSpd = pSettings->m_iLSpd2; iOpnSpd = pSettings->m_iOpenSpd2; iSettle = pSettings->m_dSettleOpen2*1000.0; } // Time to move iDelta int iTimeReq = getZMoveTime(iDelta, iLowerSpd); // Plus time to open vat iTimeReq += getVatMoveTime(iOpnSpd); // Plus settle time; iTimeReq += iSettle; return iTimeReq; }