#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;
|
};
|