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

📄 readcompassview.cpp

📁 串口
💻 CPP
📖 第 1 页 / 共 2 页
字号:
					   if(!m_pSet->Update()) 
						   AfxMessageBox(_T("增加新记录失败!"));
					}
					if(!m_pSet->IsEOF())
					{
					   m_pSet->MoveLast();
					}
					m_num++;
					i++;
					//m_strPortRXData2 =CString(rxdata);
					CReadCompassDoc *pDoc=GetDocument();////每来一个中断激发一次重画
					pDoc->UpdateAllViews(NULL);
				}

			}
		}
	}
	UpdateData(FALSE); //更新编辑框内容
}*/


			void CReadCompassView::OnClear() 
			{
				// TODO: Add your control notification handler code here
				m_strRXData = _T("");
				UpdateData(FALSE);
			}
			
			void CReadCompassView::OnStop() 
			{
				// TODO: Add your control notification handler code here
				m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据
				bReceive = !bReceive;
				//UpdateData(TRUE);
				if(bReceive)
					m_ctrlReceive.SetWindowText(_T("停止接收"));
				else
					m_ctrlReceive.SetWindowText(_T("开始接收"));
			}
			
			void CReadCompassView::OnSend() 
			{
				// TODO: Add your control notification handler code here
				UpdateData(TRUE); //读取编辑框内容 
				if(m_nInputMode < 1) 
				{ 
					CByteArray hexdata; 
					int len=String2Hex(m_strTXData,hexdata); //此处返回的len可以用于计算发送了多少个十六进制数 
					m_ctrlComm.SetOutput(COleVariant(hexdata)); //发送十六进制数据 
				} 
				else 
					m_ctrlComm.SetOutput(COleVariant(m_strTXData));//发送ASCII字符数据
			}
			
			void CReadCompassView::OnCheckAutosend() 
			{
				// TODO: Add your control notification handler code here
			    UpdateData(TRUE);
				if(m_bAutoSend) 
				{ 
					SetTimer(1,m_Time,NULL);//时间为xxx毫秒 
				} 
				else 
				{ 
					KillTimer(1); //取消定时 
				}
			}

			int  CReadCompassView::String2Hex(CString str, CByteArray &senddata)
			{
				int hexdata,lowhexdata; 
				int hexdatalen=0; 
				int len=str.GetLength(); 
				senddata.SetSize(len/2); 
				for(int i=0;i<len;) 
				{ 
					char lstr,hstr=str[i]; 
					if(hstr==' ') 
					{ 
						i++; 
						continue; 
					} 
					i++; 
					if(i>=len) 
						break; 
					lstr=str[i]; 
					hexdata=ConvertHexChar(hstr); 
					lowhexdata=ConvertHexChar(lstr); 
					if((hexdata==16)||(lowhexdata==16)) 
						break; 
					else 
						hexdata=hexdata*16+lowhexdata; 
					i++; 
					senddata[hexdatalen]=(char)hexdata; 
					hexdatalen++; 
				} 
				senddata.SetSize(hexdatalen); 
				return hexdatalen; 
			}
			
			char CReadCompassView::ConvertHexChar(char ch)
			{
				if((ch>='0')&&(ch<='9')) 
					return ch-0x30; 
				else if((ch>='A')&&(ch<='F')) 
					return ch-'A'+10; 
				else if((ch>='a')&&(ch<='f')) 
					return ch-'a'+10; 
				else return (-1); 
			}
			
			void CReadCompassView::OnOk() 
			{
				// TODO: Add your control notification handler code here
				if(m_ctrlComm.GetPortOpen()) 
					m_ctrlComm.SetPortOpen(FALSE); 
				m_ctrlComm.SetCommPort(1); //选择com1 
				if( !m_ctrlComm.GetPortOpen()) 
					m_ctrlComm.SetPortOpen(TRUE);//打开串口 
				else 
					AfxMessageBox("cannot open serial port"); 

				m_ctrlDataType.AddString(_T("按ASCII码"));
				m_ctrlDataType.AddString(_T("按2进制"));
				m_ctrlDataType.AddString(_T("按16进制"));
				m_ctrlDataType.SetCurSel(m_nInputMode);

				m_ctrlMoni.AddString(_T("第1路模拟量"));
				m_ctrlMoni.AddString(_T("第2路模拟量"));
				m_ctrlMoni.AddString(_T("第3路模拟量"));
				m_ctrlMoni.AddString(_T("第4路模拟量"));
				m_ctrlMoni.AddString(_T("第5路模拟量"));
				m_ctrlMoni.AddString(_T("第6路模拟量"));
				m_ctrlMoni.AddString(_T("第7路模拟量"));
				m_ctrlMoni.AddString(_T("第8路模拟量"));
				m_ctrlDataType.SetCurSel(m_nMoni);

				UpdateData(TRUE); //读取编辑框内容
				m_ctrlComm.SetSettings(m_ComSetting); //波特率9600,无校验,8个数据位,1个停止位 
				m_ctrlComm.SetInputMode(1); //1:表示以二进制方式检取数据 
				m_ctrlComm.SetRThreshold(1); //参数1表示每当串接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件 
				m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为0 
				m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据 
			}


void CReadCompassView::OnSelchangeCombo() 
{
	// TODO: Add your control notification handler code here
	m_nInputMode = m_ctrlDataType.GetCurSel();
}

void CReadCompassView::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	switch(nIDEvent)
	{
	case 1:
		OnSend();
		break;
	case 2:
		m_ctrlSendFile.EnableWindow(TRUE);
		m_ctrlSendFile.EnableWindow(TRUE);
		m_strSendFilePathName=m_strTempSendFilePathName;
		m_ctrlEditSendFile.SetWindowText(m_strSendFilePathName);//m_strSendFilePathName
		KillTimer(3);
	default:
		break;
	}
	CRecordView::OnTimer(nIDEvent);
}


void CReadCompassView::OnButtonSendfile() 
{	
	// TODO: Add your control notification handler code here
	CFile fp;
	if(!(fp.Open((LPCTSTR)m_strSendFilePathName,CFile::modeRead))) 
	{
		AfxMessageBox("Open file failed!");
		return;
	}
	fp.SeekToEnd();
	unsigned long fplength=fp.GetLength();
	m_nFileLength=fplength;
	char* fpBuff;
	fpBuff=new char[fplength];
	fp.SeekToBegin();
	if(fp.Read(fpBuff,fplength)<1)
	{
		fp.Close();
		return;
	}
	fp.Close();
    m_bSendFile=TRUE;
	m_strTempSendFilePathName=m_strSendFilePathName;
	m_ctrlEditSendFile.SetWindowText("正在发送......");
		//发送文件时,以下功能不能使用
	m_ctrlSendFile.EnableWindow(FALSE); 
	m_bAutoSend = FALSE;
		//m_Port.WriteToPort((LPCTSTR)fpBuff,fplength);
	m_ctrlComm.SetOutput(COleVariant(fpBuff));
	delete fpBuff;
	
	m_ctrlEditSendFile.SetWindowText("发送完毕!");
	SetTimer(2,1000,NULL);
}

void CReadCompassView::OnButtonFilebrower() 
{
	// TODO: Add your control notification handler code here
	LPCSTR	lpszPath = "c:\\comdata";
	SetCurrentDirectory( lpszPath );
	static char BASED_CODE szFilter[] = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||";

	CFileDialog FileDlg( TRUE,  NULL,  NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
		 szFilter );
	FileDlg.m_ofn.lpstrInitialDir = lpszPath ;

	if( FileDlg.DoModal() ==IDOK )
	{

		CString strFileName = FileDlg.GetFileName( );
		CString strFileExt = FileDlg.GetFileExt( );
		CString lpstrName =  FileDlg.GetPathName( );
		m_strSendFilePathName=lpstrName;
		UpdateData(FALSE);
	}	
}


void CReadCompassView::OnOk2() 
{
				// TODO: Add your control notification handler code here
				if(m_ctrlComm.GetPortOpen()) 
					m_ctrlComm.SetPortOpen(FALSE); 
				m_ctrlComm.SetCommPort(2); //选择com1 
				if( !m_ctrlComm.GetPortOpen()) 
					m_ctrlComm.SetPortOpen(TRUE);//打开串口 
				else 
					AfxMessageBox("cannot open serial port"); 

				m_ctrlDataType.AddString(_T("按ASCII码"));
				m_ctrlDataType.AddString(_T("按2进制"));
				m_ctrlDataType.AddString(_T("按16进制"));
				m_ctrlDataType.SetCurSel(m_nInputMode);


				UpdateData(TRUE); //读取编辑框内容
				m_ctrlComm.SetSettings(m_ComSetting); //波特率9600,无校验,8个数据位,1个停止位 
				m_ctrlComm.SetInputMode(1); //1:表示以二进制方式检取数据 
				m_ctrlComm.SetRThreshold(1); //参数1表示每当串接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件 
				m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为0 
				m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据
}

void CReadCompassView::OnOk3() 
{
	// TODO: Add your control notification handler code here
				if(m_ctrlComm.GetPortOpen()) 
					m_ctrlComm.SetPortOpen(FALSE); 
				m_ctrlComm.SetCommPort(3); //选择com1 
				if( !m_ctrlComm.GetPortOpen()) 
					m_ctrlComm.SetPortOpen(TRUE);//打开串口 
				else 
					AfxMessageBox("cannot open serial port"); 

				m_ctrlDataType.AddString(_T("按ASCII码"));
				m_ctrlDataType.AddString(_T("按2进制"));
				m_ctrlDataType.AddString(_T("按16进制"));
				m_ctrlDataType.SetCurSel(m_nInputMode);


				UpdateData(TRUE); //读取编辑框内容
				m_ctrlComm.SetSettings(m_ComSetting); //波特率9600,无校验,8个数据位,1个停止位 
				m_ctrlComm.SetInputMode(1); //1:表示以二进制方式检取数据 
				m_ctrlComm.SetRThreshold(1); //参数1表示每当串接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件 
				m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为0 
				m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据
}

void CReadCompassView::OnOk4() 
{
	// TODO: Add your control notification handler code here
				if(m_ctrlComm.GetPortOpen()) 
					m_ctrlComm.SetPortOpen(FALSE); 
				m_ctrlComm.SetCommPort(1); //选择com1 
				if( !m_ctrlComm.GetPortOpen()) 
					m_ctrlComm.SetPortOpen(TRUE);//打开串口 
				else 
					AfxMessageBox("cannot open serial port"); 

				m_ctrlDataType.AddString(_T("按ASCII码"));
				m_ctrlDataType.AddString(_T("按2进制"));
				m_ctrlDataType.AddString(_T("按16进制"));
				m_ctrlDataType.SetCurSel(m_nInputMode);


				UpdateData(TRUE); //读取编辑框内容
				m_ctrlComm.SetSettings(m_ComSetting); //波特率9600,无校验,8个数据位,1个停止位 
				m_ctrlComm.SetInputMode(1); //1:表示以二进制方式检取数据 
				m_ctrlComm.SetRThreshold(1); //参数1表示每当串接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件 
				m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为0 
				m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据
}

void CReadCompassView::OnSelchangeCombomoni() 
{
	// TODO: Add your control notification handler code here
	m_nMoni =  m_ctrlMoni.GetCurSel();
}

⌨️ 快捷键说明

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