// PLCConnectorView.h : CPLCConnectorView Ŭ·¡½ºÀÇ ÀÎÅÍÆäÀ̽º // #pragma once #include "acteasyif1.h" #include #include "afxwin.h" #include "SharedMemoryDefine.h" #define Print_Delay 40 #define MaxPrintCount 2000 typedef struct _PLCWRITE_DATA { TCHAR WriteAddress[PLC_READ_ADDRESS_LENGTH]; DWORD EndTickCount; WORD WriteValue; } PLCWRITE_DATA, *PPLCWRITE_DATA; class CPLCConnectorView : public CFormView { protected: // serialization¿¡¼­¸¸ ¸¸µé¾îÁý´Ï´Ù. CPLCConnectorView(); DECLARE_DYNCREATE(CPLCConnectorView) public: enum{ IDD = IDD_PLCCONNECTOR_FORM }; // Ư¼ºÀÔ´Ï´Ù. public: CPLCConnectorDoc* GetDocument() const; // ÀÛ¾÷ÀÔ´Ï´Ù. public: // ÀçÁ¤ÀÇÀÔ´Ï´Ù. public: virtual BOOL PreCreateWindow(CREATESTRUCT& cs); protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV Áö¿øÀÔ´Ï´Ù. virtual void OnInitialUpdate(); // »ý¼º ÈÄ Ã³À½ È£ÃâµÇ¾ú½À´Ï´Ù. // ±¸ÇöÀÔ´Ï´Ù. public: virtual ~CPLCConnectorView(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif protected: // »ý¼ºµÈ ¸Þ½ÃÁö ¸Ê ÇÔ¼ö protected: afx_msg void OnFilePrintPreview(); afx_msg void OnRButtonUp(UINT nFlags, CPoint point); afx_msg void OnContextMenu(CWnd* pWnd, CPoint point); //ÇÁ·Î±×·¥ Á¾·á LRESULT afx_msg OnExitProgram(WPARAM wParam, LPARAM lParam); DECLARE_MESSAGE_MAP() public: static bool m_bThreadEnd; static bool m_bThreadEnd2; private: //¹°·ùµ¥ÀÌÅÍ Àбâ´Â µ¿±âÈ­·Î µ¿ÀÛÇÑ´Ù. //¹°·ùµ¥ÀÌÅ͸¦ ÀоîµéÀÎÈÄ ¼­¹ö¿¡ ¾Ë·ÁÁÖ±â À§ÇÑ À̺¥Æ® °´Ã¼ CEvent m_ReadEvent_1,m_ReadEvent_2,m_ReadEvent_3; //¹°·ù µ¥ÀÌÅ͸¦ ´ã°í ÀÖ´Â PLC ÁÖ¼Ò °ª TCHAR m_AddressToReadLongData[PLC_READ_ADDRESS_LENGTH]; //¹°·ù µ¥ÀÌÅÍÀÇ Å©±â UINT m_SizeOfLongData; //±ä »çÀÌÁî µ¥ÀÌÅÍ PLC¿¡ ¾²±â TCHAR m_AddressToWriteLongData[PLC_READ_ADDRESS_LENGTH]; //¹°·ù µ¥ÀÌÅÍÀÇ Å©±â UINT m_SizeOfWriteLongData; //PLC SignalÀ» ÀоîµéÀÏ ÁÖ¼Ò°¡ ¼³Á¤µÊ TCHAR m_AddressToReadSignal0[PLC_READ_ADDRESS_LENGTH]; TCHAR m_AddressToReadSignal1[PLC_READ_ADDRESS_LENGTH]; TCHAR m_AddressToReadSignal2[PLC_READ_ADDRESS_LENGTH]; TCHAR m_AddressToReadSignal3[PLC_READ_ADDRESS_LENGTH]; TCHAR m_AddressToReadSignal4[PLC_READ_ADDRESS_LENGTH]; WORD m_lReadPLCWORD0; //ÀоîµéÀÎ 2byte PLC ½Ã±×³Î °ª WORD m_lReadPLCWORD1; //ÀоîµéÀÎ 2byte PLC ½Ã±×³Î °ª WORD m_lReadPLCWORD2; //ÀоîµéÀÎ 2byte PLC ½Ã±×³Î °ª WORD m_lReadPLCWORD3; //ÀоîµéÀÎ 2byte PLC ½Ã±×³Î °ª WORD m_lReadPLCWORD4; //ÀоîµéÀÎ 2byte PLC ½Ã±×³Î °ª //PLC Read SignalÀ» »ç¿ëÇÒ Áö ¿©ºÎ°¡ ¼³Á¤µÈ Ç÷¡±× BOOL m_bUseReadSignal[MAX_READSIGNAL]; //PLC Connector »ç¿ë ¸ðµå : 0 MC Protocol, 1: MX Componnet unsigned char m_nPLCConnectMode; //MC Protocol IPÁÖ¼Ò DWORD m_dwAddress; //MC Protocol Port int m_nPort; //MX Component Station ¹øÈ£ long m_StationNumber; //°øÀ¯¸Þ¸ð¸® ¸Ê ÆÄÀÏ HANDLE m_hMap; //64bit ¼­¹ö¿Í Åë½ÅÇϱâ À§ÇÑ °øÀ¯ ¸Þ¸ð¸® ¸Ê ÆÄÀÏ char* m_pSharedMemory; unsigned int m_ReadCount; unsigned int m_ReadCount2; BOOL m_bUseAOISignal; TCHAR m_strAOICaption[100]; //PLC¿¡ °ªÀ» ¾²°í ŸÀ̸Ӹ¦ »ý¼ºÇÏ¿© ¸®¼ÂÇϱâ À§ÇÑ Á¤º¸¸¦ ´ã°í ÀÖ´Â ÄÁÅ×ÀÌ³Ê std::vector m_ListWriteData; //PLC ¸®¼Â ÀڷᱸÁ¶¸¦ Á¦¾îÇÏ´Â itorator std::vector::iterator m_itorList; public: void LoadINIFile(void); bool GetModulePath(CString& strPath); void InitValue(void); void SaveINIFile(void); afx_msg void OnDestroy(); afx_msg void OnSetOption(); //PLC·Î ºÎÅÍ 4byte¸¦ Àоî¿Â´Ù. ÇÔ¼ö¸í ¿À·ù LRESULT afx_msg OnPrintListPLCData(WPARAM wParam, LPARAM lParam); //¼­¹ö·Î ºÎÅÍ ¹°·ù µ¥ÀÌÅ͸¦ Àбâ À§ÇÑ ¿äûÀÌ ¿Ô´ÂÁö üũÇÏ´Â ÇÔ¼ö bool CheckRequestToReadLongData(int nID); bool InitSharedMemory(void); //ÇÁ·Î±×·¥ Á¾·á void ExitPLCProgram(bool close = false); //ÇÁ·Î±×·¥ ÀÌ»ó½Ã ·Î±×¸¦ ÀÛ¼ºÇÑ´Ù. void WriteLocalLog(TCHAR* str,...); void WriteLocalLog(BOOL bFile, TCHAR* str,...); //PLC¿Í Á¢¼ÓÀ» Open bool OpenPLCConnection(void); //PLC CPU TypeÀ» ¾Ë¾Æ¿À´Â ÇÔ¼ö, ´Ü¼øÈ÷ Á¤»è ½ÃÀÛÇÏ¿´´ÂÁö ¾Ë¾Æº»´Ù. void GetPLCCPUType(void); //PLC¿Í Á¢¼ÓÀ» Á¾·áÇÑ´Ù. void ClosePLCConnection(void); //PLC¿¡ °ªÀ» ¾´´Ù. void WritePLCDataTimer(void); //PLC¿¡ °ªÀ» ¾´´Ù. void WritePLCData(void); bool CheckRequestToWritePLC(int iAddr); //¹°·ùµ¥ÀÌÅ͸¦ ÀбâÀ§ÇÑ ÇÔ¼ö void ReadLongData(int nID); //2byteÀб⸦ Çϱâ À§ÇÑ ÇÔ¼ö void ReadPLC(void); void ReadPLC2(void); //½Ã°£ÀÌ Áö³ª¸é timer ÈÄ ¸®¼Â void ResetPLCData(); WORD GetWriteData(TCHAR* AddressToGetData); void ReadPLCSignal0(void); void ReadPLCSignal1(void); void ReadPLCSignal2(void); void ReadPLCSignal3(void); void ReadPLCSignal4(void); //PLC ¿¡·¯ ¹ß»ý½Ã À翬°á½Ãµµ void ReConnectionPLC(void); //PLC¿¡¼­ ½Ã±×³ÎÀ» °è¼Ó ¹Þ±â À§ÇÑ Worker ½º·¹µå ÇÔ¼ö static UINT ReadPLCWorkerThread(LPVOID pParam); static UINT ReadPLCWorkerThread2(LPVOID pParam); //PLC¿¡ °ª ¾²±â¸¦ Áö¿øÇÏ´Â Worker ½º·¹µå ÇÔ¼ö static UINT WritePLCWorkerThread(LPVOID pParam); void AddLogList(CString strMsg); private: bool m_bExit; CString m_RetVal; CString m_RetVal2; CString m_RetVal3; //MX Componet´Â ¼øÂ÷ ó¸®ÇؾßÇÔ //Àб⠽º·¹µå, ¾²±â ½º·¹µå ·£´ý Á¢±ÙÀ» ó¸®Çϱâ À§ÇÑ Å©¸®Æ¼Äà ¼½¼Ç CCriticalSection m_PLCSection; //PLC Connector ÀÌ»ó ¹ß»ý½Ã ·Î±×¸¦ ÀÛ¼ºÇϱâ À§ÇÑ Å©¸®Æ¼Äà ¼½¼Ç CCriticalSection m_LogSection; public: CActeasyif1 m_MXComponent; CListBox m_ConnectorState; BOOL m_bAutoScroll; afx_msg void OnBnClickedCheckScroll(); afx_msg void OnTimer(UINT_PTR nIDEvent); void RestString(char* RestPoint, int DataLength); }; #ifndef _DEBUG // PLCConnectorView.cppÀÇ µð¹ö±× ¹öÀü inline CPLCConnectorDoc* CPLCConnectorView::GetDocument() const { return reinterpret_cast(m_pDocument); } #endif