#pragma once #include "Thread_ControlIF.h" #include "TransDataManager.h" #define PLC_ADDR_SENDSIGNAL1 629 #define PLC_TRASFERDATA_ADDR 500 #define PLC_ADDR_GLASS_JUDEMENT 600 #define PLC_ADDR_PROFILE_JUDEMENT 4300 #define PLC_MAX_SIGNAL_BIT 10 enum enInterface_Send_Control{SERVER_ALIVE=0,GLASSLOADING_HANDSHAKE, SHORT_SCANSTART_HANDSHAKE,SHORT_SCANEND_HANDSHAKE, LONG_SCANSTART_HANDSHAKE,LONG_SCANEND_HANDSHAKE,enInterface_None}; enum ControlToAllSignal {C2A_ControlAlive = 0, C2A_RunningMode, C2A_ReviewMode, C2A_ReviewManualMode, C2A_BypassMode, C2A_VaripanelMode, C2A_DualMode, C2A_PPIDUseMode ,ControlToAllSignal_Count }; enum ControlToInspect {C2I_Loading = 0, C2I_ShortScanStart, C2I_ShortScanEnd,C2I_LongScanStart, C2I_LongScanEnd, C2I_EMOGrabStop,C2I_InitInspect, ControlToInspect_Count}; enum InspectToControlSignal { IToC_Ack_LoadingSuccess=0, IToC_Ack_LoadingFail, IToC_Ack_ShortScanStartSuccess, IToC_Ack_ShortScanStartFail, IToC_Ack_ShortScanEndSuccess, IToC_Ack_ShortScanEndFail , IToC_Ack_LongScanStartSuccess, IToC_Ack_LongScanStartFail, IToC_Ack_LongScanEndSuccess, IToC_Ack_LongScanEndFail, IToC_Sig_InspectionCount}; enum InspectToControlAlarm {IToC_Alarm_InspectorError=0, IToC_Alarm_InspectOverflow,IToC_Alarm_EdgeCrack, IToC_Alarm_NoRecipe ,IToC_Alarm_FindEdgeFail, IToC_Alarm_LightError, IToC_Alarm_UpperLimit, IToC_Alarm_LowestLimit ,IToC_Alarm_NoImage,IToC_Alarm_GlassDetectFail,IToC_Alarm_TransferData,IToC_Alarm_InternalValue ,IToC_Alarm_InspectionCount}; #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_01 { BOOL bPLCHeatbit; BOOL bGlassLoading; BOOL bShortScanStart; BOOL bShortScanEnd; BOOL bLongScanStart; BOOL bLongScanEnd; BOOL bEMOGrabStop; _ST_PLC_RECIVE_01() { Reset(); } _ST_PLC_RECIVE_01(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_01,*pST_PLC_RECIVE_01; typedef struct _ST_PLC_SEND_01 { BOOL bServerAlive; BOOL bGlassLoadingAck; BOOL bShortScanStartAck; BOOL bShortScanEndAck; BOOL bLongScanStartAck; BOOL bLongScanEndAck; _ST_PLC_SEND_01() { bServerAlive = FALSE; Reset(FALSE); } void Reset(BOOL bSet) { bGlassLoadingAck = bShortScanStartAck = bShortScanEndAck = bLongScanStartAck = bLongScanEndAck = bSet; } void ChangeSignal(_ST_PLC_SEND_01 &pSent) { if(pSent.bGlassLoadingAck) bGlassLoadingAck = FALSE; if(pSent.bShortScanStartAck) bShortScanStartAck = FALSE; if(pSent.bShortScanEndAck) bShortScanEndAck = FALSE; if(pSent.bLongScanStartAck) bLongScanStartAck = FALSE; if(pSent.bLongScanEndAck) bLongScanEndAck = FALSE; } 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_01,*pST_PLC_SEND_01; interface IMainFrameInterface2Parent { virtual void IMI2P_PLC_ReceiveSignalValue(int nSignalIndex, int nValue) = 0; }; class CControl_Interface : public IControlInterface2Parent { public: CControl_Interface(void); virtual ~CControl_Interface(void); public: virtual BOOL ControlProcess(); virtual BOOL ConnectToControl(); virtual BOOL DisconnectToPLC(); virtual BOOL SendConstrol(enInterface_Send_Control enAlarm,int nValue); virtual BOOL SendCIMData(short *pBuf,int nAddr,int nCnt); virtual BOOL SendJudgement(int nJudge); virtual BOOL ReadRcpHandNo(int &nRcpNo,int &nHandNo); BOOL IsConnect(){return m_bConnect;} void SetI2M(IMainFrameInterface2Parent *pI2M){m_pI2M=pI2M;} public: bool WriteCStringPLC(TCHAR* strAddress, CString strData,int nWSize=0); bool WriteLongPLC(TCHAR* strAddress, short* WriteData, unsigned int nWORDSize); bool WriteLongPLC_Signal(int iLongSigIdx,TCHAR* strAddress, short* WriteData, unsigned int nWORDSize); bool WriteIntArrayPLC(TCHAR* strAddress, int* WriteData, unsigned int nArraySize); bool WriteWordArrayPLC(TCHAR* strAddress, WORD* WriteData, unsigned int nArraySize); bool WriteWORDPLCTimer(TCHAR* strAddress, short WriteData, DWORD msecTimer); bool WriteWORDOneBitTimer(TCHAR* strAddress, short BITOrder, DWORD msecTimer); bool WriteWORDManyBitsTimer(TCHAR* strAddress, char* BitFlag, DWORD msecTimer); BOOL ReadPLCData(int nAddr, int& nData); BOOL ReadPLCData(int nAddr, int &nData, int nLen); BOOL ReadPLCData(int nAddr, CString& strData, int nLen); BOOL ReadPLCData(char cMemory, int nAddr, CString& strData, int nLen); BOOL RecvPLCData(char cDevice , int nAddr, char* pData,unsigned short nWORDSize); bool ReadLongData(char* pData, TCHAR* strAddress, unsigned short nSize); BOOL ReadTIMEData(char cMemory, int nAddr, CString& strData, int nLen, SYSTEMTIME &sTime); BOOL ReadPLCDataDec(char cMemory, int nAddr, int &nData, int nByteSize); BOOL SendPLCIO_Alive(); BOOL SendPLCData(int nAddr, int nData); BOOL SendPLCData_NoTimer(int nAddr, int nData, int nLen); BOOL SendPLCBItData(int nAddr, short nData); BOOL SendPLCData(char cDevice, int nAddr, CString& strData, int nLen); BOOL SendIntPLCData(char cDevice, int nAddr, int nData); BOOL SendIntArrayPLCData(char cDevice, int nAddr, int* pData, int nLen); BOOL SendWordArrayPLCData(char cDevice, int nAddr, WORD* pData, int nLen); BOOL ReadTransferData(CTransDataManager *TData,char *lpTransBuffer,int Addr); BOOL StrToHex(CHAR* pchData, CHAR* pchDataSrc, INT nLength, BOOL bWordReverse=TRUE); public: void LoadSignalOnTime(); void SaveSignalOnTime(); int GetSignalOnTime(int nSignalIndex); int GetSignalDelayTime(int nSignalIndex); int m_nSignalOnTime[PLC_MAX_SIGNAL_BIT]; int m_nSignalOnDelayTime[PLC_MAX_SIGNAL_BIT]; protected: BOOL ConnectPLCConnector(); BOOL ReadPLCIOBit(); BOOL CheckSignal_01(); BOOL SendPLCIO_01(); BOOL CheckAliveTime(); int GetSignal(); int GetLongSignal(); protected: HANDLE m_hMap; char *m_pSharedMemory; ST_PLC_RECIVE_01 m_Rcv01; ST_PLC_SEND_01 m_Send01,m_SentBack01; int m_nSignal; //Signal ÀÔ·Â int m_nLongSignal; //Signal ÀÔ·Â CEvent m_ReadEvent; double m_dTickPrevTime; protected: IMainFrameInterface2Parent *m_pI2M; CThread_ControlIF *m_pThreadControlIF; BOOL m_bConnect; int m_nRecvedPLCIO1; BOOL m_bRecvedPLCIO1; };