📄 atmeasureview.cpp
字号:
// AtmeasureView.cpp : implementation of the CAtmeasureView class
//
#include "stdafx.h"
#include "Atmeasure.h"
#include "AtmeasureSet.h"
#include "AtmeasureDoc.h"
#include "AtmeasureView.h"
#include "mscomm.h"
#include "SysDialog.h"
#include "SysSet.h"
#include "Point.h"
#include "CyTime.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define ID_TIMER 1
/////////////////////////////////////////////////////////////////////////////
// CAtmeasureView
IMPLEMENT_DYNCREATE(CAtmeasureView, CRecordView)
BEGIN_MESSAGE_MAP(CAtmeasureView, CRecordView)
//{{AFX_MSG_MAP(CAtmeasureView)
ON_COMMAND(ID_START, OnStart)
ON_COMMAND(ID_STOP, OnStop)
ON_WM_TIMER()
ON_WM_SIZE()
ON_WM_PAINT()
ON_BN_CLICKED(IDC_OK, OnOk)
ON_BN_CLICKED(IDC_DRAW, OnDraw)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CRecordView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CRecordView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CRecordView::OnFilePrintPreview)
END_MESSAGE_MAP()
BEGIN_EVENTSINK_MAP(CAtmeasureView, CView)
//{{AFX_EVENTSINK_MAP(CExa06View)
ON_EVENT(CAtmeasureView, IDC_DATACOM_MSCOMM, 1 /* OnComm */, OnCommDatacom, VTS_NONE)
ON_EVENT(CAtmeasureView, IDC_CTRLCOM_MSCOMM, 1 /* OnComm */, OnCommCtrlcom, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAtmeasureView construction/destruction
CAtmeasureView::CAtmeasureView()
: CRecordView(CAtmeasureView::IDD)
{
//{{AFX_DATA_INIT(CAtmeasureView)
m_pSet = NULL;
m_PointRoad = _T("1");
m_PointRoad0 = _T("1");
m_PointRoad1 = _T("1");
m_PointRoad2 = _T("1");
m_PointRoad3 = _T("1");
m_PointData = _T("01");
m_PointData0 = _T("02");
m_PointData1 = _T("03");
m_PointData2 = _T("04");
m_PointData3 = _T("05");
m_tem1 = _T("0");
m_tem2 = _T("50");
m_tem3 = _T("0");
m_tem4 = _T("24");
m_TimeData = m_TimeData.GetCurrentTime();
//}}AFX_DATA_INIT
// TODO: add construction code here
m_bCtrlCOMCreated = 0;
m_bDataCOMCreated = 0;
m_AlreadyOpen = false;
}
CAtmeasureView::~CAtmeasureView()
{
}
void CAtmeasureView::DoDataExchange(CDataExchange* pDX)
{
CRecordView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAtmeasureView)
DDX_Control(pDX, IDC_TIMECHOOSE, m_TimeChoose);
DDX_Control(pDX, IDC_TEM4, m_Tem4Ctrl);
DDX_Control(pDX, IDC_TEM3, m_Tem3Ctrl);
DDX_Control(pDX, IDC_TEM2, m_Tem2Ctrl);
DDX_Control(pDX, IDC_TEM1, m_Tem1Ctrl);
DDX_Control(pDX, IDC_point3, m_PointNameCtrl3);
DDX_Control(pDX, IDC_point2, m_PointNameCtrl2);
DDX_Control(pDX, IDC_point1, m_PointNameCtrl1);
DDX_Control(pDX, IDC_point0, m_PointNameCtrl0);
DDX_Control(pDX, IDC_point, m_PointNameCtrl);
DDX_Control(pDX, IDC_channel3, m_PointRoadCtrl3);
DDX_Control(pDX, IDC_channel2, m_PointRoadCtrl2);
DDX_Control(pDX, IDC_channel1, m_PointRoadCtrl1);
DDX_Control(pDX, IDC_channel0, m_PointRoadCtrl0);
DDX_Control(pDX, IDC_channel, m_PointRoadCtrl);
DDX_Control(pDX, IDC_LIST1, m_ListCtrl);
DDX_CBString(pDX, IDC_channel, m_PointRoad);
DDX_CBString(pDX, IDC_channel0, m_PointRoad0);
DDX_CBString(pDX, IDC_channel1, m_PointRoad1);
DDX_CBString(pDX, IDC_channel2, m_PointRoad2);
DDX_CBString(pDX, IDC_channel3, m_PointRoad3);
DDX_CBString(pDX, IDC_point, m_PointData);
DDX_CBString(pDX, IDC_point0, m_PointData0);
DDX_CBString(pDX, IDC_point1, m_PointData1);
DDX_CBString(pDX, IDC_point2, m_PointData2);
DDX_CBString(pDX, IDC_point3, m_PointData3);
DDX_CBString(pDX, IDC_TEM1, m_tem1);
DDX_CBString(pDX, IDC_TEM2, m_tem2);
DDX_CBString(pDX, IDC_TEM3, m_tem3);
DDX_CBString(pDX, IDC_TEM4, m_tem4);
DDX_DateTimeCtrl(pDX, IDC_TIMECHOOSE, m_TimeData);
//}}AFX_DATA_MAP
}
BOOL CAtmeasureView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CRecordView::PreCreateWindow(cs);
}
void CAtmeasureView::OnInitialUpdate()
{
m_pSet = &GetDocument()->m_atmeasureSet;
CRecordView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_ListCtrl.InsertColumn(0,_T("时间"),LVCFMT_IMAGE|LVCFMT_LEFT);
m_ListCtrl.SetColumnWidth(0,80);
m_ListCtrl.SetColumnWidth(1,60);
m_ListCtrl.InsertColumn(1,_T("通道号"));
m_ListCtrl.SetColumnWidth(1,50);
m_ListCtrl.InsertColumn(2,_T("点号"));
m_ListCtrl.SetColumnWidth(2,50);
// m_ListCtrl.InsertColumn(3,_T("波长"));
// m_ListCtrl.SetColumnWidth(3,60);
m_ListCtrl.InsertColumn(3,_T("温度"));
m_ListCtrl.SetColumnWidth(3,60);
m_ListCtrl.InsertColumn(4,_T("应变"));
m_ListCtrl.SetColumnWidth(4,60);
m_ListCtrl.InsertColumn(5,_T("压力"));
m_ListCtrl.SetColumnWidth(5,60);
// this->show();
// GetDlgItem(IDC_temp)->ShowWindow(SW_SHOW);
// GetDlgItem(IDC_CHANGE)->ShowWindow(SW_HIDE);
// GetDlgItem(IDC_preasure)->ShowWindow(SW_HIDE);
// this->SampPara();
// CAtmeasureDoc *aa;
// aa->SampPara();
// CAtmeasureDoc::SampPara();
}
/////////////////////////////////////////////////////////////////////////////
// CAtmeasureView printing
BOOL CAtmeasureView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CAtmeasureView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CAtmeasureView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CAtmeasureView diagnostics
#ifdef _DEBUG
void CAtmeasureView::AssertValid() const
{
CRecordView::AssertValid();
}
void CAtmeasureView::Dump(CDumpContext& dc) const
{
CRecordView::Dump(dc);
}
CAtmeasureDoc* CAtmeasureView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CAtmeasureDoc)));
return (CAtmeasureDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CAtmeasureView database support
CRecordset* CAtmeasureView::OnGetRecordset()
{
return m_pSet;
}
/////////////////////////////////////////////////////////////////////////////
// CAtmeasureView message handlers
int CAtmeasureView::SetCtrlCOM(CString str)
{
CAtmeasureDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//TODO
//判断端口号
int port;
if(!str.CompareNoCase("COM1"))
port = 1;
else if(!str.CompareNoCase("COM2"))
port = 2;
else if(!str.CompareNoCase("COM3"))
port = 3;
else if(!str.CompareNoCase("COM4"))
port = 4;
else if(!str.CompareNoCase("COM5"))
port = 5;
else if(!str.CompareNoCase("COM6"))
port = 6;
else
port = 0;
if(port == 0)
{
MessageBox("非法的控制端口","错误!",MB_ICONERROR);
return 2; //port set error
}
//判断串口是否存在以及是否被占用
HANDLE m_hCom;
m_hCom = CreateFile(str, GENERIC_READ | GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL| FILE_FLAG_OVERLAPPED, NULL);
if(m_hCom == INVALID_HANDLE_VALUE)
{
MessageBox("控制端口不存在或以被占用","",MB_ICONINFORMATION);
return 3; //port invalide
}
CloseHandle(m_hCom);
//生成一个串口控件
if(m_bCtrlCOMCreated == 0)
{
pDoc->m_CtrlCOM.Create(NULL,0,CRect(0,0,0,0),this,IDC_CTRLCOM_MSCOMM); //??????
m_bCtrlCOMCreated = 1;
}
if(pDoc->m_CtrlCOM.GetPortOpen()) //如果串口是打开的,则行关闭串口
pDoc->m_CtrlCOM.SetPortOpen(FALSE);
//参数设置
pDoc->m_CtrlCOM.SetCommPort(port);
pDoc->m_CtrlCOM.SetInBufferSize(1024); //?????
pDoc->m_CtrlCOM.SetOutBufferSize(1024); //?????
pDoc->m_CtrlCOM.SetInputLen(0); //读全部字符
pDoc->m_CtrlCOM.SetInputMode(1); //二进制方式
pDoc->m_CtrlCOM.SetRThreshold(1);
pDoc->m_CtrlCOM.SetSettings("9600,n,8,1");
if(!pDoc->m_CtrlCOM.GetPortOpen()) //如果串口没有打开则打开
pDoc->m_CtrlCOM.SetPortOpen(TRUE); //打开串口
else
{
MessageBox("打开控制端口失败!","错误!",MB_ICONERROR);
return 1; //open COM error
}
pDoc->m_CtrlCOM.GetInput();
// MessageBox("控制端口打开成功","成功",MB_ICONINFORMATION);
return 0;
}
int CAtmeasureView::SetDataCOM(CString str)
{
CAtmeasureDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//TODO
//判断端口号
int port;
if(!str.CompareNoCase("COM1"))
port = 1;
else if(!str.CompareNoCase("COM2"))
port = 2;
else if(!str.CompareNoCase("COM3"))
port = 3;
else if(!str.CompareNoCase("COM4"))
port = 4;
else if(!str.CompareNoCase("COM5"))
port = 5;
else if(!str.CompareNoCase("COM6"))
port = 6;
else
port = 0;
if(port == 0)
{
MessageBox("非法的数据端口","错误!",MB_ICONERROR);
return 2; //port set error
}
//判断串口是否存在以及是否被占用
HANDLE m_hCom;
m_hCom = CreateFile(str, GENERIC_READ | GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL| FILE_FLAG_OVERLAPPED, NULL);
if(m_hCom == INVALID_HANDLE_VALUE)
{
MessageBox("数据端口不存在或以被占用","",MB_ICONINFORMATION);
return 3; //port invalide
}
CloseHandle(m_hCom);
//生成一个串口控件
if(m_bDataCOMCreated == 0)
{
pDoc->m_DataCOM.Create(NULL,0,CRect(0,0,0,0),this,IDC_DATACOM_MSCOMM); //??????
m_bDataCOMCreated = 1;
}
if(pDoc->m_DataCOM.GetPortOpen()) //如果串口是打开的,则行关闭串口
pDoc->m_DataCOM.SetPortOpen(FALSE);
//参数设置
pDoc->m_DataCOM.SetCommPort(port);
pDoc->m_DataCOM.SetInBufferSize(1024); //?????
pDoc->m_DataCOM.SetOutBufferSize(1024); //?????
pDoc->m_DataCOM.SetInputLen(0); //读全部字符
pDoc->m_DataCOM.SetInputMode(1); //二进制方式
pDoc->m_DataCOM.SetRThreshold(1);
pDoc->m_DataCOM.SetSettings("115200,n,8,1");
if(!pDoc->m_DataCOM.GetPortOpen()) //如果串口没有打开则打开
pDoc->m_DataCOM.SetPortOpen(TRUE); //打开串口
else
{
MessageBox("打开数据端口失败!","错误!",MB_ICONERROR);
return 1; //open COM error
}
pDoc->m_DataCOM.GetInput();
// MessageBox("数据端口打开成功","成功",MB_ICONINFORMATION);
return 0;
}
void CAtmeasureView::OnStart()
{
// TODO: Add your command handler code here
CAtmeasureDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// pDoc->Pointpos(11);
//////////////初始化参数///////////
pDoc->SampPara();
CheckNum=0;
CheckNumG=0;
pDoc->JobOK=true;
pDoc->sndTempNum=0;
////////////////////打开并设置数据和控制端口//////////////////
if(m_AlreadyOpen == false)
{
int dataport,ctrlport;
dataport = SetDataCOM(pDoc->CtrlPort);
ctrlport = SetCtrlCOM(pDoc->DataPort);
if((dataport==0)&&(ctrlport!=0))
{
pDoc->m_DataCOM.SetPortOpen(FALSE);
return;
}
if((dataport!=0)&&(ctrlport==0))
{
pDoc->m_CtrlCOM.SetPortOpen(FALSE);
return;
}
if((dataport!=0)&&(ctrlport!=0))
return;
m_AlreadyOpen = true;
}
else
{
MessageBox("请先停止监控","",MB_ICONWARNING);
}
SetTimer(ID_TIMER,pDoc->SamNormHZ*1000,NULL);
pDoc->DataCOMClosed = false;
pDoc->SendTo51();
// pDoc->Pointpos(12);
}
void CAtmeasureView::OnStop()
{
// TODO: Add your command handler code here
CAtmeasureDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// pDoc->Pointpos(21);
if(m_AlreadyOpen == true)
{
KillTimer(ID_TIMER);
pDoc->DataCOMClosed = true;
pDoc->m_DataCOM.SetPortOpen(FALSE);
pDoc->m_CtrlCOM.SetPortOpen(FALSE);
m_AlreadyOpen = false;
if(CheckNum==0)
{
MessageBox("监控已停止","",MB_ICONWARNING);
}
}
else
{
MessageBox("监控尚未开始","",MB_ICONWARNING);
}
// pDoc->Pointpos(22);
}
void CAtmeasureView::OnCommCtrlcom()
{
CAtmeasureDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// pDoc->Pointpos(41);
if((CheckNum>=20)||(CheckNumG>=20))
{
OnStop();
OnStart();
}
if(pDoc->m_CtrlCOM.GetCommEvent()==2)
{
pDoc->m_DataCOM.SetOutput(COleVariant(pDoc->m_SendRequireHEX));
pDoc->datacont = 0;
pDoc->m_CtrlCOM.SetInBufferCount(0);
}
else
pDoc->m_DataCOM.SetOutput(COleVariant(pDoc->m_SendRequireHEX));
// pDoc->Pointpos(42);
}
void CAtmeasureView::OnCommDatacom()
{
CAtmeasureDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// pDoc->Pointpos(51);
if(pDoc->m_DataCOM.GetCommEvent()==2)
{
Sleep(30);
pDoc->GetData(); //put the data in DataInWithHead[64]
if(pDoc->CheckData() == false)//check the data in DataInWitHead[64]
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -