#if !defined(AFX_MAINDOC_H__E674CB70_B34D_11D7_898C_000629A6E157__INCLUDED_) #define AFX_MAINDOC_H__E674CB70_B34D_11D7_898C_000629A6E157__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // MainDoc.h : header file // #include "Run.h" #include "RunCtrl.h" #include "PageSecurity.h" #include "structure.h" #include #include "OutputController.h" #include "CheckSwitch.h" #include "InputController.h" #include "OutputController.h" #include "MotionController.h" #include "MotorRS.h" #include "MtrProfileRS.h" #include "MaintenanceInputRS.h" #include "MaintenanceOutputRS.h" #include "MaintMsgRS.h" //#include "Utility.h" #include "DeleteLotInfo.h" #include "DefCommon.h" #include "LotMsg.h" #include "MessageBox.h" // Gary 24Jul12, V1.24.11 #include "ShadeCheckButtonST.h" //SEcsGem //TISGREMOVE #include "SecsGemManager.h" //NEWSG //#include "SG2HRMessages.h" #include "SecsGemManagerDlg.h"//TISGADD #define MAX_STATUS_DISPLAY 10 #define MAX_MESSAGE_BUFFER 10 #ifdef BUILD_GUIDLL #define DLLCLASS __declspec(dllexport) #else #define DLLCLASS __declspec(dllimport) #endif ///////////////////////////////////////////////////////////////////////////// // CMainDoc document class CSecsGemManagerDlg; class DLLCLASS CMainDoc : public CDocument { protected: CMainDoc(); // protected constructor used by dynamic creation CMainDoc(int numRun, CRun **run, stModule *Module); DECLARE_DYNCREATE(CMainDoc) // Attributes public: // Operations public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CMainDoc) public: virtual void Serialize(CArchive& ar); // overridden for document i/o protected: virtual BOOL OnNewDocument(); virtual void OnCloseDocument(); //}}AFX_VIRTUAL // Implementation public: virtual ~CMainDoc(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif #define CLEAR_MSG_ID true #define DO_NOT_CLEAR_MSG_ID false HWND m_hwndMainApp; public: // Gary 24Jul12, V1.24.11 // virtual method to handle custom run view buttons processing virtual void OnRunViewButton(int nButton, CShadeButtonST * checkBtn){}; virtual void OnRunViewCheck(int nButton, CShadeCheckButtonST * Btn){}; // Gary 3 Oct11, V1.24.07 // new function to query if machine is in EStop state bool IsEStopState(){ return (m_bEStopActivate == TRUE)?true:false;}; // Gary 16Aug11, V1.24.06 // new virtual function for application to do any handling virtual void OnAirLow(bool bLow){}; virtual void OnVacuumLow(bool bLow){}; virtual void OnDoorOpen(bool bOpen){}; virtual void OnCurtainSensorTriggered(bool bTriggered){}; virtual void OnEngineeringModeOn(bool bInEngineeringMode){}; virtual void OnEStopActivated(bool bEStopActivated){}; // // Gary 28Jul1, V1.24.04, virtual function when Stop Button is pressed and before // calling OnStopCtr(); // Application layer can blocked the Stop Control by returning false virtual bool OnStopButtonPressed(){return true;}; // Gary 28Jul1, V1.24.04, virtual function when Start Button is pressed and before // calling OnStartCtr(); // Application layer can blocked the Stop Control by returning false virtual bool OnStartButtonPressed(){return true;}; // Gary 28Jul1, V1.24.04, virtual function when Reset Button is pressed and before // calling OnResetCtr(); // Application layer can blocked the Stop Control by returning false virtual bool OnResetButtonPressed(){return true;}; // Gary 12May11, V1.24.02 // call maindoc virtual OnLogin function to provide flexibility // in case application layer needs to have control over the user login virtual bool OnLogin(); // Gary 10May11, V1.24.02 // Add call to new virtual function in MainDoc to let application layer // have some control over conditions to allow the exit of the application. virtual bool OnCloseApplication(); // Gary 4May11, V1.24.02 // runview OnTimer virtual function for application layer flexibility to // carry some non-blocking tasks. virtual void OnRunViewTimer(){}; // Gary 4Aug11, V1.24.05 // Enhance with elasped timer parameter virtual void OnRunViewTimer(UINT nIDEvent){}; // Gary 26Aug10 V1.23.01, virtual method to handle the main operation mode selection int OnMainModeViewSelection(int nModeBtnPressed, CShadeButtonST *cShadeButton, COLORREF &colorMainView); // Gary 26Aug10 V1.23.01, virtual method to handle the Production mode selection virtual int OnMainModeViewProductionBtnPressed(CShadeButtonST *cShadeButton, COLORREF &colorMainView); // Gary 26Aug10 V1.23.01, virtual method to handle the Engineering mode selection virtual int OnMainModeViewEngineeringBtnPressed(CShadeButtonST *cShadeButton, COLORREF &colorMainView); // Gary 26Aug10 V1.23.01, virtual method to handle the Schedule Activity mode selection virtual int OnMainModeViewScheduleActivityBtnPressed(CShadeButtonST *cShadeButton, COLORREF &colorMainView); // Gary 26Aug10 V1.23.01, virtual method to handle the No Material/ Non Schedule mode selection virtual int OnMainModeViewNoMaterialBtnPressed(CShadeButtonST *cShadeButton, COLORREF &colorMainView); // Gary 26Aug10 V1.23.01, virtual method to handle the main mode button pressed virtual int OnMainModeViewBtnPressed(CShadeButtonST *cShadeButton, COLORREF &colorMainView); // Gary 1Feb10, new multiuser password access CString GetUserName(); void SetUserName(CString csUserName); virtual void OnUserLoginChanged(){}; virtual void OnCustomizedSwitch(int nSwitchNo, int nState); virtual void OnThirdPartyMessage(WPARAM wp, LPARAM lp); void DisableRun(); void EnableRun(); // Gary 4May11, V1.24.02 // allow application layer to control the Reset Button void DisableReset(); void EnableReset(); // Gary 4May11, V1.24.02v // allow application layer to control the Stop Button void DisableStop(); void EnableStop(); void OnEMSStatus(int nState); virtual void EStopCleanUp(){}; virtual void EStopRelease(){}; void RefreshMessageDisplay(); void InsertStatus(WPARAM wp, LPARAM lp); void InsertPrompt(WPARAM wp, LPARAM lp); virtual void DisplayPrompt(WPARAM wp, LPARAM lp); void DisplayStatus(CString csName, CString csText, LPARAM lp, bool bProgress=true); virtual void StartAllRun(); void FindGUIWindow(); CString GetStatusMsg(); bool IsHardwareSafetyBypass(); BOOL IsEngineeringMode(); void OnEngineeringMode(BOOL bState); void EnableAllSafetyCheck(); void SetOutput(int nOutput, COutput *pOutput); bool IsUseGoldenPackageMethod(); // print report to Machine\\Report\\ReportFileName.txt virtual BOOL PrintReportToAFile(CListCtrl& listCtrl, int ntype, CString csFilename, CString &csReportFileName); void ResetPowerUpComplete(void); virtual void WriteRuntimePackageInfo(void); virtual void WriteRuntimeRecipeInfo(void); // Read field of interest from Database amd write to runtime.ini virtual bool ReadFromDbWriteToRuntimeIni(CDaoRecordset &RecordSet, CIniFile &iniFile, int iStartFieldNo){return true;} // Read Motor speed info from Motor Pos table from Package.mdb and write to runtime.ini virtual void WriteMtrInfo(){} // Read Motor speed info from Motor Speed table from Package.mdb and write to runtime.ini virtual void WriteMtrSpeedInfo(){} virtual stPackageInfo * GetPackageInfo(void); virtual stRecipeInfo * GetRecipeInfo(void); virtual void ClearPackageInfo(void); virtual void ClearRecipeInfo(void); virtual BOOL ReadRuntimePackage(void); virtual void WriteRuntimeRecipe(); virtual BOOL ReadRuntimeRecipe(void); void RecipeSelected(BOOL bSelected); virtual void ClearLotInfo(void); virtual void WriteRuntimeLotInfo(void); BOOL IsIncompleteLot(void); BOOL IsRecipeSelected(void); virtual BOOL ReadRuntimeLotInfo(void); virtual BOOL LoadRecipe(CString csRecipe, CString csPackage); void UpdateSecurityPageLevel(int nSecurity, int nLevel); void OnSetModuleWarning(BOOL bState); void OnSystemWarning(BOOL bState); CMotionController *GetMotionController(void); COutputController *GetOutputController(void); CInputController *GetInputController(void); void SetSwitch(int nSwitch, CInput *pInput); void SetLight(int nIndicator, COutput *pOutput); void InitParameters(void); void SetCopyRight(CString csCopyRight); CString GetCopyRight(void); void SetMachineModel(CString csModel); CString GetMachineModel(void); CStringArray * GetOutputMode(void); void InsertOutputMode(CString csMode); virtual void SaveLotInfo(void); BOOL IsClosingLot(void); virtual stLotInfo * GetLotInfo(void); virtual void CloseLotComplete(void); BOOL IsLotOpened(); virtual void* InitMainSheet(int nID); int GetNoOfModule(void); stModule * GetModule(void); void SetModule(stModule *Module, int nNoOfModule); int GetSecurityLevel(int nPage); void ByPassCurtain(BOOL bState); void ByPassDoor(BOOL bState); void OnCurtain(BOOL bState); void OnAir(BOOL bState); void OnVacuum(BOOL bState); void OnEStop(BOOL bState); void OnDoor(BOOL bState); void SetUserLevel(int nLevel); //Receive Remote Command from Host through SECSGEM /*TISDREMOVE virtual void ReceiveRemoteCmdSTART(){}; virtual void ReceiveRemoteCmdSTOP(){}; virtual void ReceiveRemoteCmdPAUSE(){}; virtual void ReceiveRemoteCmdRESUME(){}; virtual void ReceiveRemoteCmdCASSETTEACK(){}; virtual void ReceiveRemoteCmdPPSELECT(){}; virtual void ReceiveRemoteCmdLOTACK(){}; */ //**************SecsGem ***************************** //SecsGem Attribute /*****************************************************/ //TISGADD {{ BOOL m_bSecsGemApplicationRemoteLink; BOOL m_bSecsGemRealTimeDataEnable; bool m_bSecsGemAppLication; CString m_strControlState; CString m_strSpoolState; CString m_strLinkState; CString m_strE10State; CString m_strMainMode; CString m_strSecsGemDataFileName; CString m_strRecipeFileFolder; CString m_strDeletedRecipeName; CString m_strAddedUserRecipeName; CString m_strUploadedRecipeName; CString m_strDownloadedRecipeName; CString m_strUploadedDataName; CString m_strDownloadedDataName; CString m_strReceivedRemoteCmdName; CString m_strUploadedWaferMapName; CString m_strDownloadedWaferMapName; CString m_strUploadedStripMapName; CString m_strDownloadedStripMapName; CString m_strReceivedOthersMsgName;//for general purpose for future // Gary 03Nov, added to cater for new secsgemdll v1.1 CString m_strDeletedAllRecipeStatus; CString m_strEditedUserRecipeName; // Gary 6Jan11, V1.23.02, support ECID handling CString m_strECID; int m_nSendHandlerAcknowledgeEnable;//phyu 02-Oct-2012 CString m_strSecsgemWarningEnable;//phyu 02-Oct-2012 CString m_strSecsgemAlarmClearEnable;//phyu 09-Oct-2012 // create sec gem object virtual void CreateSecGemObject(); virtual void SendSecsGemEvent(int evt){}; virtual void SecsGemDeletedRecipeFile(CString strDeletedRecipeName){}; virtual void SecsGemAddedUserRecipeName(CString strUserRecipeName){}; virtual void SecsGemUpdatedRecipeList(){}; virtual void SecsGemUploadedRecipeFile(CString strUploadedRecipeName){}; virtual void SecsGemDownloadedRecipeFile(CString strDownloadedRecipeName){}; virtual void SecsGemUploadedDataFile(CString strUploadedDataName){}; virtual void SecsGemDownloadedDataFile(CString strDownloadedDataName){}; virtual void SecsGemReceivedRemoteCmd(CString strReceivedRemoteCmdName){}; virtual void SecsGemReceivedRemoteCmd(CString strReceivedRemoteCmdName, int nStatus){};//nStatus=0:remote cmd received,1: remote cmd time out error.phyu 24-Sep-2012 virtual void SecsGemUploadedWaferMapFile(CString strUploadedWaferMapName){}; virtual void SecsGemDownloadedWaferMapFile(CString strDownloadedWaferMapName){}; virtual void SecsGemDownLoadedStripMapFile(CString strDownloadedStripMapName){}; virtual void SecsGemReceivedOthersMsg(CString strReceivedOthersMsgName){};//for general purpose for future // Gary 03Nov09, cater for new features virtual void SecsGemEditedRecipeName(CString strUserRecipeName){}; virtual void SecsGemDeletedAllRecipes(CString strStatus){}; // Gary 6Jan11, V1.23.02, support ECID handling virtual void SecsGemReceivedECID(int nECID, CString csData){}; //}} // gary, 30Sep08 virtual bool CheckSecsGemConfigIPAddress(); virtual CString GetSecsGemConfigIPAddress(CString strFileName); virtual void GetLocalIPAddress(CString *pIPAddress, int &nCount); virtual bool SecsGemSendLoadRecipe(CString strRecipeName); virtual bool SecsGemSendUploadRecipe(CString strRecipeName); virtual bool SecsGemSendLoadData(CString strDataFileName); virtual bool SecsGemSendUploadData(CString strDataFileName); virtual bool SecsGemSendLoadRecipeList(); virtual bool SecsGemSendDeleteRecipe(CString strRecipeName); virtual bool SecsGemSendAddUserRecipe(CString strRecipeName); CEvt m_evtGetRecipeFile;//TISGADD CEvt m_evtGetDataFile;//TISGADD CEvt m_evtGetRecipeList;//TISGADD CEvt m_evtRecipeDeleted;//TISGADD CEvt m_evtRecipeUploaded;//TISGADD CEvt m_evtDataFileUploaded;//TISGADD CEvt m_evtUserRecipeAdded;//TISGADD // Gary 03Nov09, cater for new features CEvt m_evtUserRecipeEdited;//TISGADD CEvt m_evtAllRecipesDeleted;//TISGADD int m_numRun; CRun **m_run; CRunCtrl *m_runCtrl; WPARAM m_wp; LPARAM m_lp; void RecipeChangeLogging(CString& ItemName, CString& oldValue, CString& newValue, bool bReqToCloseFile = false); void RecipeChangeLogging(CString& ItemName, double oldValue, double newValue, bool bReqToCloseFile = false); // For Touch Screen Graphic Keyboard CString LaunchKeyboard(bool bPasswordType = false); // Recipe Operations // Control Operations void OnPackageLoadCtr(); void OnLotStartCtr(); void OnLotEndCtr(bool bTerminate = false); void OnMachineSettingChangeCtr(); bool OnStartCtr(); // void OnStopCtr(); void OnStopCtr(bool bAuto=true); void OnResetCtr(); void OnRestartCtr(); bool StartDiagnose(); bool EndDiagnose(); // Run statistics void AddTotalRun(int n); void AddTotalPass(int n); void AddTotalReject(int n); void AddUnitsInTape(int n); // Debug Log Data void DebugKeybdEvent(); // gary 03jul03 // Implementation void DisplayMsg(CDC *pDC, CString& msg, int xOff, int yOff); int GetUserLevel(void); int IsSoftwareDebug(void); virtual BOOL InitRun(int iNoOfMaintModule); bool m_bEnableAutoPromptMsg; CLotMsg m_lotMsg; void CheckIncompleteLot(void); int GetSequenceModuleNo(int iModuleNo); // function to get which sequence module int GetNoOfMtr(); // return no of motor CString* GetAllMtrName(); // return motor name in motor table // set maintenance message ID, // bClearMsg = TRUE to clear maintenance message // bClearMsg = False to display maintenance message virtual void SetMaintMsgId(int iMsgID, BOOL bClearMsg); // Get Maintenance Message ID // clear maintenance message if bClrMsg = true virtual int GetMaintMsgId(bool bClrMsg = CLEAR_MSG_ID); // clear maintenance message id virtual void ClrMaintMsdId(); virtual CString GetMaintMsg(int iMaintMsgId); // get maintenance message base on message id // store general message parameters virtual void SetGeneralMsgId(WPARAM wp, LPARAM lp); // Make a copy of output status before going into maintenance mode virtual void CopyOutputStatus(); // Make a copy of motor status before going into maintanence mode virtual void CopyMtrStatus(); // check whether output state has changed before virtual bool CheckOpMtrStateChange(); // set or clear m_bMvMtrOrOp Flag void SetMvMtrFlag(bool bState); // set or clear m_bMvMtrOrOp Flag void SetMvOpFlag(bool bState); // check if output has been moved in maintenance page bool IsMvOpInMaintPage(); // check if motor has been moved in maintenance page bool IsMvMtrInMaintPage(); // get current module motor position no int GetMtrPosNo(CString csModuleName, int iMtrNo, CString csMtrPos, CString csSubPosName); virtual void Purge(){} // purge machine unit //TISGREMOVE virtual void PostSecsGemMessage(int iEvt, WPARAM wp = 0); enum { NO_MODULE_DEFINED = -1, NO_MAINT_MESSAGE = -1, // no maintenance message CLEAR_MAINT_MESSAGE = -2, // clear maintenance message }; CMotorRS m_motorRecSet; // Sec Gem integration //TISGREMOVE CSecsGemManager *m_pSGManager; //NEWSG bool m_bSecsGemOnline; bool m_bSecsGemEnable; BOOL m_bSecsGemCapable; bool m_bRemoteCommandProcessed; BOOL m_bSecsGemAutoConnect; bool m_bOPEOpened; int m_iMainMode; //TISGREMOVE RemoteCmdStruct RemoteMsg; void RemoveStatusMsg(CString csMsg); void SetStatusMsg(CString csMsg); void DestroyControl(); // called by destructor only //update the run Package Data bool UpdateCurrentPackageData(CString csPackageName,bool bOverWrite = false); CFrameWnd *m_pMainFrame; CView *m_pRunView; public: // Gary 5 Oct10, V1.23.02, multilanguage for Modules, IOs and Motors stModule m_stMultiLanguageModule[MAX_MODULE]; stMaintIoModule m_stMultiLanguageMaintIoModule[MAX_MODULE]; stMaintIoModule m_stMultiLanguageMaintOutputModule[MAX_MODULE]; stMaintMotorModule m_stMultiLanguageMaintMotorModule[MAX_MODULE]; void InitModule2ndLanguage(); void InitMaintenanceInputInfo2ndLanguage(); void InitMaintenanceOutputInfo2ndLanguage(); void InitMaintenanceMotorInfo2ndLanguage(); // Generated message map functions protected: HWND GetActivePageHWND(); //{{AFX_MSG(CMainDoc) // NOTE - the ClassWizard will add and remove member functions here. //}}AFX_MSG DECLARE_MESSAGE_MAP() int m_iSequenceModuleNo[MAX_MODULE]; int m_iSeqMaintMtrNo[MAX_MODULE][MAX_MOTOR]; // Sequence to Maintenance module Motor Number Map // Init maintenance module Motor sequence mapping virtual void InitMaintModuleMtrMapToSeq(); // void RemoveStatusMsg(CString csMsg); // void SetStatusMsg(CString csMsg); private: void DestroyAllStatusDisplay(); void CloseStatusDisplay(CString csName); int GetAvailableMsgBox(); void AsignDefaultRecipe(void); virtual void SetSystemSwitch(void){}; virtual void SetSystemOutput(){}; virtual void SetEMSInput(){}; virtual void SetEMSOutput(){}; BOOL InitHardware(void); virtual void SetTowerLight(void); BOOL m_bClosingLot; BOOL m_bLotOpened; BOOL m_bCurtainActivate; BOOL m_bDoorOpen; BOOL m_bEStopActivate; BOOL m_bAirLow; BOOL m_bVacuumOff; BOOL m_bEngineeringMode; CStringArray m_csaStatusMsg; stModule *m_stModule; int m_nNoOfModule; CMaintenanceInputRS m_inputRecSet; CMaintenanceOutputRS m_outputRecSet; CMtrProfileRS m_mtrProfileRecSet; CMaintMsgRS m_maintMsgRecSet; void ReadConfigFileUpdateGlobalVariables(); void CompactAndBackupMachineSettings(); void GetPageSecurityLevel(); // Control Operations bool InitRunModule(); void CreateControl(); // called by constructor only // create sec gem object //TISGREMOVE virtual void CreateSecGemObject(); // Gary 30Nov10, V1.23.02, change to protected so that // run view can access int InitModule(); // Init no of modules in maintenance page void InitMaintenanceMtrInfo(); //Init maintenance page motor information void InitMaintenanceInputInfo(); //Init maintenance page input information void InitMaintenanceOutputInfo(); //Init maintenance page output information void InitMaintModuleMapToInvalid(); // init Maintenance module mapping to sequence to invalid(-1) // check if output state has changed in maintenance page void CheckOpStateChanged(CString Msg[], int &iWarnMsg); // check if motor state has changed in maintenance page void CheckMtrStateChange(CString Msg[], int &iWarnMsg); // format state changed message bool FormatPromptStateChangedMsg(CString *Msg, int &iWarnMsg, CString csState, CString csPos, bool bMtrPosMsg = true); // Attributes BOOL m_bRecipeSelected; BOOL InitRunCtrl(); // initliased delete lot parameters void InitDelLotPara(); // delete old lot record void DeleteOldLotRecord(); // auto delete lot void AutoDelLot(BOOL bAutoDelLot, int iKeepLotPeriod); //Create Run Package Table bool CreateGoldenPackageDataTable(); bool CopyTableWithoutData(CDaoDatabase *pDatabase,CString csDestTableName,CString csSourceTableName); bool CopyPackageData(CDaoDatabase* pDatabase,CString csDestTableName,CString csSourceTableName,CString csPackageName = ""); bool IsCurrentPackageExist(CDaoDatabase* pDatabase,CString csTableName,CString csPackageName); bool DeleteDBData(CDaoDatabase* pDatabase,CString csTableName); // for debugging purpose int m_iSoftwareDebug; int m_nUserLevel; // For Security level int m_nPageSecurityLevel[NUM_SECURITY_ITEM]; CStringArray m_aOutputMode; CString m_csModel; CString m_csCopyRight; CInputController m_inputController; COutputController m_outputController; CMotionController m_motionController; COutput *m_copDoorLock; BOOL m_bIncompleteLot; BOOL m_RecipeSelected; int m_iMaintMsgId; // store Maintenance Message ID CMutex m_maintMsgMutex; // inter locking to set and clear maintenance message int m_iNoOfMtr; // keep track no of motor bool m_bMvOp; // motor or output has been moved in maintenance page bool m_bMvMtr; // flag to detemine whether motor has been moved in maintenance page bool m_bChangeMtrOnOff; // flag to detemine whether motor has been changed on/off in maintenance page CDeleteLotInfo m_delLotInfo; // del lot info when close lot complete enum { MAX_MAINT_LIST_BOX_MSG = 100, }; CDefCommon DefCommon; CMessageBox *m_msgBox[MAX_STATUS_DISPLAY]; enum { PROMPT, STATUS, }; void ShiftQueue(int nType); int GetEmptyQueue(int nType); bool RequirePrompt(int nType); int m_nPromptBuffer[MAX_MESSAGE_BUFFER]; int m_nOption[MAX_MESSAGE_BUFFER]; int m_nStatusBuffer[MAX_MESSAGE_BUFFER]; int m_nStatusOption[MAX_MESSAGE_BUFFER]; void ResetAllBuffer(int nType); bool IsAnyPrompt(int nType); void InsertPrompt(int nType, WPARAM wp, LPARAM lp); CMutex m_MainDocMutex; // flag to disable machine from running bool m_bDisableRun; // Gary 5May11, V1.24.02 // flag to disable machine from Resetting bool m_bDisableReset; // Gary 5May11, V1.24.02 // flag to disable machine from Stopping bool m_bDisableStop; // Gary 1Feb10, new multiuser password access CString m_csUserName; // Gary 31May10, mutex to interlock status msg update CMutex m_mutexStatusMsg; // Gary 01Jun10, flag to indicate if need to prompt Initialise message bool m_bPromptInitMachine; }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_MAINDOC_H__E674CB70_B34D_11D7_898C_000629A6E157__INCLUDED_)