📄 rtdlg.cpp
字号:
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 + -