#pragma once
#include "CModule.h"
#include "CTemperature.h"

/*����̨�͹̾�̨����е�ϵIJ���ǹ���̨û����գ����������IO���󣬹���̨���̲�������տ���*/
class  __declspec(dllexport) CBondTable :
    public CModule
{
	//�豸����
	enum TemperatureStatus { 
		Disable = 0 /*����*/, 
		BondOpen = 1, /*����ʱ��������Ԥ���¶ȣ�����ʱ�����̾��¶�*/ 
		BnormallyOpen = 2 /*������һֱ�ڹ̾��¶�*/ 
	};

	typedef struct _BOND_TABLE_CONFIG_STRUCT
	{
		double dWaitPosZ;					//��ȫλ��
		double dBondPosZ;					//�����
		long dVacuumDelay;						//�����ʱ

		TemperatureStatus eOpenStatus;	//�¿�������״̬
		double nBondTempelature;			//�̾��¶�
		double nPreTempelature;			//Ԥ���¶�
		std::string sTemperatureCtrlPort; //�¿����˿�
		int nAddress;						//վ���ַ
		Temperature_Ctltype nTemCtrlType;	//�¿�������

		_BOND_TABLE_CONFIG_STRUCT()
		{
			dWaitPosZ = 0;					
			dBondPosZ = 0;	

			eOpenStatus = TemperatureStatus::Disable;
			nBondTempelature = 0; 
			nPreTempelature = 0;  
			sTemperatureCtrlPort = "192.168.1.10";
			nAddress = 0x5;
			nTemCtrlType = GLTC;
		}
	} BOND_TABLE_CONFIG_STRUCT;   

public:
	CBondTable(MODULE_LIST eModuleType);
	~CBondTable();

	virtual void SetDataChangFunction() override;
	virtual void DataChangNotice(string strDbName, string strTableName) override;
	virtual LONG SetParam() override;//��������
	virtual LONG GetParam() override;//��������
	virtual LONG ToHome() override;
	virtual LONG Sync() override;
	virtual LONG ToSafePosition() override;
	virtual LONG InitResource();

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

	////������ϵ�λ
	//bool CheckPcbArrive();

	////��������ƿ�
	//bool CheckPcbLeave();
	
	//ƽ̨�������̾�λ��
	LONG ToBondPos(bool waitDone);

	//ƽ̨�½�������������
	LONG ToWaitPos(bool waitDone);

	LONG SetVacuumOn();
	LONG SetVacuumOff();
	LONG WaitVacuumDone();

	bool CheckZDone();

	//���ù���̨�¶�Ϊ�̾��¶� lTimeOut (����)>0ʱ���ȴ��¶ȵ���5%��Χ��
	LONG SetBondTemprature(long lTimeOut = 5000);
	//���ù���̨�¶�ΪԤ���¶�
	LONG SetPreTemprature(long lTimeOut = 5000);
private:
	CAxis* m_pAxisZ = nullptr;
	//CIO* m_pPcbArriveDi = nullptr;
	//CIO* m_pPcbLeaveDi = nullptr;
	CIO* m_pVacDo = nullptr;

	BOND_TABLE_CONFIG_STRUCT m_stConfig;

	//�¿���
	bool m_TemperatureIsUse = false;   //�¿����Ƿ�����
	CTemperature* m_pTempCtrl = nullptr;
	LONG WaitTemprature(double dMinTempelature, double dMaxTempelature, long lTimeOut);
	//�����¶�
	LONG SetTemprature(double dTempelature, long lTimeOut = 0);

};