📄 exa06doc.cpp
字号:
// exa06Doc.cpp : implementation of the CExa06Doc class
//
#include "stdafx.h"
#include "exa06.h"
#include "exa06Doc.h"
#include "AdduserDialog.h"
#include "TemperDialog.h"
#include "PortDialog.h"
#include "AdminDialog.h"
#include "ChangePassDialog.h"
#include "SampleHZ.h"
#include "SamParaDialog.h"
#include "exa06View.h"
#include "COMctrl.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern CEvent InsertCompelte;
/////////////////////////////////////////////////////////////////////////////
// CExa06Doc diagnostics
#ifdef _DEBUG
void CExa06Doc::AssertValid() const
{
CDocument::AssertValid();
}
void CExa06Doc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CExa06Doc
IMPLEMENT_DYNCREATE(CExa06Doc, CDocument)
BEGIN_MESSAGE_MAP(CExa06Doc, CDocument)
//{{AFX_MSG_MAP(CExa06Doc)
ON_COMMAND(ID_ADD_USER, OnAddUser)
ON_COMMAND(ID_PORT_SET, OnPortSet)
ON_COMMAND(ID_TEMPER_SET, OnTemperSet)
ON_COMMAND(ID_ADMIN_PRIRO, OnAdminPriro)
ON_COMMAND(ID_PASSWORD_CHANGE, OnPasswordChange)
ON_COMMAND(ID_SAMPLEHZ, OnSamplehz)
ON_COMMAND(ID_CHANNEL1, OnChannel1)
ON_COMMAND(ID_CHANNEL2, OnChannel2)
ON_COMMAND(ID_CHANNEL3, OnChannel3)
ON_COMMAND(ID_CHANNEL4, OnChannel4)
ON_COMMAND(ID_CHANNEL5, OnChannel5)
ON_COMMAND(ID_CHANNEL6, OnChannel6)
ON_COMMAND(ID_CHANNEL7, OnChannel7)
ON_COMMAND(ID_CHANNEL8, OnChannel8)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CExa06Doc construction/destruction
CExa06Doc::CExa06Doc()
{
//COM port
CtrlPort = "COM1";
DataPort = "COM2";
//tempereture set
AlarmHigh_Temper = 80;
AlarmLow_Temper = 10;
PreAlarmLow_Temper = 20;
PreAlarmHigh_Temper = 60;
//user and password
User[0] = "at";
Pass[0] = "at";
Priority[0] = 2;
curPri =1; //user 0; admin 1; debuger 2
curNum =1; //current user , admin and debugger numbers
//frequze param, in second
SamNormHZ = 5;
SamAlarmHZ = 2;
SaveNormHZ = 20;
SaveAlarmHZ = 1;
ShowHZ = 30;
//channel param inclide: a,t,init value and name
ChannelNum = 4;
PointPerChannel = 15;
for(int i=0;i<8;i++)
{
for(int j=0;j<20;j++)
{
ChannelName[i][j] = _T("");
ChannelValueA[i][j] = 0;
ChannelInit[i][j] = 0;
ChannelValueT[i][j] = -255;
}
}
ChannelParam();
//normal or excepet 0:normal, 1:except
Mode = 0;
//the position of every point
// PointPos = new CPoint(ChannelNum*20);
for(i=0;i<ChannelNum*20;i++)
{
this->PointPos[i].x = 0;
this->PointPos[i].y = 0;
}
AddPointPos();
//init db
DataCount = 0;
//data buffer
sndNum = 0;
sndTempNum =0;
m_strSendRequire = _T("0000 0003 0000 002C 0000 0000 0000 0001 0000 0001 0000 0000 0000 0064 0000 0000 FFFF FF9A 0000 0000 FFFF FBD3");
String2Hex(m_strSendRequire,m_SendRequireHEX);
DataWithHeadLen = 0;
for(i=0;i<64;i++)
DataInWithHead[i] = 0;
datacont = 0;
ctrlcont = 0;
for(i=0;i<this->PointPerChannel;i++)
tempbuffer.buffer[i] = 0;
for(int j=0;j<4;j++)
{
tempdraw[j].CurChannel = j;
for(i=0;i<PointPerChannel;i++)
tempdraw[j].buffer[i] = 0;
}
}
CExa06Doc::~CExa06Doc()
{
}
BOOL CExa06Doc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
CFile file;
if(file.Open("dat",CFile::modeRead))
{
CArchive ar(&file,CArchive::load);
//提取温度
ar>>AlarmHigh_Temper>>AlarmLow_Temper>>PreAlarmLow_Temper>>PreAlarmHigh_Temper;
//提取端口
ar>>CtrlPort>>DataPort;
//提取用户名,密码,权限及用户数目
ar>>curNum;
for(int i=0;i<curNum;i++)
ar>>User[i]>>Pass[i]>>Priority[i];
//提取采样和存储频率
ar>>SamAlarmHZ>>SamNormHZ>>SaveAlarmHZ>>SaveNormHZ;
//channel and point num
ar>>ChannelNum>>PointPerChannel;
//通道参数 a,t ,init,dot
for(i=0;i<8;i++)
{
for(int j=0;j<20;j++)
{
ar>>ChannelName[i][j];
ar>>ChannelValueA[i][j];
ar>>ChannelInit[i][j];
ar>>ChannelValueT[i][j];
}
}
ar.Flush();
ar.Close();
file.Close();
return TRUE;
}
file.Open("dat",CFile::modeCreate);
/**/
return TRUE;
}
BOOL CExa06Doc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;
// TODO: Add your specialized creation code here
HBITMAP hBitmap = (HBITMAP)::LoadImage (NULL, lpszPathName,
IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
if (hBitmap == NULL) {
CString string;
string.Format (_T ("%s 不能打开这张图片"), lpszPathName);
MessageBox (NULL,string,"错误!",MB_ICONERROR);
return FALSE;
}
m_backgroundset = 1;
m_background.Attach (hBitmap);
return TRUE;
}
void CExa06Doc::OnCloseDocument()
{
CFile file;
CFileException fe;
if(!file.Open("dat",CFile::modeWrite|CFile::modeCreate,&fe))
{
fe.ReportError();
return;
}
CArchive ar(&file,CArchive::store);
//存储温度
ar<<AlarmHigh_Temper<<AlarmLow_Temper<<PreAlarmLow_Temper<<PreAlarmHigh_Temper;
//存储端口
ar<<CtrlPort<<DataPort;
//存储用户名,密码,权限及用户数目
ar<<curNum;
for(int i=0;i<curNum;i++)
ar<<User[i]<<Pass[i]<<Priority[i];
//存储采样和存储频率
ar<<SamAlarmHZ<<SamNormHZ<<SaveAlarmHZ<<SaveNormHZ;
//通道数和每条通道的点数
ar<<ChannelNum<<PointPerChannel;
//通道参数 a,t ,init,dot
for(i=0;i<8;i++)
{
for(int j=0;j<20;j++)
{
ar<<ChannelName[i][j];
ar<<ChannelValueA[i][j];
ar<<ChannelInit[i][j];
ar<<ChannelValueT[i][j];
}
}
ar.Flush();
ar.Close();
file.Close();
/**/
CDocument::OnCloseDocument();
}
void CExa06Doc::OnPortSet()
{
// TODO: Add your command handler code here
CPortDialog dlg;
CString datatemp,ctrltemp;
dlg.m_strData = DataPort;
dlg.m_strCtrl = CtrlPort;
begin:
datatemp = DataPort;
ctrltemp = CtrlPort;
if(dlg.DoModal()==IDOK)
{
//data port setting
DataPort = dlg.m_strData;
//ctrl port setting
CtrlPort = dlg.m_strCtrl;
//check the two setting
if((DataPort.CompareNoCase("COM1")&&DataPort.CompareNoCase("COM2")&&DataPort.CompareNoCase("COM3")&&
DataPort.CompareNoCase("COM4")&&DataPort.CompareNoCase("COM5")&&DataPort.CompareNoCase("COM6")))
{
DataPort = datatemp;
AfxMessageBox("error setting");
goto begin;
}
if((CtrlPort.CompareNoCase("COM1")&&CtrlPort.CompareNoCase("COM2")&&CtrlPort.CompareNoCase("COM3")&&
CtrlPort.CompareNoCase("COM4")&&CtrlPort.CompareNoCase("COM5")&&CtrlPort.CompareNoCase("COM6")))
{
CtrlPort = ctrltemp;
MessageBox(NULL,"端口设置错误","错误",MB_ICONERROR);
goto begin;
}
//two channel can not use one COM
if(!DataPort.CompareNoCase(CtrlPort))
{
DataPort = datatemp;
CtrlPort = ctrltemp;
MessageBox(NULL,"端口冲突","错误",MB_ICONERROR);
goto begin;
}
}
}
void CExa06Doc::OnTemperSet()
{
// TODO: Add your command handler code here
CTemperDialog dlg;
dlg.m_nHigh = AlarmHigh_Temper;
dlg.m_nLow = AlarmLow_Temper;
dlg.m_nPreHigh = PreAlarmHigh_Temper;
dlg.m_nPreLow = PreAlarmLow_Temper;
begin:
if(dlg.DoModal()==IDOK)
{
if(dlg.m_nHigh>dlg.m_nPreHigh&&
dlg.m_nPreHigh>dlg.m_nPreLow&&
dlg.m_nPreLow>dlg.m_nLow)
{
AlarmHigh_Temper = dlg.m_nHigh;
AlarmLow_Temper = dlg.m_nLow;
PreAlarmHigh_Temper = dlg.m_nPreHigh;
PreAlarmLow_Temper = dlg.m_nPreLow;
}
else
{
MessageBox(NULL,"参数设置错误!","错误",MB_ICONERROR);
goto begin;
}
}
}
void CExa06Doc::OnAddUser()
{
// TODO: Add your command handler code here
CString tempName;
CString tempPass;
CAdduserDialog dlg;
begin:
if(dlg.DoModal()==IDOK)
{
//there is no place for new user
if(curNum>=USERNUM)
{
AfxMessageBox("用户数已满");
return;
}
tempName = dlg.m_strAddName;
tempPass = dlg.m_strAddPass;
//username can not be clear
if(!dlg.m_strAddName.Compare(""))
{
AfxMessageBox("用户名不能为空");
goto begin;
}
//if there is still a some name user
for(int i=0;i<curNum;i++)
{
if(!dlg.m_strAddName.Compare(User[i]))
{
AfxMessageBox("改用户已存在");
goto begin;
}
}
//confirm the password
if(dlg.m_strAddPass!=dlg.m_strConfirmPass)
{
AfxMessageBox("请确认密码");
goto begin;
}
//save username and password
User[curNum] = tempName;
Pass[curNum] = tempPass;
if(curPri>0)
{
Priority[curNum] = 1;
AfxMessageBox("添加用户成功,管理员权限");
}
else
{
Priority[curNum] = 0;
AfxMessageBox("添加用户成功,一般用户权限");
}
curNum++;
}
}
void CExa06Doc::OnAdminPriro()
{
CAdminDialog dlg;
begin:
if(dlg.DoModal()==IDOK)
{
for(int i=0;i<USERNUM;i++)
{
if(!User[i].Compare(dlg.m_strName)) //check username
{
if(!Pass[i].Compare(dlg.m_strPass)) //check password
{
if(Priority[i]>0) //wether this user can be a administrator
curPri = 1;
break;
}
else
{
MessageBox(NULL,"密码错误!","错误",MB_ICONERROR);
goto begin;
}
}
}//after loop
if(curPri==0)
AfxMessageBox("无管理员权限");
else
AfxMessageBox("升级为管理员");
}
}
void CExa06Doc::OnPasswordChange()
{
// TODO: Add your command handler code here
CChangePassDialog dlg;
int pos = curNum;
begin:
if(dlg.DoModal()==IDOK)
{
//wether the user is in the list
for(int i=0;i<curNum;i++)
{
if(!User[i].Compare(dlg.m_strUserName))
pos = i;
}
if(pos==curNum)
{
AfxMessageBox("改用户不存在");
goto begin;
}
//wether the password is right
if(Pass[pos].Compare(dlg.m_strOldPass))
{
AfxMessageBox("原密码错误");
goto begin;
}
//confirm the password
if(dlg.m_strNewPass!=dlg.m_strConfirmNew)
{
AfxMessageBox("请确认新密码");
goto begin;
}
//rewrite the password
Pass[pos] = dlg.m_strNewPass;
AfxMessageBox("密码修改成功");
}
}
void CExa06Doc::OnSamplehz()
{
// TODO: Add your command handler code here
CSampleHZ dlg;
dlg.m_SamAlHour = SamAlarmHZ/3600;
dlg.m_SamAlMin = (SamAlarmHZ-dlg.m_SamAlHour*3600)/60;
dlg.m_SamAlSec = SamAlarmHZ-dlg.m_SamAlHour*3600-dlg.m_SamAlMin*60;
dlg.m_SamNorHour = SamNormHZ/3600;
dlg.m_SamNorMin = (SamNormHZ-dlg.m_SamNorHour*3600)/60;
dlg.m_SamNorSec = SamNormHZ-dlg.m_SamNorHour*3600-dlg.m_SamNorMin*60;
dlg.m_SavAlHour = SaveAlarmHZ/3600;
dlg.m_SavAlMin = (SaveAlarmHZ-dlg.m_SavAlHour*3600)/60;
dlg.m_SavAlSec = SaveAlarmHZ-dlg.m_SavAlHour*3600-dlg.m_SavAlMin*60;
dlg.m_SavNorHour = SaveNormHZ/3600;
dlg.m_SavNorMin = (SaveNormHZ-dlg.m_SavNorHour*3600)/60;
dlg.m_SavNorSec = SaveNormHZ-dlg.m_SavNorHour*3600-dlg.m_SavNorMin*60;
if(dlg.DoModal()==IDOK)
{
SamAlarmHZ = dlg.m_SamAlHour*3600+dlg.m_SamAlMin*60+dlg.m_SamAlSec;
SamNormHZ = dlg.m_SamNorHour*3600+dlg.m_SamNorMin*60+dlg.m_SamNorSec;
SaveAlarmHZ = dlg.m_SavAlHour*3600+dlg.m_SavAlMin*60+dlg.m_SavAlSec;
SaveNormHZ = dlg.m_SavNorHour*3600+dlg.m_SavNorMin*60+dlg.m_SavNorSec;
}
}
void CExa06Doc::OnChannel1()
{
// TODO: Add your command handler code here
CSamParaDialog dlg;
ShowPara(0,dlg);
if(dlg.DoModal()==IDOK)
{
EditParm(0 , dlg);
}
}
void CExa06Doc::OnChannel2()
{
// TODO: Add your command handler code here
CSamParaDialog dlg;
ShowPara(1,dlg);
if(dlg.DoModal()==IDOK)
{
EditParm(1 , dlg);
}
}
void CExa06Doc::OnChannel3()
{
// TODO: Add your command handler code here
CSamParaDialog dlg;
ShowPara(2,dlg);
if(dlg.DoModal()==IDOK)
{
EditParm(2 , dlg);
}
}
void CExa06Doc::OnChannel4()
{
// TODO: Add your command handler code here
CSamParaDialog dlg;
ShowPara(3,dlg);
if(dlg.DoModal()==IDOK)
{
EditParm(3, dlg);
}
}
void CExa06Doc::OnChannel5()
{
// TODO: Add your command handler code here
CSamParaDialog dlg;
ShowPara(4,dlg);
if(dlg.DoModal()==IDOK)
{
EditParm(4 , dlg);
}
}
void CExa06Doc::OnChannel6()
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -