📄 scommtestdlg.cpp
字号:
CString fileName1;
CTime curTime = CTime::GetCurrentTime();
fileName1.Format(_T("%d-%d-%d--%d-%d"), curTime.GetYear(),
curTime.GetMonth(),
curTime.GetDay(),
curTime.GetHour(),
curTime.GetMinute());
fileName=fileName1+".txt";
CFile f;
if (f.Open(fileName, CFile::modeReadWrite|CFile::modeCreate))
{
// f.SeekToEnd();
// f.Flush();
f.Close();
// UpdateData(false);
}
}
void CSCommTestDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
switch(nIDEvent)
{
case 1:
{
CStdioFile f;
GetDlgItem(IDC_EDIT_RXDATA)->GetWindowText(strtemp3);
if (f.Open(fileName, CFile::modeReadWrite|CFile::modeNoTruncate))
{
f.SeekToEnd();
f.WriteString(strtemp3);
f.Flush();
f.Close();
m_strRXData.Empty();
strtemp3.Empty();
UpdateData(false);
}
CopyFile("data2.txt","data.txt",FALSE);
if (f.Open("data.txt", CFile::modeReadWrite|CFile::modeNoTruncate))
{
f.WriteString(strtemp3);
f.Flush();
f.Close();
}
}
break;
}
CDialog::OnTimer(nIDEvent);
}
void CSCommTestDlg::OnBdata()
{
// TODO: Add your control notification handler code here
CopyFile(fileName,"采集数据.txt",0);
WinExec("notepad.exe 采集数据.txt",SW_SHOW);
}
void CSCommTestDlg::OnMabout()
{
// TODO: Add your command handler code here
CAboutDlg dlg;
dlg.DoModal();
}
int CAboutDlg::DoModal()
{
// TODO: Add your specialized code here and/or call the base class
return CDialog::DoModal();
}
void CSCommTestDlg::adddata(CString str1, CString str2, CString str3, CString str4,CString str5)
{
db.Open("data.mdb"); // 打开已创建的demo数据库及DamoTable表
RecSet.Open(AFX_DAO_USE_DEFAULT_TYPE,"SELECT * FROM kaoyan",NULL);
LPTSTR aa =(LPTSTR)(LPCTSTR)str1;
LPTSTR bb =(LPTSTR)(LPCTSTR)str2;
LPTSTR cc =(LPTSTR)(LPCTSTR)str3;
LPTSTR dd =(LPTSTR)(LPCTSTR)str4;
LPTSTR ee =(LPTSTR)(LPCTSTR)str5;
RecSet.AddNew();
RecSet.SetFieldValue("设定湿度",aa);
RecSet.SetFieldValue("设定温度",bb);
RecSet.SetFieldValue("湿度",cc);
RecSet.SetFieldValue("温度",dd);
RecSet.SetFieldValue("时间",ee);
RecSet.Update();
RecSet.Close();
db.Close();
}
void CSCommTestDlg::OnButtonManualsend2()
{
// TODO: Add your control notification handler code here
// str_shidu="80%"; str_temp="36.4"; str_time="20075";
// adddata(str_set,str_shidu,str_temp,str_time);
m_ctrlComm.SetOutput(COleVariant("11"));//发送数据
}
/*void CSCommTestDlg::OnBlist()
{
// TODO: Add your control notification handler code here
Clist *dlg=new Clist;
dlg->Create(IDD_Dlist,this);
dlg->ShowWindow(SW_SHOW);
}
*/
void CSCommTestDlg::OnMdatabase()
{
// TODO: Add your command handler code here
Clist dlg;
dlg.DoModal();
}
BOOL CSCommTestDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
/* if(pMsg->message == WM_KEYDOWN && pMsg->wParam == 'S')
{
Clist dlg;
dlg.DoModal();
return TRUE;
}*/
return CDialog::PreTranslateMessage(pMsg);
}
void CSCommTestDlg::adddata(CString str1, CString str2, CString str3, CString str4)
{
db.Open("data.mdb"); // 打开已创建的demo数据库及DamoTable表
RecSet.Open(AFX_DAO_USE_DEFAULT_TYPE,"SELECT * FROM kaoyan",NULL);
LPTSTR aa =(LPTSTR)(LPCTSTR)str1;
LPTSTR bb =(LPTSTR)(LPCTSTR)str2;
LPTSTR cc =(LPTSTR)(LPCTSTR)str3;
LPTSTR dd =(LPTSTR)(LPCTSTR)str4;
RecSet.AddNew();
RecSet.SetFieldValue("设定温度",aa);
RecSet.SetFieldValue("测量温度",bb);
RecSet.SetFieldValue("偏差",cc);
RecSet.SetFieldValue("时间",dd);
RecSet.Update();
RecSet.Close();
db.Close();
}
void CSCommTestDlg::OnBopencom()
{
// TODO: Add your control notification handler code here
int item_port=m_Port.GetCurSel();
int item_bty=m_botelv.GetCurSel();
if(m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(FALSE);
m_ctrlComm.SetCommPort(item_port+1); //选择com1
if( !m_ctrlComm.GetPortOpen())
{
m_ctrlComm.SetPortOpen(TRUE);//打开串口
GetDlgItem(IDC_STATIC11)->SetWindowText("串口已打开");
}
else
AfxMessageBox("cannot open serial port");
switch(item_bty+1)
{
case 1: m_ctrlComm.SetSettings("9600,n,8,1");break;
case 2: m_ctrlComm.SetSettings("4800,n,8,1");break;
case 3: m_ctrlComm.SetSettings("1200,n,8,1");break;
}
// m_ctrlComm.SetSettings("9600,n,8,1"); //波特率9600,无校验,8个数据位,1个停止位
m_ctrlComm.SetInputMode(1); //1:表示以二进制方式检取数据
m_ctrlComm.SetRThreshold(1);
//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为0
m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据
GetDlgItem(IDC_Bclose)->EnableWindow(true);
GetDlgItem(IDC_Bopen)->EnableWindow(false);
GetDlgItem(IDC_BUTTON_MANUALSEND)->EnableWindow(true);
}
void CSCommTestDlg::OnBclosecom()
{
// TODO: Add your control notification handler code here
m_ctrlComm.SetPortOpen(0);
GetDlgItem(IDC_STATIC11)->SetWindowText("串口已关闭");
GetDlgItem(IDC_Bopen)->EnableWindow(true);
GetDlgItem(IDC_Bclose)->EnableWindow(false);
GetDlgItem(IDC_BUTTON_MANUALSEND)->EnableWindow(false);
}
void CSCommTestDlg::OnChangeEditRxdata()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
((CEdit*)GetDlgItem(IDC_EDIT_RXDATA))->SetSel(-1,-1);
// ((CEdit*)GetDlgItem(IDC_EDIT_RXDATA))->LineScroll( edit.GetLineCount() );
// TODO: Add your control notification handler code here
}
void CSCommTestDlg::On1()
{
// TODO: Add your control notification handler code here
UpdateData(true);
int len=m_Edit1.GetLength();
CString s1,s2,s3,temp1;
temp1=m_Edit1;
switch(len)
{
case 1:
m_Edit1="000"+m_Edit1;
s1=m_Edit1+"1";
m_ctrlComm.SetOutput(COleVariant(s1));
break;
case 2:
m_Edit1="00"+m_Edit1;
s2=m_Edit1+"1";
m_ctrlComm.SetOutput(COleVariant(s2));
break;
case 3:
m_Edit1="0"+m_Edit1;
s3=m_Edit1+"1";
m_ctrlComm.SetOutput(COleVariant(s3));
case 4:
s3=m_Edit1+"1";
m_ctrlComm.SetOutput(COleVariant(s3));
break;
default:
MessageBox("输入的字符长度必须为1—4位");
break;
}
m_Edit1=temp1;
UpdateData(false);
}
void CSCommTestDlg::On2()
{
// TODO: Add your control notification handler code here
UpdateData(true);
int len=m_Edit2.GetLength();
CString s1,s2,s3,temp2;
temp2=m_Edit2;
switch(len)
{
case 1:
m_Edit2="000"+m_Edit2;
s1=m_Edit2+"2";
m_ctrlComm.SetOutput(COleVariant(s1));
break;
case 2:
m_Edit2="00"+m_Edit2;
s2=m_Edit2+"2";
m_ctrlComm.SetOutput(COleVariant(s2));
break;
case 3:
m_Edit2="0"+m_Edit2;
s3=m_Edit2+"2";
m_ctrlComm.SetOutput(COleVariant(s3));
case 4:
s3=m_Edit2+"2";
m_ctrlComm.SetOutput(COleVariant(s3));
break;
default:
MessageBox("输入的字符长度必须为1—4位");
break;
}
m_Edit2=temp2;
UpdateData(false);
}
void CSCommTestDlg::On3()
{
// TODO: Add your control notification handler code here
UpdateData(true);
int len=m_Edit3.GetLength();
CString s1,s2,s3,temp3;
temp3=m_Edit3;
switch(len)
{
case 1:
m_Edit3="000"+m_Edit3;
s1=m_Edit3+"3";
m_ctrlComm.SetOutput(COleVariant(s1));
break;
case 2:
m_Edit3="00"+m_Edit3;
s2=m_Edit3+"3";
m_ctrlComm.SetOutput(COleVariant(s2));
break;
case 3:
m_Edit3="0"+m_Edit3;
s3=m_Edit3+"3";
m_ctrlComm.SetOutput(COleVariant(s3));
case 4:
s3=m_Edit3+"3";
m_ctrlComm.SetOutput(COleVariant(s3));
break;
default:
MessageBox("输入的字符长度必须为1—4位");
break;
}
m_Edit3=temp3;
UpdateData(false);
}
void CSCommTestDlg::On4()
{
// TODO: Add your control notification handler code here
UpdateData(true);
int len=m_Edit4.GetLength();
CString s1,s2,s3,temp4;
temp4=m_Edit4;
switch(len)
{
case 1:
m_Edit4="000"+m_Edit4;
s1=m_Edit4+"4";
m_ctrlComm.SetOutput(COleVariant(s1));
break;
case 2:
m_Edit4="00"+m_Edit4;
s2=m_Edit4+"4";
m_ctrlComm.SetOutput(COleVariant(s2));
break;
case 3:
m_Edit4="0"+m_Edit4;
s3=m_Edit4+"4";
m_ctrlComm.SetOutput(COleVariant(s3));
case 4:
s3=m_Edit4+"4";
m_ctrlComm.SetOutput(COleVariant(s3));
break;
default:
MessageBox("输入的字符长度必须为1—4位");
break;
}
m_Edit4=temp4;
UpdateData(false);
}
void CSCommTestDlg::OnBsave()
{
// TODO: Add your control notification handler code here
CStdioFile f;
GetDlgItem(IDC_EDIT_RXDATA)->GetWindowText(strtemp3);
if (f.Open(fileName, CFile::modeReadWrite|CFile::modeNoTruncate))
{
f.SeekToEnd();
f.WriteString(strtemp3);
f.Flush();
f.Close();
m_strRXData.Empty();
strtemp3.Empty();
UpdateData(false);
}
CopyFile("data2.txt","data.txt",FALSE);
if (f.Open("data.txt", CFile::modeReadWrite|CFile::modeNoTruncate))
{
f.WriteString(strtemp3);
f.Flush();
f.Close();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -