📄 fcusimulatordlg.cpp
字号:
// 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 + -