📄 mod_rssimdlg.cpp
字号:
/////////////////////////////////////////////////////////////////////////////
//
// FILE; MOD_simDlg.cpp ; implementation file
//
// See "_README.CPP"
//
// Fixes: Tranparency
// Activity ticks repainting cut down, reduced CPU load& flicker
// Added: Tooltips & Toolbar
//
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "ServerSettings232Dlg.h"
#include "ServerSettingsEthDlg.h"
#include "AnimationSettings.h"
#include "FaultsDlg.h"
#include "resource.h"
#include "Creditstatic.h"
#include "about.h"
#include "TrainingSimDlg.h"
#include "ABCommsProcessor.h"
#include "JoySCCEmulation.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define LOADREGMSGSTRING "LOADREGISTERS"
#define DEMOSECONDS (60*30) // 30 minutes
const UINT wm_LoadRegisters = RegisterWindowMessage( LOADREGMSGSTRING );
WORD PLCMemPrefixes[MAX_MOD_MEMTYPES] =
{
0, // outputs
1, // in
3, // analogs
4, // registers
6, // ext. registers
};
CHAR * PLCMemoryTypes[MAX_MOD_MEMTYPES] =
{
"Coil Outputs (00000)",// outputs
"Digital Inputs (10000)",// in
"Analogue Inputs (30000)", // analogs
"Holding Registers", // registers
"Extended Registers", // ext. registers
""
};
CControllerMemory PLCMemory;
char * stateDescriptions [] =
{
"Serv. starting.", // RSPORTCURRENTLY_VOID
"Serv. read data.", // RSPORTCURRENTLY_READING
"Serv. write data.", // RSPORTCURRENTLY_WRITTING
"Serv. close port.", // RSPORTCURRENTLY_CLOSING
"Serv. opening.", // RSPORTCURRENTLY_OPENING
"Serv. idle." // RSPORTCURRENTLY_IDLE
};
char * sockStateDescriptions [] =
{
"Serv. starting.", // SOCKETCURRENTLY_VOID
"Serv. listening.", // SOCKETCURRENTLY_LISTENING
"Serv. read data.", // SOCKETCURRENTLY_READING
"Serv. write data.", // SOCKETCURRENTLY_WRITTING
"Serv. closing.", // SOCKETCURRENTLY_CLOSING
"Serv. idle." // SOCKETCURRENTLY_IDLE
};
DWORD PLCDataFormatsTable[] =
{
CMemoryEditorList::VIEWFORMAT_DECIMAL,
CMemoryEditorList::VIEWFORMAT_HEX,
CMemoryEditorList::VIEWFORMAT_WORD,
CMemoryEditorList::VIEWFORMAT_DWORD,
CMemoryEditorList::VIEWFORMAT_LONG,
CMemoryEditorList::VIEWFORMAT_FLOAT
};
extern CHAR * ViewerFormatNames[6];
// ------------------------------------ ShowRegistrationMessage --------------------------
void ShowRegistrationMessage()
{
AfxMessageBox("This is a fully functional version of MOD-SIM but without a key; \
\nit will show this message after 30 minutes, and then just try to annoy U after that.\
\n\nTo obtain a totally free key, see the help-about window!");
}
/////////////////////////////////////////////////////////////////////////////
// CMOD_simDlg dialog
CMOD_simDlg::CMOD_simDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMOD_simDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMOD_simDlg)
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIconMB = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_hIconETH = AfxGetApp()->LoadIcon(IDR_MAINZETH);
m_hIconDF1 = AfxGetApp()->LoadIcon(IDR_MAINZDF1);
m_hIconJOY = AfxGetApp()->LoadIcon(IDR_MAINJOY);
m_registeredOK = FALSE;
m_registrationTimerStart = GetTickCount();
m_demoPeriodEnded = FALSE;
EnableAutomation();
m_scriptEngineInitilized = FALSE;
m_reloadAnimationScript = TRUE;
m_lastRuntime = -1;
m_PacketsReceived = m_PacketsSent = 0;
m_portActivityRX = m_portActivityTX = 0;
m_portModemStatus = 0; // modem lamps off
m_loadedProtocol = m_selectedProtocol = PROTOCOL_SELNONE;
m_ServerSocketState = 0;
// for (int i=0; i < MAX_MOD_MEMTYPES;i++)
// {
// PLCMemory[i] = new WORD[MAX_MOD_MEMWORDS];
// memset(PLCMemory[i], 0, MAX_MOD_MEMWORDS * sizeof(WORD));
// }
m_zeroValues = FALSE;
// m_pMemWriteSync = new CMutex();
m_pServerRS232Array = NULL;
m_pServerSockArray = NULL;
m_ServerRSState = RSPORTCURRENTLY_VOID;
m_responseDelay = 0;
m_MOSCADchecks = FALSE;
m_modifyThenRespond = TRUE;
m_disableWrites = FALSE;
m_PLCMaster = FALSE;
m_useBCC = FALSE;
m_autoLoad = FALSE;
m_startAsOff = FALSE;
m_ABMasterSourceStation = 20;
m_ABMasterDestStation = 10;
m_ABMasterNumFiles = 22;
m_ABMasterRunMode = TRUE;
m_ABMasterReadVariables = FALSE;
m_ABMasterWriteVariables = TRUE;
m_ABmasterIDLETime = 200;
m_ABtimeoutValue = 300;
m_stayOnTop = FALSE;
InitializeCriticalSection(&dispCritSection);
InitializeCriticalSection(&debuggerCritSection);
pGlobalDialog = this;
m_animationIncValue = 10;
m_animationON = FALSE;
m_plantAnimation = FALSE;
m_animationBYTE = FALSE;
m_animationWORD = TRUE;
m_animationRefreshes = 5;
m_animationCounter = m_animationRefreshes;
m_busyCreatingServers = FALSE;
m_animationPeriod = 5; //
m_animationScriptFile = "";
//m_startTime = GetTickCount();
m_registerShow = TRUE;
m_commsTimes = FALSE;
m_paused = FALSE;
m_commsTobottom = TRUE;
}
CMOD_simDlg::~CMOD_simDlg()
{
// Free up memory used by the debugger queue if
// it has any un-processed messages at shutdown time.
CString *pDebugentry;
while (!m_debugDataQueue.IsEmpty())
{
pDebugentry = m_debugDataQueue.RemoveHead();
delete pDebugentry;
}
}
// ----------------------------------- ToggleOnTop ---------------------------
// toggle the "stay on top" function.
void CMOD_simDlg::ToggleOnTop()
{
CMenu* pSysMenu = GetSystemMenu(FALSE);
DWORD state;
state = pSysMenu->GetMenuState(IDM_ONTOP, MF_BYCOMMAND);
pSysMenu->CheckMenuItem(IDM_ONTOP, (state&&MF_CHECKED==MF_CHECKED)? MF_UNCHECKED: MF_CHECKED);
if (state&&MF_CHECKED==MF_CHECKED)
{ // user un-check the item
SetWindowPos(&wndNoTopMost,0,0,0,0, SWP_NOSIZE|SWP_NOMOVE);
m_stayOnTop = FALSE;
} else
{
SetWindowPos(&wndTopMost,0,0,0,0, SWP_NOSIZE|SWP_NOMOVE);
m_stayOnTop = TRUE;
}
} // ToggleOnTop
// ---------------------------------- DoDataExchange ---------------------------
void CMOD_simDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMOD_simDlg)
DDX_Control(pDX, IDC_PROTOCOL, m_protocolCombo);
DDX_Control(pDX, IDC_VSCROLLSTATIONS, m_vScrollBarStations);
DDX_Control(pDX, IDC_COMMSLIST, m_commsListBox);
DDX_Control(pDX, IDC_DATAFORMAT, m_dataFormatCombo);
//}}AFX_DATA_MAP
}
// ----------------------------------- OnGetDefID ------------------------------
LRESULT CMOD_simDlg::OnGetDefID(WPARAM wp, LPARAM lp)
{
// Do not return an control ID for the default control.
// This prevents the <ENTER> key from closing the dialog
return MAKELONG(0,DC_HASDEFID);
}
//
BEGIN_MESSAGE_MAP(CMOD_simDlg, CDialog)
ON_MESSAGE(DM_GETDEFID, OnGetDefID)
ON_WM_CONTEXTMENU()
ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnTTN_NeedText )
//{{AFX_MSG_MAP(CMOD_simDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_TIMER()
ON_BN_CLICKED(IDC_SETTINGS, OnSettings)
ON_BN_CLICKED(IDC_VIEWHEX, OnViewhex)
ON_BN_CLICKED(IDC_VIEWDEC, OnViewdec)
ON_CBN_SELCHANGE(IDC_COMBOAREA, OnSelchangeComboArea)
ON_BN_CLICKED(IDC_SIMULATE, OnSimulate)
ON_BN_CLICKED(IDC_ZEROES, OnZeroes)
ON_BN_CLICKED(IDC_LOAD, OnLoad)
ON_BN_CLICKED(IDC_SAVE, OnSave)
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_CLONE, OnClone)
ON_CBN_SELCHANGE(IDC_DATAFORMAT, OnSelchangeDataFormat)
ON_BN_CLICKED(IDS_ABOUTBOX, OnAboutboxBn)
ON_COMMAND(IDB_ALPHABLEND, OnAlphablendFlip)
ON_COMMAND(IDC_NOISE, OnNoise)
ON_COMMAND(IDC_EMULATION, OnEmulation)
ON_COMMAND(IDH_ABOUT, OnAbout)
ON_COMMAND(IDH_TRANSPARENCY, OnTransparencyToggle)
ON_COMMAND(IDH_TOGGLEDISP, OnToggleDisplay)
ON_BN_CLICKED(IDC_PAUSECOMMS, OnPausecomms)
ON_BN_CLICKED(IDC_TRACKCOMMS, OnTrackcomms)
ON_WM_VSCROLL()
ON_WM_SIZE()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -