⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 itkplcdlg.h

📁 工业强度的PLC模拟程序
💻 H
字号:
// @dlg
//
// @module		itkPlcDlg.h
//
//
// Maintenance:
//	
// Version		Date		Who		What
// -------		--------	---		-------------------------------------
// 7.0			06/01/97	jra		Created
// 7.1			04/30/98	mvs		Added TCP/IP Support
// 7.1			05/20/98	mvs		Added UDP Support
//

// Prevent multiple inclusion
#if !defined(AFX_ITKPLCDLG_H__C8DD8F2B_038F_11D1_B77E_0060971E5E37__INCLUDED_)
#define AFX_ITKPLCDLG_H__C8DD8F2B_038F_11D1_B77E_0060971E5E37__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000


#include <Serial.h>
#include <WinSock2.h>
#include <TcpIp.h>
#include "SettingsDlg.h"
#include "TriggerDlg.h"
#include "CommStatsDlg.h"
#include "ItkProtocol.h"
#include <ItkErr.h>

#define RECEIVE_BUFFER_SIZE	2048

class CItkPlcDlg : public CDialog
{
// Construction
public:
	CItkPlcDlg(CWnd* pParent = NULL);	// standard constructor
	~CItkPlcDlg();
	BOOL IsUsingTimers() { return (this->m_bTimerFlag); }
	void IsUsingTimers(BOOL bFlag) {this->m_bTimerFlag = bFlag;}

	void	ParseTcpMsg(SOCKET, DWORD);
	void	ParseUdpMsg(SOCKADDR ClientSockAddr, DWORD dwSize);

// Dialog Data
	//{{AFX_DATA(CItkPlcDlg)
	enum { IDD = IDD_ITKPLC_DIALOG };
	CListBox	m_DataList;
	int		m_datatype;
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CItkPlcDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	HICON m_hIcon;

	// Generated message map functions
	//{{AFX_MSG(CItkPlcDlg)
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	afx_msg void OnExit();
	afx_msg void OnSettingsButton();
	afx_msg void OnTimer(UINT nIDEvent);
	afx_msg void OnTriggers();
	afx_msg void OnDblclkPlcData();
	afx_msg void OnDatatypeFloat();
	afx_msg void OnDatatypeHex();
	afx_msg void OnDatatypeLong();
	afx_msg void OnDatatypeSigned();
	afx_msg void OnDatatypeUnsigned();
	afx_msg void OnClearMemory();
	afx_msg void OnDatatypeAscii();
	afx_msg void OnShowStats();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()

private:
	unsigned short int	PlcMemory[PLC_MEMORY_SIZE],
						m_cBCCMask,
						rcv_state,
						m_nTransactionNumber;

	CRITICAL_SECTION    m_Lock;

	DWORD				m_dwProtocol,
						m_dwTransmitIndex,
						m_dwRemoteStation,
						m_dwLocalStation,
						m_dwUnsolFrequency,
						m_dwUnsolicitedSentCount;

	UINT				m_nTimerRefreshRate,
						m_uPortNumber;

	CString				m_szPortName,
						m_szPortMode,
						m_szIpAddress;

	HANDLE				m_hIoThread,
						m_hUnsolThread,
						m_hNotifyEvt;

	BOOL				m_bShutdown,
						m_bUnsolicited,
						m_bTimerFlag,
						m_bSourceStn,
						m_bTransNum;

	unsigned char		m_nTransmitBuffer[TRANSMIT_BUFFER_SIZE];
	unsigned char		m_chReceiveBuffer[RECEIVE_BUFFER_SIZE];

	CSerial				*m_pIo;
	CTcpIp				*m_pTcp;

	int					m_nTimerMap[PLC_MEMORY_SIZE],
						m_DataTypeView;

	CTriggerDlg			*m_pdlgTriggers;

	CSettingsDlg		*m_pdlgSettings;

	CCommStatsDlg		*m_pdlgCommStats;


	void	UpdateRow(int);
	void	UpdateMemoryMap(unsigned char bClear = UPDATE_ONLY);
	void	ParseMsg(unsigned char [], DWORD);
	void	AnswerRead(unsigned short int, unsigned short int, 
					   unsigned short int, unsigned short int,
					   unsigned short int, unsigned short int,
					   OPTIONAL IN SOCKET Socket = INVALID_SOCKET,
					   OPTIONAL IN LPSOCKADDR SockAddr = NULL);

	void	PutSend(unsigned char);
	void	PutSendBcc(unsigned char, short int *);
	void	SendDLE(unsigned char, 
					OPTIONAL IN SOCKET = INVALID_SOCKET);

	DWORD	BuildWriteMsg(DWORD, unsigned char *);

	unsigned short int GetBCCMask();
	unsigned short int GetDataBits();

	static	UINT IoHandler(LPVOID);
	static	UINT UnsolIoHandler(LPVOID);
};

#endif // !defined(AFX_ITKPLCDLG_H__C8DD8F2B_038F_11D1_B77E_0060971E5E37__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -