#pragma once
#include "CModule.h"


class __declspec(dllexport) CEjector : public CModule
{
	typedef struct
	{
		XY_DOUBLE_STRUCT stSaftPosition;		//��������ȫλ��
		DOUBLE iSaftLev;						//��������ȫ�߶�
		DOUBLE iSaftLev_Ejector;				//���밲ȫ�߶�

		XY_DOUBLE_STRUCT stWorkPosition;		//�����������
		DOUBLE iWorkLev;						//�����������߶�
		DOUBLE iWorkLev_Ejector;				//���빤���߶�
		bool bUseEjectorSync;					//�Ƿ�ʹ�ö���ͬ��
		DOUBLE lEjectorSyncHeight;				//��ͬ���߶�
	} EJECTOR_CONFIG_STRUCT; //�����������

public:

    CEjector(MODULE_LIST eModuleType);
    ~CEjector(){}

	virtual LONG AllocateAxis(vector<CAxis*> vecAxis) override;
	virtual LONG AllocateIo(vector<CIO*> vecIo) override;

	virtual LONG ToHome() override;
	virtual LONG ToSafePosition() override;
//
//	LONG EjectorSynchronous(CBondHead* pArmHead);

	//������ȥ��ȫλ��
	//LONG MoveToSafePosition(bool sync = SYNC);

	//������ȥ����λ��
	LONG MoveToWorkPosition(bool sync = SYNC);

	//������ȥ��ȫ�߶�
	LONG MoveToSafeLev(bool sync = SYNC);

	//������ȥ�����߶�
	LONG MoveToWorkLev(bool sync = SYNC);

	//����ȥ��ȫ�߶�
	LONG MoveToEjectorSafeLev(bool sync = SYNC);

	//����ȥ�����߶�
	LONG MoveToEjectorWorkLev(bool sync = SYNC);

	//�ȴ�����ģ�鵽λ
	LONG Sync();

	//�����
	LONG VacuumOn();

	//�ر����
	LONG VacuumOff();

private:

	//ָ��
	CAxis* m_pXAxis = nullptr;
	CAxis* m_pYAxis = nullptr;
	CAxis* m_pZAxis = nullptr;			//��Z
	CAxis* m_pAxisPinZ = nullptr;			//����Z

	CIO* m_pIoVacuum = nullptr;

	static UINT iEjectorUseNum;			//����ʹ�ô���
	static UINT iEjectorMaxNum;			//�������ʹ�ô���

	CModuleConfig* m_pModuleConfigDB = nullptr;
	EJECTOR_CONFIG_STRUCT m_stEjectorConfig;  //�����������

	void DataChangNotice(string strDbName, string strTableName);
	virtual void SetDataChangFunction() override;
	virtual LONG SetParam() override;//��������
	virtual LONG GetParam() override;//��������
	virtual LONG InitResource() override;					//�����ᡢIO���궨����Դ
};