scommtestdlg.cpp

来自「用VB语言实现对COM串口的应用」· C++ 代码 · 共 816 行 · 第 1/2 页

CPP
816
字号

}
//功能:若是在0-F之间的字符,则转换为相应的十六进制字符,否则返回-1
char CSCommTestDlg::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 CSCommTestDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	OnButtonManualsend();
	
	if(SAVE_FLAG)
	{
		CTime t = CTime::GetCurrentTime();
		CString str=t.Format("%Y年%m月%d日%H时%M分%S秒\r\n");
		m_rFile.Write((LPCTSTR)str,str.GetLength());
		m_rFile.Write((LPCTSTR)m_strRXData,m_strRXData.GetLength());
		CString m_strRXData1 = "\n";
	
		m_rFile.Write((LPCTSTR)m_strRXData1,m_strRXData1.GetLength());
		
	}
	if(SAVE_FLAG1)
	{
		CTime t = CTime::GetCurrentTime();
		CString str=t.Format("%Y年%m月%d日%H时%M分%S秒\r\n");
		m_rFile1.Write((LPCTSTR)str,str.GetLength());
		m_rFile1.Write((LPCTSTR)m_strCVData,m_strCVData.GetLength());
		CString m_strRXData1 = "\n";
	
		m_rFile1.Write((LPCTSTR)m_strRXData1,m_strRXData1.GetLength());
	
	}
	
	if(SAVE_FLAG2)
	{
		CTime t = CTime::GetCurrentTime();
		CString str=t.Format("%Y年%m月%d日%H时%M分%S秒\r\n");
		m_rFile2.Write((LPCTSTR)str,str.GetLength());
		m_rFile2.Write((LPCTSTR)m_strPVData,m_strPVData.GetLength());
		CString m_strRXData1 = "\n";
	
		m_rFile2.Write((LPCTSTR)m_strRXData1,m_strRXData1.GetLength());
	
	}
	
	if(SAVE_FLAG3)
	{
		CTime t = CTime::GetCurrentTime();
		CString str=t.Format("%Y年%m月%d日%H时%M分%S秒\r\n");
		m_rFile3.Write((LPCTSTR)str,str.GetLength());
		m_rFile3.Write((LPCTSTR)m_strBVData,m_strBVData.GetLength());
		CString m_strRXData3 = "\n";
	
		m_rFile3.Write((LPCTSTR)m_strRXData3,m_strRXData3.GetLength());
	
	}
	
	CDialog::OnTimer(nIDEvent);
}

void CSCommTestDlg::OnCheckAutosend() 
{
// TODO: Add your control notification handler code here
	m_bAutoSend=!m_bAutoSend;
	if(m_bAutoSend)
	{
		SetTimer(1,2000,NULL);//时间为1000毫秒
	}
	else
	{
		KillTimer(1); //取消定时
	}
}

void CSCommTestDlg::OnButtonPath() 
{
	// TODO: Add your control notification handler code here
	static char displayname[MAX_PATH];
	static char path[MAX_PATH];
    LPITEMIDLIST pidlBrowse;    // PIDL selected by user 
	BROWSEINFO bi;
	bi.hwndOwner = this->m_hWnd;
	bi.pidlRoot = NULL;
	bi.pszDisplayName = displayname;
	bi.lpszTitle = "请选择要保存接收数据的文件夹";
	bi.ulFlags = BIF_EDITBOX ;
	bi.lpfn = NULL;
	pidlBrowse=SHBrowseForFolder( &bi);
	if(pidlBrowse!=NULL)
	{
		SHGetPathFromIDList(pidlBrowse,path);
	}
	CString str=path;  //得到路径
	if(str.IsEmpty()) return;  //如果没有选择,就返回
	m_strCurPath=str;	//接收路径编辑框对应变量
	UpdateData(FALSE);	
	
}

void CSCommTestDlg::OnButtonSaveCl() 
{
// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	SAVE_FLAG =!SAVE_FLAG;
	if(SAVE_FLAG)
	{
	int		nLength;
	nLength = m_strCurPath.GetLength();

	for( int nCount = 0; nCount < nLength; nCount++ )
	{
		if( m_strCurPath.GetAt( nCount ) == '\\' )
			CreateDirectory( m_strCurPath.Left( nCount + 1 ), NULL );
	}
	CreateDirectory( m_strCurPath, NULL );

	
	LPCSTR	lpszPath =m_strCurPath;// "c:\\comdata";
	SetCurrentDirectory( lpszPath );
    
	//文件名为Rec**.txt,以下代码自动检测文件名是否存在,若存在,则后面序号自动递增
	//如Rec00.txt Rec01.txt,程序自动为正要保存的文件命名为Rec02.txt.
	char buf[20];   
	for(int j=0;j<100;j++)
	{
		sprintf(buf,"充电电流%02d.xls",j);
		if( (access( buf, 0 )) == -1 )
			break;
	}
    
	if(!m_rFile.Open(buf,CFile::modeCreate | CFile::modeWrite )) 
	{
		AfxMessageBox( "创建记录文件失败!");
		return;
	}
	if((access(buf,0))==-1)
	{
		AfxMessageBox("failed");
		return;
	}
	CTime t = CTime::GetCurrentTime();
	CString str=t.Format("%Y年%m月%d日%H时%M分%S秒\r\n");
	m_rFile.Write((LPCTSTR)str,str.GetLength());
	m_rFile.Write((LPCTSTR)m_strRXData,m_strRXData.GetLength());
	CString m_strRXData1 = "\n";
	
	m_rFile.Write((LPCTSTR)m_strRXData1,m_strRXData1.GetLength());
	


    str="OK,";
	for(int i=0;i<5;i++)
	    str+=buf[i];
	str+=".txt saved";
	m_ctrlSavePath.SetWindowText(str);
	}
	if(!SAVE_FLAG)
	{
		m_rFile.Flush();
		m_rFile.Close();
	}
	//SetTimer(2,5000,NULL);   //在定时器中显示保存文件状态	
}

void CSCommTestDlg::OnButtonSaveCv() 
{
// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	SAVE_FLAG1 = !SAVE_FLAG1;
	if(SAVE_FLAG1)
	{
	int		nLength;
	nLength = m_strCurPath.GetLength();

	for( int nCount = 0; nCount < nLength; nCount++ )
	{
		if( m_strCurPath.GetAt( nCount ) == '\\' )
			CreateDirectory( m_strCurPath.Left( nCount + 1 ), NULL );
	}
	CreateDirectory( m_strCurPath, NULL );


	LPCSTR	lpszPath =m_strCurPath;// "c:\\comdata";
	SetCurrentDirectory( lpszPath );
    
	//文件名为Rec**.txt,以下代码自动检测文件名是否存在,若存在,则后面序号自动递增
	//如Rec00.txt Rec01.txt,程序自动为正要保存的文件命名为Rec02.txt.
	char buf[20];   
	for(int j=0;j<100;j++)
	{
		sprintf(buf,"放电电流%02d.xls",j);
		if( (access( buf, 0 )) == -1 )
			break;
	}
    
	if(!m_rFile1.Open(buf,CFile::modeCreate | CFile::modeWrite )) 
	{
		AfxMessageBox( "创建记录文件失败!");
		return;
	}
	if((access(buf,0))==-1)
	{
		AfxMessageBox("failed");
		return;
	}
	CTime t = CTime::GetCurrentTime();
	CString str=t.Format("%Y年%m月%d日%H时%M分%S秒\r\n");
	m_rFile1.Write((LPCTSTR)str,str.GetLength());
	m_rFile1.Write((LPCTSTR)m_strCVData,m_strCVData.GetLength());
	CString m_strRXData1 = "\n";
	
	m_rFile1.Write((LPCTSTR)m_strRXData1,m_strRXData1.GetLength());
	

    str="OK,";
	for(int i=0;i<5;i++)
	    str+=buf[i];
	str+=".txt saved";
	m_ctrlSavePath.SetWindowText(str);
	}
	if(!SAVE_FLAG1)
	{
		m_rFile1.Flush();
		m_rFile1.Close();
	}
	//SetTimer(2,5000,NULL);   //在定时器中显示保存文件状态		
}

void CSCommTestDlg::OnButtonSavePv() 
{
// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	SAVE_FLAG2 = !SAVE_FLAG2;
	if(SAVE_FLAG2)
	{
	int		nLength;
	nLength = m_strCurPath.GetLength();

	for( int nCount = 0; nCount < nLength; nCount++ )
	{
		if( m_strCurPath.GetAt( nCount ) == '\\' )
			CreateDirectory( m_strCurPath.Left( nCount + 1 ), NULL );
	}
	CreateDirectory( m_strCurPath, NULL );


	LPCSTR	lpszPath =m_strCurPath;// "c:\\comdata";
	SetCurrentDirectory( lpszPath );
    
	//文件名为Rec**.txt,以下代码自动检测文件名是否存在,若存在,则后面序号自动递增
	//如Rec00.txt Rec01.txt,程序自动为正要保存的文件命名为Rec02.txt.
	char buf[20];   
	for(int j=0;j<100;j++)
	{
		sprintf(buf,"电池板电压%02d.xls",j);
		if( (access( buf, 0 )) == -1 )
			break;
	}
    
	if(!m_rFile2.Open(buf,CFile::modeCreate | CFile::modeWrite )) 
	{
		AfxMessageBox( "创建记录文件失败!");
		return;
	}
	if((access(buf,0))==-1)
	{
		AfxMessageBox("failed");
		return;
	}
	CTime t = CTime::GetCurrentTime();
	CString str=t.Format("%Y年%m月%d日%H时%M分%S秒\r\n");
	m_rFile2.Write((LPCTSTR)str,str.GetLength());
	m_rFile2.Write((LPCTSTR)m_strPVData,m_strPVData.GetLength());
	CString m_strRXData2 = "\n";
	
	m_rFile2.Write((LPCTSTR)m_strRXData2,m_strRXData2.GetLength());
	

    str="OK,";
	for(int i=0;i<5;i++)
	    str+=buf[i];
	str+=".txt saved";
	m_ctrlSavePath.SetWindowText(str);
	}
	if(!SAVE_FLAG2)
	{
		m_rFile2.Flush();
		m_rFile2.Close();
	}	
}

void CSCommTestDlg::OnButtonSaveBv() 
{
// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	SAVE_FLAG3 = !SAVE_FLAG3;
	if(SAVE_FLAG3)
	{
	int		nLength;
	nLength = m_strCurPath.GetLength();

	for( int nCount = 0; nCount < nLength; nCount++ )
	{
		if( m_strCurPath.GetAt( nCount ) == '\\' )
			CreateDirectory( m_strCurPath.Left( nCount + 1 ), NULL );
	}
	CreateDirectory( m_strCurPath, NULL );


	LPCSTR	lpszPath =m_strCurPath;// "c:\\comdata";
	SetCurrentDirectory( lpszPath );
    
	//文件名为Rec**.txt,以下代码自动检测文件名是否存在,若存在,则后面序号自动递增
	//如Rec00.txt Rec01.txt,程序自动为正要保存的文件命名为Rec02.txt.
	char buf[20];   
	for(int j=0;j<100;j++)
	{
		sprintf(buf,"电池电压%02d.xls",j);
		if( (access( buf, 0 )) == -1 )
			break;
	}
    
	if(!m_rFile3.Open(buf,CFile::modeCreate | CFile::modeWrite )) 
	{
		AfxMessageBox( "创建记录文件失败!");
		return;
	}
	if((access(buf,0))==-1)
	{
		AfxMessageBox("failed");
		return;
	}
	CTime t = CTime::GetCurrentTime();
	CString str=t.Format("%Y年%m月%d日%H时%M分%S秒\r\n");
	m_rFile3.Write((LPCTSTR)str,str.GetLength());
	m_rFile3.Write((LPCTSTR)m_strBVData,m_strBVData.GetLength());
	CString m_strRXData3 = "\n";
	
	m_rFile3.Write((LPCTSTR)m_strRXData3,m_strRXData3.GetLength());
	

    str="OK,";
	for(int i=0;i<5;i++)
	    str+=buf[i];
	str+=".txt saved";
	m_ctrlSavePath.SetWindowText(str);
	}
	if(!SAVE_FLAG3)
	{
		m_rFile3.Flush();
		m_rFile3.Close();
	}	
	
}




void CSCommTestDlg::SetLineoff(CString lampNum) //记录灯的离线状态
{
	CDatabase db;
	db.Open(NULL,FALSE,FALSE,"ODBC;DSN=besimpleODBC;UID=root;PWD=1");
	CString sql;
	sql.Format("update lampstatus set ischange=0, curStatus=2 where lampNum='%s'", lampNum);
	db.ExecuteSQL(sql);
	db.Close();		
}
 void CSCommTestDlg::SetLampoff(CString lampNum) //记录灯的关闭状态
 {
 	CDatabase db;
	db.Open(NULL,FALSE,FALSE,"ODBC;DSN=besimpleODBC;UID=root;PWD=1");
 	CString sql;
 	sql.Format("update lampstatus set ischange=0, curStatus=0 where lampNum='%s'", lampNum);
 	db.ExecuteSQL(sql);
 	db.Close();		
 }
 void CSCommTestDlg::SetLampon(CString lampNum) //记录灯的打开状态
 {
 	CDatabase db;
 	db.Open(NULL,FALSE,FALSE,"ODBC;DSN=besimpleODBC;UID=root;PWD=1");
 	CString sql;
 	sql.Format("update lampstatus set ischange=0, curStatus=1 where lampNum='%s'", lampNum);
 	db.ExecuteSQL(sql);
 	db.Close();		
}


void CSCommTestDlg::Updata(CString lampNum)
{
	CDatabase db;
 	db.Open(NULL,FALSE,FALSE,"ODBC;DSN=besimpleODBC;UID=root;PWD=1");
 	CString sql;
 	//sql.Format("update lampstatus set ischange=0, curStatus='%s',chonga='%s',fanga = '%s',dianchibanv = '%s',dianchiv= '%s' where lampNum='%s' ",curStatus, m_strRXData,m_strCVData,m_strBVData,m_strPVData,lampNum);
	  sql.Format("update lampstatus set ischange=0, curStatus=%d ,chonga=%f,fanga = %f,dianchibanv = %f,dianchiv= %f where lampNum='%s'",atoi(curStatus),atof(m_strRXData),atof(m_strCVData),atof(m_strPVData),atof(m_strBVData),lampNum);
 	db.ExecuteSQL(sql);
 	db.Close();	
}

⌨️ 快捷键说明

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