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 + -
显示快捷键?