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

📄 readcompassview.cpp

📁 串口
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// ReadCompassView.cpp : implementation of the CReadCompassView class
//

#include "stdafx.h"
#include "ReadCompass.h"

#include "ReadCompassSet.h"
#include "ReadCompassDoc.h"
#include "ReadCompassView.h"

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

/////////////////////////////////////////////////////////////////////////////
// CReadCompassView

double m_heading[2000];
int m_num = 0;

IMPLEMENT_DYNCREATE(CReadCompassView, CRecordView)

BEGIN_MESSAGE_MAP(CReadCompassView, CRecordView)
	//{{AFX_MSG_MAP(CReadCompassView)
	ON_BN_CLICKED(IDC_BUTTON_CLEAR, OnClear)
	ON_BN_CLICKED(IDC_BUTTON_STOP, OnStop)
	ON_BN_CLICKED(IDC_SEND, OnSend)
	ON_BN_CLICKED(IDC_CHECK_AUTOSEND, OnCheckAutosend)
	ON_BN_CLICKED(IDC_OK, OnOk)
	ON_CBN_SELCHANGE(IDC_COMBO, OnSelchangeCombo)
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_BUTTON_SENDFILE, OnButtonSendfile)
	ON_BN_CLICKED(IDC_BUTTON_FILEBROWER, OnButtonFilebrower)
	ON_BN_CLICKED(IDC_OK4, OnOk2)
	ON_BN_CLICKED(IDC_OK2, OnOk3)
	ON_BN_CLICKED(IDC_OK3, OnOk4)
	ON_CBN_SELCHANGE(IDC_COMBOMONI, OnSelchangeCombomoni)
	//}}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()

/////////////////////////////////////////////////////////////////////////////
// CReadCompassView construction/destruction

CReadCompassView::CReadCompassView()
: CRecordView(CReadCompassView::IDD)
{
	//{{AFX_DATA_INIT(CReadCompassView)
	m_pSet = NULL;
	m_bAutoSend = FALSE;
	m_ComSetting = _T("9600,n,8,1");
	m_strRXData = _T("");
	m_strTXData = _T("");
	m_Time = 1000;
	m_strSendFilePathName = _T("");
	//}}AFX_DATA_INIT
	// TODO: add construction code here
   	bReceive = FALSE;
	m_bSendFile = FALSE;
    m_nInputMode = 1;
	m_nMoni = 0;
	m_strSendFilePathName="还没有选择文件";//"No File Selected!";
    m_strCurPath="C:\\COMDATA";
	m_nFileLength=0;
}

CReadCompassView::~CReadCompassView()
{
}

void CReadCompassView::DoDataExchange(CDataExchange* pDX)
{
	CRecordView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CReadCompassView)
	DDX_Control(pDX, IDC_COMBOMONI, m_ctrlMoni);
	DDX_Control(pDX, IDC_STATIC_OPENOFF8, m_ctrlIconOpenoff8);
	DDX_Control(pDX, IDC_STATIC_OPENOFF7, m_ctrlIconOpenoff7);
	DDX_Control(pDX, IDC_STATIC_OPENOFF6, m_ctrlIconOpenoff6);
	DDX_Control(pDX, IDC_STATIC_OPENOFF5, m_ctrlIconOpenoff5);
	DDX_Control(pDX, IDC_STATIC_OPENOFF4, m_ctrlIconOpenoff4);
	DDX_Control(pDX, IDC_STATIC_OPENOFF3, m_ctrlIconOpenoff3);
	DDX_Control(pDX, IDC_STATIC_OPENOFF2, m_ctrlIconOpenoff2);
	DDX_Control(pDX, IDC_STATIC_OPENOFF1, m_ctrlIconOpenoff1);
	DDX_Control(pDX, IDC_BUTTON_SENDFILE, m_ctrlSendFile);
	DDX_Control(pDX, IDC_EDIT_SENDFILE, m_ctrlEditSendFile);
	DDX_Control(pDX, IDC_COMBO, m_ctrlDataType);
	DDX_Control(pDX, IDC_CHECK_HEXDISPLAY, m_ctrlHexDisplay);
	DDX_Control(pDX, IDC_BUTTON_STOP, m_ctrlReceive);
	DDX_Check(pDX, IDC_CHECK_AUTOSEND, m_bAutoSend);
	DDX_Text(pDX, IDC_COMSETTING, m_ComSetting);
	DDX_Text(pDX, IDC_EDIT_REC1, m_strRXData);
	DDX_Text(pDX, IDC_EDIT_SEND1, m_strTXData);
	DDX_Control(pDX, IDC_MSCOMM1, m_ctrlComm);
	DDX_Text(pDX, IDC_TIME, m_Time);
	DDX_Text(pDX, IDC_EDIT_SENDFILE, m_strSendFilePathName);
	DDX_FieldText(pDX, IDC_EDIT2, m_pSet->m_temperature, m_pSet);
	//}}AFX_DATA_MAP
}

BOOL CReadCompassView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
	return CRecordView::PreCreateWindow(cs);
}

void CReadCompassView::OnInitialUpdate()
{
	m_pSet = &GetDocument()->m_readCompassSet;
	CRecordView::OnInitialUpdate();
	ResizeParentToFit();
	
}

/////////////////////////////////////////////////////////////////////////////
// CReadCompassView printing

BOOL CReadCompassView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CReadCompassView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CReadCompassView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CReadCompassView diagnostics

#ifdef _DEBUG
void CReadCompassView::AssertValid() const
{
	CRecordView::AssertValid();
}

void CReadCompassView::Dump(CDumpContext& dc) const
{
	CRecordView::Dump(dc);
}

CReadCompassDoc* CReadCompassView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CReadCompassDoc)));
	return (CReadCompassDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CReadCompassView database support
CRecordset* CReadCompassView::OnGetRecordset()
{
	return m_pSet;
}


/////////////////////////////////////////////////////////////////////////////
// CReadCompassView message handlers

BEGIN_EVENTSINK_MAP(CReadCompassView, CRecordView)
//{{AFX_EVENTSINK_MAP(CReadCompassView)
ON_EVENT(CReadCompassView, IDC_MSCOMM1, 1 /* OnComm */, OnOnComm, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

void CReadCompassView::OnOnComm()
{
	// TODO: Add your control notification handler code here
    VARIANT variant_inp;
    COleSafeArray safearray_inp;//COleSafeArray操作任意类型任意维数的数组
    LONG len,k;
	int i=0;
	double q;
    BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
    CString strtemp;//,m_strRXData1;//,m_strRXData2;

	if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
	{
	//	Sleep(50); 
	    variant_inp=m_ctrlComm.GetInput(); //读缓冲区
        safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
        len=safearray_inp.GetOneDimSize(); //得到有效数据长度//返回一维COleSafeArray对象中的元素数 		
		for(k=0;k<len;k++)
		    safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
		for(k=0;k<len;k++) //将数组转换为Cstring型变量
		{
			BYTE bt=*(char*)(rxdata+k); //字符型			   
			if(m_ctrlHexDisplay.GetCheck()) 
				strtemp.Format("%02X ",bt); //将字符以十六进制方式送入临时变量strtemp存放,注意这里加入一个空隔 
			else 
				strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放 
			m_strRXData+=strtemp; //加入接收编辑框对应字符串
			UpdateData(FALSE);
		}

		if("30 03" == m_strRXData.Mid(0,5))
		{
			for(i=0;i<len;i+=6)
			{				   
				   if(!m_pSet->IsEOF()) 
					   m_pSet->MoveLast();////////
				   m_pSet->AddNew();
				   UpdateData(TRUE);				   
				   char tbuf1[10];
				   double tbuf2[10];
				   CString strTemp1;
				   strTemp1 =m_strRXData.Mid(i*17+6,5);
				   char *temp1= (char*) ((LPCSTR)strTemp1);
				   tbuf1[0]=temp1[0];
				   tbuf1[1]=temp1[1]; 
				   tbuf1[2]=temp1[3];
				   tbuf1[3]=temp1[4];
				   tbuf2[0]=ConvertHexChar(tbuf1[3]);
				   tbuf2[1]=16*ConvertHexChar(tbuf1[2]);
			       tbuf2[2]=256*ConvertHexChar(tbuf1[1]);
				   tbuf2[3]=256*16*ConvertHexChar(tbuf1[0]);
				   q=tbuf2[0]+tbuf2[1]+tbuf2[2]+tbuf2[3];
				   q=2.5*q/1024;
				   m_pSet->m_temperature=strTemp1;
				   char *temp2= tbuf1;
				   m_heading[m_num]=(atoi(temp2)/10.0);
				   m_pSet->m_number++;
				   UpdateData(FALSE);
				   if (m_pSet->CanUpdate())
				   {
					   if(!m_pSet->Update()) 
						   AfxMessageBox(_T("增加新记录失败!"));
				   }
				   if(!m_pSet->IsEOF())
				   {
					   m_pSet->MoveLast();
				   }
				   m_num++;
				   CReadCompassDoc *pDoc=GetDocument();////每来一个中断激发一次重画
				   pDoc->UpdateAllViews(NULL);
			}
		}
	}
	UpdateData(FALSE);   //更新编辑框内容
}

/* 
{
	VARIANT variant_inp; 
	COleSafeArray safearray_inp; 
	LONG len,k; 
	double q;
	int i=0;
	BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed. 
	CString strtemp,strtemp1; 
	if(bReceive)
	{
		if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符 
		{ 
			variant_inp=m_ctrlComm.GetInput(); //读缓冲区 
			safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量 
			len=safearray_inp.GetOneDimSize(); //得到有效数据长度 
			if(len<7)
			{
				for(k=0;k<len;k++) 
					safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组 
				for(k=0;k<len;k++) //将数组转换为Cstring型变量 
				{ 
					BYTE bt=*(char*)(rxdata+k); //字符型 
					if(m_ctrlHexDisplay.GetCheck()) 
						strtemp.Format("%02X ",bt); //将字符以十六进制方式送入临时变量strtemp存放,注意这里加入一个空隔 
					else 
						strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放 

						m_strRXData+=strtemp; //加入接收编辑框对应字符串	
				} 
				strtemp1=m_strRXData.Mid(i*17,2);
				if(strtemp1=="30")
				{
					strtemp1=m_strRXData.Mid(i*17+6,5);
					if(m_strRXData.GetLength() >= 200)
					   m_strRXData.Empty();
					UpdateData(FALSE);				   
				    if(!m_pSet->IsEOF()) 
					    m_pSet->MoveLast();
				    m_pSet->AddNew();
				    UpdateData(TRUE);				   
					char tbuf1[10];
					double tbuf2[10];
					char *temp1= (char*) ((LPCSTR)strtemp1);
					tbuf1[3]=temp1[0];
				    tbuf1[2]=temp1[1]; 
				    tbuf1[1]=temp1[3];
				    tbuf1[0]=temp1[4];
					tbuf2[0]=ConvertHexChar(tbuf1[0]);
					tbuf2[1]=16*ConvertHexChar(tbuf1[1]);
					tbuf2[2]=256*ConvertHexChar(tbuf1[2]);
					tbuf2[3]=256*16*ConvertHexChar(tbuf1[3]);
					q=tbuf2[0]+tbuf2[1]+tbuf2[2]+tbuf2[3];
				//	q=2.5*q/1024;
					m_pSet->m_temperature=CString(tbuf2[0]+tbuf2[1]+tbuf2[2]+tbuf2[3]);
					m_heading[0] = 10.2;
					m_pSet->m_number++;
					UpdateData(FALSE);
					if (m_pSet->CanUpdate())
					{

⌨️ 快捷键说明

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