#pragma once #include "Thread_ControlIF.h" #include "TransDataManager.h" #include "BICommon.h" // MINI LED EI, NOTCH (狐傅) // #define MINI_LED_PLC_ADDR_SENDSIGNAL 2129 // #define MINI_LED_PLC_TRASFERDATA_ADDR 2000 // #define MINI_LED_PLC_ADDR_GLASS_JUDEMENT 2100 // #define MINI_LED_PLC_ADDR_PROFILE_JUDEMENT 4300 // EI, NOTCH, RCUT (扁粮 BF) #if MINI_LED #define EI_PLC_ADDR_SENDSIGNAL 2129 #define EI_PLC_TRASFERDATA_ADDR 2000 #define EI_PLC_ADDR_GLASS_JUDEMENT 2100 #else #define EI_PLC_ADDR_SENDSIGNAL 629 #define EI_PLC_TRASFERDATA_ADDR 500 #define EI_PLC_ADDR_GLASS_JUDEMENT 600 #endif #define EI_PLC_ADDR_PROFILE_JUDEMENT 4300 #define EI_PLC_RECIPE_ADDR 520 #define EI_PLC_STAGE_NO_ADDR 521 enum emInterface_Send_Control {emSnd_Vision_Alive=0, emSnd_Loading_Ack, emSnd_Short_ScanStart_Ack,emSnd_Short_ScanEnd_Ack, emSnd_Long_ScanStart_Ack,emSnd_Long_ScanEnd_Ack, emInterface_Snd_None}; enum emInterface_Rcv_Control {emRcv_PLC_Alive=0, emRcv_Loading, emRcv_Short_Start, emRcv_Short_End, emRcv_Long_Start, emRcv_Long_End, emRcv_Grab_Stop_EMO, emInterface_Rcv_None}; #define ALIVE_BIT(nValue, add, bit) nValue= nValue | ((add)<<(bit)); #define IS_ALIVE_BIT(nValue, bit) ((nValue & (0x01<<(bit))) >>(bit)); typedef struct _ST_PLC_RECIVE_BIT { BOOL bPLCHeatbit; BOOL bGlassLoading; BOOL bShortScanStart; BOOL bShortScanEnd; BOOL bLongScanStart; BOOL bLongScanEnd; BOOL bEMOGrabStop; _ST_PLC_RECIVE_BIT() { Reset(); } _ST_PLC_RECIVE_BIT(int nPLCData) { (nPLCData & 0x01)? bPLCHeatbit=TRUE :bPLCHeatbit=FALSE; (nPLCData & 0x02)? bGlassLoading=TRUE :bGlassLoading=FALSE; (nPLCData & 0x04)? bShortScanStart=TRUE :bShortScanStart=FALSE; (nPLCData & 0x08)? bShortScanEnd=TRUE :bShortScanEnd=FALSE; (nPLCData & 0x10)? bLongScanStart=TRUE :bLongScanStart=FALSE; (nPLCData & 0x20)? bLongScanEnd=TRUE :bLongScanEnd=FALSE; (nPLCData & 0x40)? bEMOGrabStop=TRUE :bEMOGrabStop=FALSE; } void Reset() { bPLCHeatbit = bGlassLoading = bShortScanStart = bShortScanEnd = bLongScanStart =FALSE; bLongScanEnd = bEMOGrabStop = FALSE; } }ST_PLC_RECIVE_BIT,*pST_PLC_RECIVE_BIT; typedef struct _ST_PLC_SEND_BIT { BOOL bServerAlive; BOOL bGlassLoadingAck; BOOL bShortScanStartAck; BOOL bShortScanEndAck; BOOL bLongScanStartAck; BOOL bLongScanEndAck; _ST_PLC_SEND_BIT() { bServerAlive = FALSE; Reset(FALSE); } void Reset(BOOL bSet) { bGlassLoadingAck = bShortScanStartAck = bShortScanEndAck = bLongScanStartAck = bLongScanEndAck = bSet; } void MakeSend(int &nSendData) { nSendData = 0; ALIVE_BIT(nSendData, bLongScanEndAck, 5); ALIVE_BIT(nSendData, bLongScanStartAck, 4); ALIVE_BIT(nSendData, bShortScanEndAck, 3); ALIVE_BIT(nSendData, bShortScanStartAck, 2); ALIVE_BIT(nSendData, bGlassLoadingAck, 1); ALIVE_BIT(nSendData, bServerAlive, 0); } }ST_PLC_SEND_BIT,*pST_PLC_SEND_BIT; interface IControlInterface2MainInterface { virtual void IControl2P_ReceiveSignalValue(emInterface_Rcv_Control emSignal, BOOL bValue) = 0; }; class CControl_Interface_New : public IControlInterface2Parent { public: CControl_Interface_New(void); virtual ~CControl_Interface_New(void); public: BOOL IsConnect() {return m_bConnect;} void SetI2M(IControlInterface2MainInterface *pInterface) {m_pInterface=pInterface;} // Connect & Disconnect public: virtual BOOL ControlProcess(); virtual BOOL ConnectToControl(); virtual BOOL DisconnectToPLC(); // Send & Write public: virtual BOOL SendControlBit(emInterface_Send_Control emSendBit,int nValue); virtual BOOL SendControlData(short *pBuf,int nAddr, int nCnt); private: void SendSignalBit(); // Timer Thread bool WritePLC_Data(int nSharedMemIdx, TCHAR* strAddress, short* WriteData, unsigned int nWORDSize); // Rcv & Read public: BOOL ReadControl_CheckSignal(); virtual BOOL ReadControlBit(emInterface_Rcv_Control emRcvBit,int& nValue); virtual BOOL ReadControlData(int nAddr, int &nData, int nLen); private: BOOL ReadSignalBit(); // Timer Thread bool ReadPLC_Data(int nSharedMemIdx, char* pData, TCHAR* strAddress, unsigned short nWORDSize); BOOL ReadTransferData(CTransDataManager *TData,char *lpTransBuffer,int Addr); BOOL StrToHex(CHAR* pchData, CHAR* pchDataSrc, INT nLength, BOOL bWordReverse=TRUE); protected: BOOL ConnectPLCConnector(); BOOL CheckAliveTime(); protected: HANDLE m_hMap; char* m_pSharedMemory; CCriticalSection m_csRcvBit; BOOL m_bRcvSignal; int m_nRcvSignal; ST_PLC_RECIVE_BIT m_Rcv_Bit, m_Rcv_Bit_Backup; CCriticalSection m_csSendBit; ST_PLC_SEND_BIT m_Send_Bit, m_Sent_Bit_Backup; CEvent m_ReadEvent; double m_dSendAlive_TickTime; protected: BOOL m_bConnect; IControlInterface2MainInterface* m_pInterface; CThread_ControlIF* m_pThreadControlIF; };