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

📄 mod_rssimdlg.cpp

📁 mod_RSsim
💻 CPP
📖 第 1 页 / 共 5 页
字号:
/////////////////////////////////////////////////////////////////////////////
//
// 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 + -