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

📄 rtdlg.cpp

📁 本程序采用VC++和MySql编写的田间信息自动采集系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	DWORD dwBytesWritten;
//	CDataHandle theHandle;
	if(nIDEvent==1)  //事件1表示缓冲区中有数据
	{
		BYTE strCommRecvMsg[1024];
		CString strtemp;
		DWORD dwBytesRead;

		//读入数据
		BOOL bReturn=ReadFile(hCommDev, strCommRecvMsg, 2048, &dwBytesRead, NULL);

		if(!bReturn) return;

    	if(dwBytesRead<1) return;

		CString strTmp,strTmp1; 
		strTmp=strCommRecvMsg;	 
		strTmp1=strTmp.Left(dwBytesRead);
		//AfxMessageBox(strTmp1);
		mFile.SeekToEnd();
        mFile.Write(strTmp1,strTmp1.GetLength());
        mFile.Flush();
		strTmp1.MakeUpper();
		if(strstr(strTmp1,"VCON") != NULL)
		{
			vcon=1;vconcount++;
			if(vconcount==1) 
				m_sMes3="检测到对方摘机!";
			else 
				m_sMes3="挂断电话!";
		}    
		else if(strstr(strTmp1,"RING")!=NULL)
		{
			m_sMes3="检测到振铃信号!";
		}    
		else if(strstr(strTmp1,"BUSY")!=NULL)
			m_sMes3="检测到忙音!";  
		else if(strstr(strTmp1,"CONNECT")!=NULL)
			m_sMes3="开始传送!";
		else if(strstr(strTmp1,"NO CARRIER")!=NULL)
			m_sMes3="无载波信号!";
		else if(strstr(strTmp1,"ERROR")!=NULL)
			m_sMes3="设置失败!";
		else if(strstr(strTmp1,"OK")!=NULL)
			m_sMes3="设置成功!";
         
		strTmp1.SpanExcluding(strTmp1);
		m_sResponse += strTmp1;
		strTmp1.MakeLower();
		m_strStatu = m_sMes3;
		m_sResponse.Replace(" ","");
		ParseData();
		UpdateData(FALSE);	
	}
	else if(nIDEvent==2)
	{
		if(vcon==1&&vconcount==1){ vcon=0;
		  WriteFile(hCommDev,"AT#VTX\r",strlen("AT#VTX\r"),&dwBytesWritten,NULL);
		}		
	}	
	CDialog::OnTimer(nIDEvent);
}

BOOL CRTDlg::Save()
{
  UpdateData();
  CString temp = "";
  CString sql = "insert into addata values('";
  sql = sql+theRtData.m_sADCode+"','";
  sql += theRtData.m_sTime+"',";
  temp.Format("%f",theRtData.m_fTemperature);
  sql += temp+",";
  temp.Format("%f",theRtData.m_fRainFall);
  sql += temp+",";
  temp.Format("%f",theRtData.m_fWindSpeed);
  sql += temp+",";
  temp.Format("%f",theRtData.m_fHumidity);
  sql += temp+",";
  temp.Format("%f",theRtData.m_fIllumination);
  sql += temp+",";
  temp.Format("%f",theRtData.m_fStandby_1);
  sql += temp+",";
  temp.Format("%f",theRtData.m_fStandby_2);
  sql += temp+",";
  temp.Format("%f",theRtData.m_fStandby_3);
  sql += temp+",";
  temp.Format("%f",theRtData.m_fStandby_4);
  sql += temp+",";
  temp.Format("%f",theRtData.m_fStandby_5);
  sql += temp+")";
  theCTRDM.Insert(sql);
  UpdateData(FALSE);
	return TRUE;
}





void CRTDlg::UpdateLen(int tempInt,BOOL b)
{
    m_strYear = theRtData.m_sTime.Mid(0,2);
	m_strMonth = theRtData.m_sTime.Mid(2,2);
    m_strDay = theRtData.m_sTime.Mid(4,2);
	m_strHour = theRtData.m_sTime.Mid(6,2);
	m_strMin = theRtData.m_sTime.Mid(8,2);
	m_strSec = theRtData.m_sTime.Mid(10,2);
	m_ctrlLedDate.SetText(m_strYear+"-"+m_strMonth+"-"+m_strDay);
	m_ctrlLedTime.SetText(m_strHour+":"+m_strMin+":"+m_strSec);

	CString strytemp;
	//温度数据
	strytemp.Format("%7.2f",theRtData.m_fTemperature);
	m_ctrlLedT.SetText(strytemp);
	
	//降雨量数据
	strytemp.Format("%7.2f",theRtData.m_fRainFall);
	m_ctrlLedR.SetText(strytemp);
	
	//风速数据
	strytemp.Format("%7.2f",theRtData.m_fWindSpeed);
	m_ctrlLedW.SetText(strytemp);
	
	//湿度数据
	strytemp.Format("%7.0f",theRtData.m_fHumidity);
	m_ctrlLedH.SetText(strytemp);
	
	//光照数据
	strytemp.Format("%7.1f",theRtData.m_fIllumination);
	m_ctrlLedL.SetText(strytemp);	
	//为各个曲线添加新数据
	
	m_OScopeCtrl_T.AppendPoint(theRtData.m_fTemperature);

	m_OScopeCtrl_R.AppendPoint(theRtData.m_fRainFall);

	m_OScopeCtrl_W.AppendPoint(theRtData.m_fWindSpeed);
	
	m_OScopeCtrl_H.AppendPoint(theRtData.m_fHumidity);

	m_OScopeCtrl_L.AppendPoint(theRtData.m_fIllumination);
}


HBRUSH CRTDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
//	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
	
	// TODO: Change any attributes of the DC here
	if(nCtlColor== CTLCOLOR_LISTBOX)
	{
		pDC->SetBkMode(TRANSPARENT);
		pDC->SetTextColor(RGB(255,255,255));
//此处设置字体的颜色
		return (HBRUSH)m_brush.GetSafeHandle();
	}
	else
		return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

	// TODO: Return a different brush if the default is not desired
//	return hbr;
}


void CRTDlg::OnRemoteSet() 
{
	// TODO: Add your control notification handler code here
	m_sRemoteSet=m_dNowTime.Format("%y%w%m%d%H%M%S")+m_sRemoteSet;
    m_sRemoteSet ="zset"+Tools.IntToStr(strlen(m_sRemoteSet),6)+m_sRemoteSet;
	m_sRemoteSet +=Tools.XOR(m_sRemoteSet);
	CString strTemp;
	strTemp = HEAD;
    m_sRemoteSet = strTemp+m_sRemoteSet;
	strTemp =TAIL;
	m_sRemoteSet+=strTemp;
	WriteFile(hCommDev,m_sRemoteSet,strlen(m_sRemoteSet),&dwBytesWritten,NULL);
	theResult = remoteDM.select();
	GetDlgItem(IDC_REMOTE_SET)->EnableWindow(FALSE);
    if(theResult.Next()){
        m_sRemoteSet = theResult.GetString("period");
        m_sRemoteSet += theResult.GetString("time");
	}

}

void CRTDlg::OnRemoteBook() 
{
	// TODO: Add your control notification handler code here
	m_cDlgRemote.DoModal();
}

void CRTDlg::OnComSet() 
{
	// TODO: Add your control notification handler code here
	m_cDlgCom.DoModal();
}

void CRTDlg::OnComLook() 
{
	// TODO: Add your control notification handler code here
    dlgViewCom.SetValue(m_sPort,m_sBaudRate,m_sStopBits,m_sDataBits,m_sParity,m_sHand);
    dlgViewCom.DoModal();	
}
LONG CRTDlg::OnGetRemoteSet(WPARAM ch, LPARAM mark){
    
	if(mark == 0){
       m_sRemoteSet ="";
	}
	else if( mark == 1)
	{
        m_sRemoteSet+=(char)ch;
	}
	else if (mark == -1){
		//AfxMessageBox(m_sRemoteSet);
	}
	return 0;
}
LONG CRTDlg::OnGetComSet(WPARAM ch, LPARAM mark){
	m_sPort = (char)ch;
    m_sPort = "COM"+m_sPort;
	//AfxMessageBox(m_sPort+"jjjj");
	return 0;
}
LONG CRTDlg::OnGetDataSet(WPARAM ch, LPARAM mark){
	m_sDataBits = (char)ch;
	//AfxMessageBox(m_sDataBits+"jjjj");
	return 0;
}
LONG CRTDlg::OnGetStopSet(WPARAM ch, LPARAM mark){
	m_sStopBits = (char)ch;
	//AfxMessageBox(m_sStopBits+"jjjj");
	return 0;
}
LONG CRTDlg::OnGetParitySet(WPARAM ch, LPARAM mark){
   	m_sParity = (char)ch;
	return 0;
}
LONG CRTDlg::OnGetBaundSet(WPARAM ch, LPARAM mark){
	m_sBaudRate = (char)ch;
	if(m_sBaudRate == "1"){
		m_sBaudRate = "600";
	}
	else if(m_sBaudRate == "2"){
		m_sBaudRate = "2400";
	}
	else if(m_sBaudRate == "3"){
		m_sBaudRate = "1200";
	}
	else if(m_sBaudRate == "4"){
		m_sBaudRate = "2400";
	}
	else if(m_sBaudRate == "5"){
		m_sBaudRate = "4880";
	}
	else if(m_sBaudRate == "6"){
		m_sBaudRate = "5600";
	}
	else if(m_sBaudRate == "7"){
		m_sBaudRate = "9600";
	}
	else if(m_sBaudRate == "8"){
		m_sBaudRate = "2880";
	}
	else if(m_sBaudRate == "9"){
		m_sBaudRate = "38400";
	}
	else
       m_sBaudRate = "14400";
	return 0;
}
LONG CRTDlg::OnGetHandSet(WPARAM ch, LPARAM mark){
	m_sHand = (char)ch;
	if(m_sHand == "N")
	{
		m_sHand = "None";
	}
	else if(m_sHand == "T")
	{
		m_sHand = "RTS";
	}
	else if(m_sHand == "R")
	{
		m_sHand = "RTSXonXoff";
	}
	else if(m_sHand == "X")
	{
		m_sHand = "XonXoff";
	}
	//AfxMessageBox(m_sHand);
	return 0;
}

void CRTDlg::OnRemoteAuto() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	CString t ;
	m_bAuto?t="1":t="0";
	comSetDM.Modify("update RemoteSet set autoset ="+t);
	UpdateData(FALSE);
}

void CRTDlg::OnBUTTONSelect() 
{
	// TODO: Add your control notification handler code here
	CString select ;
	UpdateData(TRUE);
	select = "ziqy24"+m_cSelectD1.Format("%y%m%d");//+m_sEndTime;
    select +=m_cSelectT1.Format("%H%M%S");
	select +=m_cSelectD2.Format("%y%m%d");
	select +=m_cSelectT2.Format("%H%M%S");
	UpdateData(FALSE);
	CString temp;
	temp = HEAD;

    select+=Tools.XOR(select);
	select = temp+select;
    select += TAIL;
    WriteFile(hCommDev,select,strlen(select),&dwBytesWritten,NULL);
    GetDlgItem(IDC_BUTTON_Select)->EnableWindow(FALSE);
}

void CRTDlg::ParseData()
{
    int nStartPosition,nEndPosition,nMark;
	nStartPosition = m_sResponse.Find(HEAD);
    nEndPosition = m_sResponse.Find(TAIL);
	nMark = -1;
	if(nEndPosition<0 )
		return;
	while(nEndPosition>0)
	{
        nMark = m_sResponse.Find(HEAD,nStartPosition+1);
		if (nMark>nEndPosition||nMark<0)
		{
           CheckData(m_sResponse.Mid(nStartPosition,nEndPosition-nStartPosition+1));
           m_sResponse.Delete(0,nEndPosition+1);
		}
		else if(nMark<nEndPosition&&nMark>nStartPosition)
		{
			//如果收到数据不完整,则不进行处理
			// 仅收到[0x02],而没有收到对应的[0x0a]
			m_sResponse.Delete(0,nMark);
		}

		nStartPosition = m_sResponse.Find(HEAD);
        nEndPosition = m_sResponse.Find(TAIL);
		if( nEndPosition<0)
		return;
	}
}


void CRTDlg::CheckData(CString s)
{
    int nMark = -1;
	nMark = s.Find(INTERVAL);
	UpdateData();
	if(nMark >0){
		//如果收到数据明显不完整不处理返回;
		//一组完整的数据至少101字节
		if(strlen(s)<37){
		//通知采集器接受失败数据,要求重发
            ResponseColector(FALSE);
		    return;
		}
        ParesRtData(s);
	}
    else if(s.Find("ziqy") >0 )
	{
		UpdateData();
		m_strStatu = "采集器请求中心远程设置!";
		GetDlgItem(IDC_REMOTE_SET)->EnableWindow(TRUE);
		if(m_bAuto){
			OnRemoteSet();
		}
		UpdateData(FALSE);
		return;
	}
	else if(s.Find("ctru") >0 )
	{
		UpdateData();
		m_strStatu = "采集器接收中心远程设置成功!";
		UpdateData(FALSE);
		return;
	}
	else if(s.Find("cerr") >0 )
	{
		UpdateData();
		m_strStatu = "采集器接收中心远程设置失败!";
		UpdateData(FALSE);
        return;
	}
	else if(s.Find("ciq?") >0 )
	{
		UpdateData();
		m_strStatu = "采集器询问中心查询过去现场数据!";
		GetDlgItem(IDC_BUTTON_Select )->EnableWindow(TRUE);
		UpdateData(FALSE);
        return;
	}
	else if(s.Find("cnofile") >0 )
	{
		UpdateData();
		m_strStatu = "采集器没有查询到数据!";
		GetDlgItem(IDC_BUTTON_Select)->EnableWindow(FALSE);
		UpdateData(FALSE);
		return;
	}
}

void CRTDlg::ParesRtData(CString sData)
{
    int len,nMark;
	len= strlen(sData);
    CString sXOR00,sXOR0;
    sXOR00 = sData.Mid(len-3,2);
    sXOR0 = Tools.XOR(sData.Mid(1,len-4));
	if(sXOR0 != sXOR00){
		//通知采集器接受失败数据,要求重发
        UpdateData();
		if(sData.Find("fd")>0)
		   m_strStatu = "中心接收第一次数据失败!";
		else
           m_strStatu = "中心接收重发数据失败!";
		UpdateData(FALSE);
        ResponseColector(FALSE);
		return;
	}
    ResponseColector(TRUE);
	theRtData.m_sADCode = sData.Mid(1,20);
    sData.Delete(0,33);
	if(strlen(sData)<73)
		return;
	nMark = sData.Find(INTERVAL);
    while(nMark >0){
        theRtData.m_sTime = sData.Mid(0,12);
        theRtData.m_fTemperature = atof(sData.Mid(12,5))/100.;
		theRtData.m_fRainFall = atof(sData.Mid(17,4))/100.0;
		theRtData.m_fWindSpeed = atof(sData.Mid(21,4))/100.0;
		theRtData.m_fHumidity = atof(sData.Mid(25,2));
		theRtData.m_fIllumination = atof(sData.Mid(27,7));
		theRtData.m_fStandby_1 = atof(sData.Mid(34,7))/100.0;
		theRtData.m_fStandby_2 = atof(sData.Mid(41,7))/100.0;
		theRtData.m_fStandby_3 = atof(sData.Mid(48,7))/100.0;
		theRtData.m_fStandby_4 = atof(sData.Mid(55,7))/100.0;
		theRtData.m_fStandby_5 = atof(sData.Mid(62,7))/100.0;
		sData.Delete(0,70);

        UpdateLen(0,0); //显示数据
		Save();//保存数据
        if(strlen(sData)<73)
		  return;
        nMark = sData.Find(INTERVAL);
	}
    
  
}
	

void CRTDlg::ResponseColector(BOOL bMark)
{
    CString res;
	CString temp ;
	if(bMark){
       res = "ztru09";
	   temp = HEAD;
	   res = temp+res;
	   res +=TAIL;
	}
	else
	{
		res = "zerr1F";
		temp = HEAD;
	    res = temp+res;
	    res +=TAIL;
	}
	WriteFile(hCommDev,res,strlen(res),&dwBytesWritten,NULL);
}

⌨️ 快捷键说明

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