You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
450 lines
14 KiB
C++
450 lines
14 KiB
C++
#pragma once
|
|
|
|
#include "RunTask.h"
|
|
|
|
#include <set>
|
|
#include <deque>
|
|
#include <vector>
|
|
#include <string>
|
|
|
|
#include "OutputController.h"
|
|
#include "Utility.h"
|
|
|
|
#include "structure.h"
|
|
|
|
#include "DllDefines.h"
|
|
|
|
#include "commondef.h"
|
|
#include "MotorPositionParser.h"
|
|
#include "MotorSpeedParser.h"
|
|
|
|
#include "MaintStructs.h"
|
|
|
|
constexpr auto OPE_STATUS_UPDATE = 100;
|
|
|
|
enum MODE
|
|
{
|
|
MODE_POWER_UP,
|
|
MODE_AUTO,
|
|
MODE_MAINTENANCE,
|
|
MODE_TASK,
|
|
MODE_UNKNOWN
|
|
};
|
|
|
|
enum STATE
|
|
{
|
|
STATE_RUN,
|
|
STATE_STOP
|
|
};
|
|
|
|
enum
|
|
{
|
|
SLOW_SPEED,
|
|
NORMAL_SPEED
|
|
};
|
|
|
|
// motor profile
|
|
enum
|
|
{
|
|
HOME_START_SPEED,
|
|
HOME_MAX_SPEED,
|
|
HOME_ACC,
|
|
HOME_DEC,
|
|
HOME_PERCENTAGE,
|
|
|
|
SLOW_START_SPEED,
|
|
SLOW_MAX_SPEED,
|
|
SLOW_ACC,
|
|
SLOW_DEC,
|
|
SLOW_PERCENTAGE,
|
|
|
|
NORMAL_START_SPEED,
|
|
NORMAL_MAX_SPEED,
|
|
NORMAL_ACC,
|
|
NORMAL_DEC,
|
|
NORMAL_PERCENTAGE,
|
|
|
|
SLOW_START_SPEED_LIMIT,
|
|
SLOW_MAX_SPEED_LIMIT,
|
|
SLOW_ACC_LIMIT,
|
|
SLOW_DEC_LIMIT,
|
|
SLOW_PERCENTAGE_LIMIT,
|
|
|
|
NORMAL_START_SPEED_LIMIT,
|
|
NORMAL_MAX_SPEED_LIMIT,
|
|
NORMAL_ACC_LIMIT,
|
|
NORMAL_DEC_LIMIT,
|
|
NORMAL_PERCENTAGE_LIMIT,
|
|
|
|
SLOW_OVER_VELOCITY,
|
|
NORMAL_OVER_VELOCITY,
|
|
SLOW_SPEED_LIMIT_OVER_VELOCITY,
|
|
NORMAL_SPEED_LIMIT_OVER_VELOCITY,
|
|
|
|
MAX_SPEED_PROFILE_ITEMS
|
|
};
|
|
|
|
class MCCTRDLLCLASS CRun : public CRunTask
|
|
{
|
|
public:
|
|
// new method to inform UI of OPE status/signal
|
|
bool PostOPESignal(unsigned int uinSignal);
|
|
|
|
bool IsMaintenanceOperationCompleted() const;
|
|
void StopMaintenanceOperation();
|
|
void StartMaintenanceOperation();
|
|
bool PostGeneralMessageToGUI(WPARAM wParam, LPARAM lParam);
|
|
bool PostMessageToGUI(int nMsg, WPARAM wParam, LPARAM lParam);
|
|
void WarningEx(int nWarningNo, bool bSet = true);
|
|
void UpdateMaintenanceMessage(int nMsg, bool bClearDisplay = false);
|
|
bool IsMaintenanceMode() const;
|
|
bool IsPowerUpMode() const;
|
|
bool IsTaskMode() const;
|
|
bool IsAutoMode() const;
|
|
int GetMode() const;
|
|
|
|
virtual void OnStopComplete();
|
|
// virtual function to allow application to handle some operation upon Reset()
|
|
virtual void OnResetComplete();
|
|
//
|
|
virtual void OnMcStopped();
|
|
//
|
|
void GetModuleEnable(const std::string& csFilename, const std::string& csSectionName, const std::string& csKeyName);
|
|
bool IsModuleEnable() const;
|
|
int GetMaintenanceMoveProfile() const;
|
|
void MaintenanceCheckMotorComplete(); // request to start check maintenance motor move complete
|
|
void MaintenanceCheckMotorHomeComplete(); // request to start check maintenance motor move complete
|
|
void ResetPowerUpComplete(void);
|
|
void EndCloseLot(void);
|
|
void OnCloseLot(void);
|
|
void CloseLotComplete(void);
|
|
bool IsCloseLot(void);
|
|
bool IsCloseLotComplete(void);
|
|
|
|
// reset close lot event
|
|
void ResetCloseLot();
|
|
|
|
void Warning(int nID, bool bDisplay = false);
|
|
bool GetCountJam(void) const;
|
|
void PowerUpRestart(void);
|
|
void AutoRestart(void);
|
|
bool IsJamCode(void);
|
|
int GetWarning(void);
|
|
int GetJam(void);
|
|
bool IsWarning(void);
|
|
bool IsPowerUpComplete(void);
|
|
void PowerUpComplete(void);
|
|
virtual void InitParameters(void);
|
|
|
|
CRun(int nID, const std::string& strName, const std::vector<stModule>& modules, const std::vector<int>& sequenceModuleNo);
|
|
virtual ~CRun();
|
|
|
|
inline std::string GetName(void) const
|
|
{
|
|
return m_strName;
|
|
}
|
|
|
|
inline int GetID(void) const
|
|
{
|
|
return m_nModuleId;
|
|
}
|
|
|
|
virtual bool PowerUpOperation(void);
|
|
virtual bool TaskOperation(void);
|
|
virtual bool AutoOperation(void);
|
|
virtual bool MaintenanceOperation(void);
|
|
|
|
void OnPowerUp(void);
|
|
void OnStop(void);
|
|
void OnJamReset(void);
|
|
void OnAuto(void);
|
|
void OnTask(void);
|
|
bool IsStop(void);
|
|
bool IsJam(void);
|
|
bool GetWarningClear(void);
|
|
|
|
// get warning code
|
|
int GetWarningCode();
|
|
|
|
// Operations
|
|
void Jam(int nJamID, bool bCount = true); // default count in jam
|
|
|
|
// Run state
|
|
int GetState();
|
|
|
|
void InMaintenance(); // this function will be executed in Maintenance Mode
|
|
void OnMaintenance(bool bMaintenance); // call this function to set to Maintenance Mode
|
|
|
|
void MaintenanceHomeMotor(int iMaintModuleNo, int iMotorNo); // Function to home motor in Maintenance Mode
|
|
void MaintenanceMoveMotor(int iMaintModuleNo, int iMotorNo, int iPos, double dPos,
|
|
int iSpeed); // Function to Move motor in Maintenance Mode
|
|
void MaintenanceStopMotor(int iMaintModuleNo, int iMotorNo); // Function to Stop motor in Maintenance Mode
|
|
void MaintenanceOutput(int iMaintModuleNo, int iOutputNo, bool bOn); // Function to trigger output
|
|
|
|
// Function to turn on/off motor in manitenance Mode
|
|
void MaintenanceMotorOnOff(int iMaintModuleNo, int iMtrNo, bool bOn);
|
|
|
|
bool IsMaintenanceHomeMotor() const; // Function to check home motor in maintenance mode
|
|
bool IsMaintenanceMoveMotorHomeComplete() const; // Function to check motor move complete in maintenance mode
|
|
|
|
bool IsMaintenanceMoveMotor() const; // Function to check move motor in maintenance mode
|
|
bool IsMaintenanceMoveMotorComplete() const; // Function to check motor move complete in maintenance mode
|
|
|
|
bool IsMaintenanceStopMotor() const; // Function to check stop motor in maintenance mode
|
|
bool IsMaintenanceOutput() const; // Function to trigger output in maintenance mode
|
|
bool IsMaintenanceOnOffMtr() const; // Function to check turn on/off motor in maintenance mode
|
|
// check if all maintenance operation completed
|
|
bool IsMaintOperCompleted();
|
|
|
|
double GetMaintenanceMoveMotorPos() const; // Function to get Move Motor Position in maintenance mode
|
|
|
|
// Function to get Move Motor Position in maintenance mode
|
|
int GetMaintenanceMoveMotorPosIndex() const;
|
|
int GetMaintenanceMoveMtrNo() const; // Function to get Motor to move in maintenance mode
|
|
int GetMaintenanceOutputToTrigger() const; // Function to get output number to trigger in maintenance mode
|
|
|
|
// Function to get output on/off status in maintenance mode
|
|
bool GetMaintenanceOutputTriggerState() const;
|
|
int GetMaintenanceModuleNo() const; // Function to get Maintenance module no
|
|
// Function to get turn motor on/off state during maintenance mode
|
|
bool GetMaintenanceOnOffState() const;
|
|
|
|
void ClearMaintStopMtrFlag(); // clear m_bMaintenanceStopMtr flag
|
|
void ClearMaintHmMtrFlag(); // clear m_bMaintenanceHmMtr flag
|
|
|
|
void ClearMaintHmMtrCompleteFlag(); // clear m_bCheckMaintenanceHmMtrComplete flag
|
|
|
|
void ClearMaintMoveMtrFlag(); // clear m_bMaintenanceMoveMtr flag
|
|
|
|
void ClearMaintMoveMtrCompleteFlag(); // clear m_bCheckMaintenanceMoveMtrComplete flag
|
|
|
|
void ClearMaintTriggerOutputFlag(); // clear m_bMaintenanceTriggerOutput flag
|
|
void ClearMaintOnOffMtrFlag(); // clear m_bMaintenanceOnOffMtr flag
|
|
|
|
// check if all module no material
|
|
bool IsAllModuleNoMaterial();
|
|
|
|
// runctrl call this function to clear no material flag
|
|
void ClearAllNoMaterial();
|
|
|
|
// check if jam has not been registered before
|
|
bool IsJamNotRegistered();
|
|
|
|
// open lot has been trigger by GUI
|
|
virtual void OnOpenLot();
|
|
|
|
// runctrl call power up restart
|
|
virtual void OnPowerUpRestart();
|
|
|
|
// set CUnitCntArray size. only one module should override this method!
|
|
virtual void SetUnitCntArraySize();
|
|
|
|
// clear auto restart flag
|
|
void ClearAutoRestart();
|
|
|
|
// check if machine has restart
|
|
bool IsAutoRestart();
|
|
|
|
// clear power up restart
|
|
void ClearPowerUpRestart();
|
|
|
|
// check if machine has restart
|
|
bool IsPowerUpRestart() const;
|
|
|
|
// send com data to modules in maintenance mode
|
|
virtual void OnMaintenanceSendCom(const stComSetting& _comSetting, const std::string& strSendMsg);
|
|
|
|
// send open com to modules in maintenance mode
|
|
virtual void OnMaintenanceOpenCom(const stComSetting& _comSetting);
|
|
|
|
// send close com to modules in maintenance mode
|
|
virtual void OnMaintenanceCloseCom(const stComSetting& _comSetting);
|
|
|
|
// send packet to modules in maintenance mode
|
|
virtual void OnMaintenanceSendPacket(const stNetAddress& _netAddress, const std::string& strSendMsg);
|
|
|
|
// send connect port to modules in maintenance mode
|
|
virtual void OnMaintenanceConnectPort(const stNetAddress& _netAddress);
|
|
|
|
// send connect port to modules in maintenance mode
|
|
virtual void OnMaintenanceDisconnectPort(const stNetAddress& _netAddress);
|
|
|
|
// get main application window handler
|
|
void GetHwnd(HWND hwnd);
|
|
|
|
// Get General Message
|
|
virtual void GetGenMsg(int iMsg);
|
|
|
|
// CRunCtrl inform all run modules that close lot has completed.
|
|
// For run modules to do clean up after close lot
|
|
virtual void OnCloseLotCompleted();
|
|
|
|
// Get the previous mode
|
|
int GetPrevMode() const;
|
|
|
|
/// For run modules to do clean up Before close applications
|
|
virtual bool OnDestroy()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
/// For run modules to do clean up when estop button pressed
|
|
virtual bool OnEStopPressed()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
/// For run modules to do necessary actions when curtain sensors acivated
|
|
virtual bool OnCurtainSensorActivated()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
/// To inform run module that system is in jog mode
|
|
virtual bool OnSysJogMode(bool bEnable);
|
|
|
|
// determine whether to trace data
|
|
bool m_bTraceData{ false };
|
|
|
|
// determine whether to trace timing data
|
|
bool m_bTraceTimingData{ false };
|
|
|
|
// CRunCtrl inform all run modules that power up has completed.
|
|
// For run modules to do clean up after system power up
|
|
virtual void OnPowerUpCompleted();
|
|
|
|
// Clear Run Module Warning code
|
|
void ClrWarn();
|
|
|
|
void SetMotorPosition(const stRuntimeMotorPosition& runtimeMotorPosition)
|
|
{
|
|
m_runtimeMotorPosition = &runtimeMotorPosition;
|
|
}
|
|
|
|
void SetMotorSpeed(const stRuntimeMotorSpeed& runtimeMotorSpeed)
|
|
{
|
|
m_runtimeMotorSpeed = &runtimeMotorSpeed;
|
|
}
|
|
|
|
void SetPackageInfo(const void* runtimePackageInfo)
|
|
{
|
|
m_runtimePackageInfo = runtimePackageInfo;
|
|
}
|
|
|
|
void SetRecipeInfo(const void* runtimeRecipeInfo)
|
|
{
|
|
m_runtimeRecipeInfo = runtimeRecipeInfo;
|
|
}
|
|
|
|
|
|
protected:
|
|
// get the module ID
|
|
int GetModuleId();
|
|
|
|
// run module to set home motor in maintenance mode
|
|
void SetMaintenanceHomeMotor(int iMotorNo);
|
|
|
|
// individual module call this function to set to no material
|
|
void SetNoMaterial(bool bNoMaterial);
|
|
|
|
// call this function to return the no material status of module
|
|
bool GetNoMaterialStatus(int iModuleNo);
|
|
|
|
// if repeat jam only display jam, else new jam display and count this jam
|
|
void CallJam(int iJamNo);
|
|
|
|
// clear jam occured before flag
|
|
void ClearJamOccuredBeforeFlag();
|
|
|
|
// Returns warning code in std::set
|
|
std::set<int> GetWarnSet();
|
|
|
|
// Return true if warning has been set before
|
|
bool IsWarningExist(int iWarnCode);
|
|
|
|
const stRuntimeMotorPosition& GetRuntimeMotorPosition() { return *m_runtimeMotorPosition; }
|
|
const stRuntimeMotorSpeed& GetRuntimeMotorSpeed() { return *m_runtimeMotorSpeed; }
|
|
|
|
const void* GetRuntimeRecipeInfo() { return m_runtimeRecipeInfo; }
|
|
const void* GetRuntimePackageInfo() { return m_runtimePackageInfo; }
|
|
|
|
// event to request motor stop in Maintenance Mode
|
|
CEvt m_evtMaintStop;
|
|
CEvt m_evtMcStop;
|
|
CEvt m_evtEol;
|
|
CEvt m_evtSysJogMode;
|
|
|
|
const std::vector<stModule>& m_modules;
|
|
HWND m_hwndMainApp{ nullptr };
|
|
const std::vector<int>& m_sequenceModuleNo; // integer array to keep track which module belong to which sequence
|
|
|
|
private:
|
|
void InPowerUp(void);
|
|
void InTask(void);
|
|
void InAuto(void);
|
|
UINT RunThread() override;
|
|
|
|
struct stWarning
|
|
{
|
|
int m_nWarningCode; // warning code
|
|
bool m_bWarningClear; // warning state, to clear or display
|
|
bool m_bWarning; // is there warning
|
|
};
|
|
|
|
std::deque<stWarning> m_deqWarning;
|
|
std::set<int> m_setWarn;
|
|
|
|
bool m_bWarningClear{ true };
|
|
bool m_bCountJam{ true };
|
|
bool m_bJamCode{ false };
|
|
bool m_bWarning{ false };
|
|
bool m_bPowerUpComplete{ false };
|
|
bool m_bJamflag{ false };
|
|
bool m_bAutoRestart{ false };
|
|
bool m_bPowerUpRestart{ false };
|
|
int m_nMode{ MODE_UNKNOWN };
|
|
int m_nPrevMode{ MODE_UNKNOWN };
|
|
int m_nState{ STATE_STOP };
|
|
int m_nJamCode{ 0 };
|
|
int m_nWarningCode{ 0 };
|
|
|
|
int m_nModuleId;
|
|
|
|
// Run Events
|
|
int m_state{ RS_BEGIN };
|
|
|
|
std::string m_strName;
|
|
bool m_bCloseLotComplete{ false };
|
|
|
|
stMaintState m_stMaintState{};
|
|
// Maintenance Parameters
|
|
stMaintRunParameters m_stMaintParams{};
|
|
|
|
// all module no material status
|
|
// true = current module no material, false = current module got material
|
|
static std::vector<bool> m_bNoMaterial;
|
|
static int m_iNoOfInstance; // keep track no of instance of this class
|
|
|
|
// to determine whether jam has been registered
|
|
// true = registered , false = unregistered
|
|
bool m_bJamRegistered{ false };
|
|
|
|
// to determine whether this is a repeat jam
|
|
// true = repeat jam do not count this jam, false = new jam count this jam
|
|
bool m_bJamOccuredBefore{ false };
|
|
|
|
bool m_bModuleEnable{ false };
|
|
|
|
// mutex to lock the warning message array
|
|
CMutex m_WarningMutex;
|
|
|
|
// flag to determine if maintenance operation is completed
|
|
bool m_bMaintenanceOperationCompleted{ false };
|
|
|
|
const stRuntimeMotorPosition* m_runtimeMotorPosition{ nullptr };
|
|
const stRuntimeMotorSpeed* m_runtimeMotorSpeed{ nullptr };
|
|
|
|
const void* m_runtimePackageInfo{ nullptr };
|
|
const void* m_runtimeRecipeInfo{ nullptr };
|
|
};
|