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

📄 fcusimulatordlg.cpp

📁 本源码实现在WinCE系统下
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// FcuSimulatorDlg.cpp : implementation file
//

#include "stdafx.h"
#include "FcuSimulator.h"
#include "FcuSimulatorDlg.h"
#include "math.h"

#define PI   3.14159
#define VOLTAGE_AMPTITUDE 500

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif





/////////////////////////////////////////////////////////////////////////////
// CFcuSimulatorDlg dialog

CFcuSimulatorDlg::CFcuSimulatorDlg(CWnd* pParent /*=NULL*/)
: CDialog(CFcuSimulatorDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CFcuSimulatorDlg)
	m_Data0 = 0;
	m_Data1 = 0;
	m_Data10 = 0;
	m_Data11 = 0;
	m_Data12 = 0;
	m_Data13 = 0;
	m_Data14 = 0;
	m_Data15 = 0;
	m_Data16 = 0;
	m_Data2 = 0;
	m_Data3 = 0;
	m_Data30 = 0;
	m_Data31 = 0;
	m_Data4 = 0;
	m_Data5 = 0;
	m_Data6 = 0;
	m_Data7 = 0;
	m_Data8 = 0;
	m_Data9 = 0;
	m_Data17 = 0;
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CFcuSimulatorDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CFcuSimulatorDlg)
	DDX_Text(pDX, IDC_EDIT_Data0, m_Data0);
	DDX_Text(pDX, IDC_EDIT_Data1, m_Data1);
	DDX_Text(pDX, IDC_EDIT_Data10, m_Data10);
	DDX_Text(pDX, IDC_EDIT_Data11, m_Data11);
	DDX_Text(pDX, IDC_EDIT_Data12, m_Data12);
	DDX_Text(pDX, IDC_EDIT_Data13, m_Data13);
	DDX_Text(pDX, IDC_EDIT_Data14, m_Data14);
	DDX_Text(pDX, IDC_EDIT_Data15, m_Data15);
	DDX_Text(pDX, IDC_EDIT_Data16, m_Data16);
	DDX_Text(pDX, IDC_EDIT_Data2, m_Data2);
	DDX_Text(pDX, IDC_EDIT_Data3, m_Data3);
	DDX_Text(pDX, IDC_EDIT_Data30, m_Data30);
	DDX_Text(pDX, IDC_EDIT_Data31, m_Data31);
	DDX_Text(pDX, IDC_EDIT_Data4, m_Data4);
	DDX_Text(pDX, IDC_EDIT_Data5, m_Data5);
	DDX_Text(pDX, IDC_EDIT_Data6, m_Data6);
	DDX_Text(pDX, IDC_EDIT_Data7, m_Data7);
	DDX_Text(pDX, IDC_EDIT_Data8, m_Data8);
	DDX_Text(pDX, IDC_EDIT_Data9, m_Data9);
	DDX_Text(pDX, IDC_EDIT_Data17, m_Data17);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CFcuSimulatorDlg, CDialog)
//{{AFX_MSG_MAP(CFcuSimulatorDlg)
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_BUTTON_RECV, OnButtonRecv)
ON_BN_CLICKED(IDC_BUTTON_SEND, OnButtonSend)
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFcuSimulatorDlg message handlers

BOOL CFcuSimulatorDlg::OnInitDialog()
{
	CDialog::OnInitDialog();
	
	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	CenterWindow(GetDesktopWindow());	// center to the hpc screen
	
	// TODO: Add extra initialization here
	//**********************************************************************
	//* 可以不放在OnInitDialog()里面,可以放到孔鹤编写类的构造函数中
	//**********************************************************************
	//初始化m_memFileMap变量
	if (!m_memFileMap.CreateEx(WS_EX_CLIENTEDGE,
		_T("STATIC"), _T("Hi"),WS_POPUP, 5, 5, 30, 30, m_hWnd, NULL))
	{
		AfxMessageBox(_T("创建通讯窗口失败"));
	}
	
	//挂接共享内存发生变化时,自动回调函数的指针
	m_memFileMap.m_OnMemDataChange = OnCanDataChange;
	
	//打开内存映射文件
	DWORD dReturnCode;
	dReturnCode = m_memFileMap.OpenFileMap(this);
	if (dReturnCode <= 0)
	{
		AfxMessageBox(_T("创建失败"));
	}
	//if (dReturnCode >=1)
	//{
	//AfxMessageBox(_T("创建成功"));
	//}
	//if (dReturnCode == 2) 
	//{
	//AfxMessageBox(_T("第二次创建失败"));
	//}
	UpdateData(false);
	
	
	//**********************************************************************
	//初始化所有变量到静止状态
	
	//* 模拟数据变量定义
    Generator1_state = GENERATOR_STATUS_STOP;  //发电机组1状态
	Generator2_state = GENERATOR_STATUS_STOP;  //发电机组2状态
	
	RealTime = 0;
    SetTimer(1,TIMEDELAY,NULL);
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CFcuSimulatorDlg::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
	//**********************************************************************
	//* 关闭共享内存
	//**********************************************************************
	m_memFileMap.CloseFileMap();
	//**********************************************************************
	
	CDialog::OnClose();
}

/*
*函数介绍:内存映射文件内容变化事件,自动触发的回调函数(相当于中断响应函数)
*入口参数:pWnd指向窗体指针(可以不是窗口)
*出口参数:(无)
*返回值:(无)
*/
void CALLBACK CFcuSimulatorDlg::OnCanDataChange(LPVOID pWnd)
{
	//**********************************************************************
	//* 在孔鹤编写的代码中,如果用中断方式,可以把更新内部变量的代码写在这里
	//* 响应CAN数据在外部发生的变化(例如合闸指令)
	//* "CFcuSimulatorDlg" 需要修改成孔鹤编写类的名字
	//**********************************************************************
	CFcuSimulatorDlg * pDlg;
	pDlg = (CFcuSimulatorDlg *)pWnd;

	int * tempBuf;
	tempBuf = (int *)(pDlg->m_memFileMap.ReadBuffer());
	
	pDlg->Terminal1_Command = *(tempBuf+30);
	pDlg->Terminal2_Command = *(tempBuf+31);

	
	pDlg->m_Data0 = *(tempBuf+0);
	pDlg->m_Data1 = *(tempBuf+1);
	pDlg->m_Data2 = *(tempBuf+2);
	pDlg->m_Data3 = *(tempBuf+3);
	pDlg->m_Data4 = *(tempBuf+4);
	pDlg->m_Data5 = *(tempBuf+5);
	pDlg->m_Data6  = *(tempBuf+6);
	pDlg->m_Data7  = *(tempBuf+7);
	pDlg->m_Data8  = *(tempBuf+8);
	pDlg->m_Data9  = *(tempBuf+9);
	pDlg->m_Data10 = *(tempBuf+10);
	pDlg->m_Data11 = *(tempBuf+11);
	pDlg->m_Data12  = *(tempBuf+12);
	pDlg->m_Data13  = *(tempBuf+13);
	pDlg->m_Data14  = *(tempBuf+14);
	pDlg->m_Data15  = *(tempBuf+15);
	pDlg->m_Data16  = *(tempBuf+16);
	pDlg->m_Data17  = *(tempBuf+17);
	pDlg->m_Data30 = pDlg->Terminal1_Command;
	pDlg->m_Data31 = pDlg->Terminal2_Command;
	pDlg->UpdateData(FALSE);
	//**********************************************************************
}

/*
*函数介绍:读取按钮单击事件(相当于定时发送一个批次)
*入口参数:(无)
*出口参数:(无)
*返回值:(无)
*/
void CFcuSimulatorDlg::OnButtonRecv() 
{
	// TODO: Add your control notification handler code here
	//**********************************************************************
	//* 在孔鹤编写的代码中,如果用查询方式,可以把更新内部变量的代码写在这里
	//**********************************************************************
	/*int * tempBuf;
	tempBuf = (int *)m_memFileMap.ReadBuffer();
	
	Terminal1_Command = *(tempBuf+30);
	Terminal2_Command = *(tempBuf+31);

	
	m_Data0 = *(tempBuf+0);
	m_Data1 = *(tempBuf+1);
	m_Data2 = *(tempBuf+2);
	m_Data3 = *(tempBuf+3);
	m_Data4 = *(tempBuf+4);
	m_Data5 = *(tempBuf+5);
	m_Data6  = *(tempBuf+6);
	m_Data7  = *(tempBuf+7);
	m_Data8  = *(tempBuf+8);
	m_Data9  = *(tempBuf+9);
	m_Data10 = *(tempBuf+10);
	m_Data11 = *(tempBuf+11);
	m_Data12  = *(tempBuf+12);
	m_Data13  = *(tempBuf+13);
	m_Data14  = *(tempBuf+14);
	m_Data15  = *(tempBuf+15);
	m_Data16  = *(tempBuf+16);
	m_Data17  = *(tempBuf+17);
	m_Data30 = Terminal1_Command;
	m_Data31 = Terminal2_Command;
	UpdateData(FALSE);*/
	//**********************************************************************
}

/*
*函数介绍:读取按钮单击事件(相当于查询方式)
*入口参数:(无)
*出口参数:(无)
*返回值:(无)
*/
void CFcuSimulatorDlg::OnButtonSend() 
{
	// TODO: Add your control notification handler code here
	//**********************************************************************
	//* 在孔鹤编写的代码中,形如定时发送一个批次的函数
	//* 把内部变量组装成一个批次放在一个char []缓冲区里面,然后发送出去
	//**********************************************************************
	int tempBuf[32];
	
	//组装一个批次的数据
	tempBuf[0] = GridV_A;
	tempBuf[1] = GridV_B;
	tempBuf[2] = GridV_C;
	tempBuf[3] = Grid_I;
	tempBuf[4] = Grid_F;
	tempBuf[5] = Grid_P;
	
	tempBuf[6]  = GeneratorV1_A;
	tempBuf[7]  = GeneratorV1_B;
	tempBuf[8]  = GeneratorV1_C;
	tempBuf[9]  = Generator1_I;
	tempBuf[10] = Generator1_F;
	tempBuf[11] = Generator1_P;
	
	tempBuf[12]  = GeneratorV2_A;
	tempBuf[13]  = GeneratorV2_B;
	tempBuf[14]  = GeneratorV2_C;
	tempBuf[15]  = Generator2_I;
	tempBuf[16]  = Generator2_F;
	tempBuf[17]  = Generator2_P;

	//tempBuf[30]  = TERMINAL_COMMAND_STOP;//*
	//tempBuf[31]  = TERMINAL_COMMAND_START;//*
	
	//tempBuf[18]  = Generator1_state;  //发电机组1状态
	//tempBuf[19]  = Generator2_state;  //发电机组2状态
	
	m_memFileMap.WriteBuffer((char *)tempBuf, 18*sizeof(DWORD));
	//**********************************************************************
}

void CFcuSimulatorDlg::OnTimer(UINT nIDEvent) 

⌨️ 快捷键说明

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