|
// PLCConnectorView.h : CPLCConnectorView Ŭ·¡½ºÀÇ ÀÎÅÍÆäÀ̽º
|
//
|
|
|
#pragma once
|
#include "acteasyif1.h"
|
#include <vector>
|
#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<PPLCWRITE_DATA> m_ListWriteData;
|
//PLC ¸®¼Â ÀڷᱸÁ¶¸¦ Á¦¾îÇÏ´Â itorator
|
std::vector<PPLCWRITE_DATA>::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<CPLCConnectorDoc*>(m_pDocument); }
|
#endif
|