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

📄 robindlg.cpp

📁 PC抄表软件, 用于降数据上载到PC机上, 通过USB传COM口实现.
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			for(iL=0;iL<nByteN;iL++) 
			{
				strT1.Format("%02X ",dataRead[iL]);
				if(iL%10==0)
				{
					strT2 += "\r\n";
				}
				strT2+=strT1;
			}
			//AfxMessageBox(strT2);
			//***********************************//
			CString str,str2;
//			short int szYear,szMonth,szDay,szHour,szMinute,szSecond;
//			UpdateData(TRUE);
			m_Data.AddNew();
			switch(((dataRead[21]&0x0F)<<4)|(dataRead[22]&0x0F))
			{
			case 0x00:
				str="Encoder";
				break;
			case 0x40:
				str="ScanCounter-1";
				break;
			case 0x41:
				str="ScanCounter-2";
				break;
			case 0x60:
				str="InVision-1";
				break;
			case 0x70:
				str="InVision-2";
				break;
			default:
				str.Format("%c%c",dataRead[21],dataRead[22]);
				break;
			}
			m_Data.m_strtype	=	str;
			switch(((dataRead[27]&0x0F)<<4)|(dataRead[28]&0x0F))
			{
			case 0x00:
				str="none";
				break;
			case 0x01:
				str="cubic metres";
				break;
			case 0x02:
				str="US gallons*1000";
				break;
			case 0x03:
				str="Imperial gallons";
				break;
			case 0x04:
				str="litres";
				break;
			case 0x05:
				str="cubic feet*100";
				break;
			case 0x06:
				str="US gallons";
				break;
			case 0x07:
				str="k multiplier";
				break;
			case 0x08:
				str="kilo-litres";
				break;
			default:
				str="";
				break;
			}
			m_Data.m_strunits	=	str;

			str.Format("%c%c",dataRead[23],dataRead[24]);
			m_Data.m_strsxylf	=	str;
	
			str.Format("%c%c%c%c%c%c%c%c%c%c",dataRead[1],dataRead[2],dataRead[3],dataRead[4],dataRead[5],dataRead[6],dataRead[7],dataRead[8],dataRead[9],dataRead[10]);
			m_Data.m_strnumber	=	str;
			str.Format("%c%c%c%c%c%c%c%c%c%c",dataRead[59],dataRead[60],dataRead[61],dataRead[62],dataRead[63],dataRead[64],dataRead[65],dataRead[66],dataRead[67],dataRead[68]);
			m_Data.m_strnumber2	=	str;
			if((((dataRead[21]&0x0F)<<4))==0x40)
			{
				switch(dataRead[19]&0x0F)
				{
				case 0x04:
					str.Format("%c%c%c%c",dataRead[15],dataRead[16],dataRead[17],dataRead[18]);
					break;
				case 0x05:
					str.Format("%c%c%c%c%c",dataRead[14],dataRead[15],dataRead[16],dataRead[17],dataRead[18]);
					break;
				case 0x06:
					str.Format("%c%c%c%c%c%c",dataRead[13],dataRead[14],dataRead[15],dataRead[16],dataRead[17],dataRead[18]);
					break;
				case 0x07:
					str.Format("%c%c%c%c%c%c%c",dataRead[12],dataRead[13],dataRead[14],dataRead[15],dataRead[16],dataRead[17],dataRead[18]);
					break;
				case 0x08:
					str.Format("%c%c%c%c%c%c%c%c",dataRead[11],dataRead[12],dataRead[13],dataRead[14],dataRead[15],dataRead[16],dataRead[17],dataRead[18]);
					break;
				default:
					str.Format("%c%c%c%c",dataRead[15],dataRead[16],dataRead[17],dataRead[18]);
					break;
				}
				/*
				if((dataRead[29]&0x01)!=0)
				{
					if((((dataRead[21]&0x0F)<<4)|(dataRead[22]&0x0F))==0x40)
					{
						switch(dataRead[20]&0x0F)
						{
						case 0x01:
							str.Insert(((dataRead[19]&0x0F)-0x01),'.');
							break;
						case 0x02:
							str.Insert(((dataRead[19]&0x0F)-0x02),'.');
							break;
						case 0x04:
							str.Insert(((dataRead[19]&0x0F)-0x03),'.');
							break;
						default:
							break;
						}
					}
					if((((dataRead[21]&0x0F)<<4)|(dataRead[22]&0x0F))==0x41)
					{
						if((dataRead[20]&0x0F)!=(dataRead[19]&0x0F))
							str.Insert((dataRead[20]&0x0F),'.');
					}
				}
				else
				{
					if((dataRead[29]&0x02)!=0)
					{
					*/
						if((((dataRead[21]&0x0F)<<4)|(dataRead[22]&0x0F))==0x40)
						{
							switch(dataRead[20]&0x0F)
							{
							case 0x01:
								str.Insert(((dataRead[19]&0x0F)-0x01),'.');
								break;
							case 0x02:
								str.Insert(((dataRead[19]&0x0F)-0x02),'.');
								break;
							case 0x04:
								str.Insert(((dataRead[19]&0x0F)-0x03),'.');
								break;
							default:
								break;
							}
						}
						if((((dataRead[21]&0x0F)<<4)|(dataRead[22]&0x0F))==0x41)
						{
							if((dataRead[20]&0x0F)!=(dataRead[19]&0x0F))
								str.Insert((dataRead[20]&0x0F),'.');
						}
				//	}
				//}
			}
			else
			{
				switch(dataRead[19]&0x0F)
				{
				case 0x04:
					str.Format("%c%c%c%c",dataRead[13],dataRead[14],dataRead[15],dataRead[16]);
					break;
				case 0x05:
					str.Format("%c%c%c%c%c",dataRead[13],dataRead[14],dataRead[15],dataRead[16],dataRead[17]);
					break;
				case 0x06:
					str.Format("%c%c%c%c%c%c",dataRead[13],dataRead[14],dataRead[15],dataRead[16],dataRead[17],dataRead[18]);
					break;
				default:
					str.Format("%c%c%c%c",dataRead[13],dataRead[14],dataRead[15],dataRead[16]);
					break;
				}
				if((dataRead[20]&0x0F)!=(dataRead[19]&0x0F))
					str.Insert((dataRead[20]&0x0F),'.');
			}

			if(dataRead[20]>dataRead[19])
			{
				str2=str;
				switch(dataRead[20]-dataRead[19])
				{
				case 0x01:
					str.Format("%s%c",str2,'0');
					break;
				case 0x02:
					str.Format("%s%c%c",str2,'0','0');
					break;
				case 0x03:
					str.Format("%s%c%c%c",str2,'0','0','0');
					break;
				case 0x04:
					str.Format("%s%c%c%c%c",str2,'0','0','0','0');
					break;
				default:
					break;
				}
			}

			m_Data.m_strsxyyz	=	str;

			str.Format("%c",' ');
			if(((dataRead[21]&0x0F)==0x04)&&((dataRead[30]&0x01)!=0)) 
				str.Format("%s_%c",str,'X');
			if(((dataRead[21]&0x0F)==0x04)&&((dataRead[30]&0x02)!=0)) 
				str.Format("%s_%c",str,'T');
			if(((dataRead[21]&0x0F)==0x04)&&((dataRead[30]&0x04)!=0)) 
				str.Format("%s_%c",str,'L');
			if(((dataRead[21]&0x0F)==0x04)&&((dataRead[30]&0x08)!=0)) 
				str.Format("%s_%c",str,'S');
			if(((((dataRead[21]&0x0F)<<4)|(dataRead[22]&0x0F))==0x41)&&((dataRead[29]&0x04)!=0))
				str.Format("%s_%c",str,'B');
			if((((dataRead[21]&0x0F)<<4)|(dataRead[22]&0x0F))==0x41)
			{
				if((dataRead[32]&0x01)!=0) str.Format("%s_%c",str,'M');
				else if((dataRead[32]&0x02)!=0) str.Format("%s_%c",str,'Y');
			}
			if(((((dataRead[21]&0x0F)<<4)|(dataRead[22]&0x0F))==0x41)&&((dataRead[32]&0x04)!=0))
				str.Format("%s_%c",str,'V');

			////////******** add by ljh ***********************
			///////********************************************
			m_Data.m_strsxfjf	=	str;

			str.Format("%c",' ');
			if((dataRead[25]&0x01)!=0) 
				str.Format("%s_%c",str,'S');
			if((dataRead[25]&0x02)!=0) 
				str.Format("%s_%c",str,'T');
			if((dataRead[25]&0x04)!=0) 
				str.Format("%s_%c",str,'L');
			if((dataRead[25]&0x08)!=0) 
				str.Format("%s_%c",str,'M');
			
			if((dataRead[26]&0x08)!=0) 
				str.Format("%s_%c",str,'P');		
			if((dataRead[26]&0x04)!=0) 
				str.Format("%s_%c",str,'F');
			if((dataRead[26]&0x02)!=0) 
				str.Format("%s_%c",str,'S');
			if((dataRead[26]&0x01)!=0) 
				str.Format("%s_%c",str,'O');
		   //////////*** add by ljh ********
			if ((((dataRead[21]&0x0F)<<4)|(dataRead[22]&0x0F))==0x41)
			{
				if (m_Data.m_strsxylf=="07")
				{
					str.Format("%c",' ');
					if((dataRead[25]&0x02)!=0) 
				        str.Format("%s_%c",str,'B');
					if((dataRead[25]&0x08)!=0) 
				        str.Format("%s_%c",str,'P');
					if((dataRead[26]&0x01)!=0) 
				        str.Format("%s_%c",str,'S');
					if((dataRead[26]&0x02)!=0) 
				        str.Format("%s_%c",str,'T');
					if((dataRead[26]&0x04)!=0) 
				        str.Format("%s_%c",str,'L');
                    //meter type *special
					m_Data.m_strtype	=	"Falcon_encoded";
				}
			}
			//******************************
			m_Data.m_strsxwxk	=	str;
			
			if(((((dataRead[21]&0x0F)<<4)|(dataRead[22]&0x0F))==0x41)/*&&((dataRead[32]&0x04)!=0)*/)
			{
				switch(dataRead[19]&0x0F)
				{
				case 0x04:
					str.Format("%c%c%c%c",dataRead[51],dataRead[52],dataRead[53],dataRead[54]);
					break;
				case 0x05:
					str.Format("%c%c%c%c%c",dataRead[50],dataRead[51],dataRead[52],dataRead[53],dataRead[54]);
					break;
				case 0x06:
					str.Format("%c%c%c%c%c%c",dataRead[49],dataRead[50],dataRead[51],dataRead[52],dataRead[53],dataRead[54]);
					break;
				case 0x07:
					str.Format("%c%c%c%c%c%c%c",dataRead[48],dataRead[49],dataRead[50],dataRead[51],dataRead[52],dataRead[53],dataRead[54]);
					break;
				case 0x08:
					str.Format("%c%c%c%c%c%c%c%c",dataRead[47],dataRead[48],dataRead[49],dataRead[50],dataRead[51],dataRead[52],dataRead[53],dataRead[54]);
					break;
				default:
					str.Format("%c%c%c%c%c%c",dataRead[47],dataRead[48],dataRead[49],dataRead[50],dataRead[51],dataRead[52],dataRead[53],dataRead[54]);
					break;
				}
				if((dataRead[20]&0x0F)!=(dataRead[19]&0x0F))
					str.Insert((dataRead[20]&0x0F),'.');
				//********************* add by ljh **************//
				unsigned char TempExtStatus;
				TempExtStatus=((dataRead[31] & 0x0F)<<4)+(dataRead[32] & 0x0F);
				if((TempExtStatus & 0x40)!=0)
				{
					str="REV:"+str;
				}
				else if((TempExtStatus & 0x04)!=0)
				{
					str="LRD:"+str;
				}
				//********************************************//
				m_Data.m_strlrdv	=	str;
				str.Format("%c%c%c",dataRead[55],dataRead[56],dataRead[57]);
				//********************* add by ljh **************//
				if((TempExtStatus & 0x40)!=0)
				{
					str="REV:"+str;
				}
				else if((TempExtStatus & 0x04)!=0)
				{
					str="LRD:"+str;
				}
				//********************************************//
				m_Data.m_strlrdd	=	str;
			}

			if(dataRead[58]==0x31) str="Program";
			else str="Read";
			m_Data.m_strcomm	=	str;

			Read_date = CTime::GetCurrentTime();
			m_Data.m_trkdate = Read_date.Format("%Y-%m-%d");
			/*
			szYear=(short int)(dataRead[33]&0x0F)*1000+(short int)(dataRead[34]&0x0F)*100+(short int)(dataRead[35]&0x0F)*10+(short int)(dataRead[36]&0x0F);
			szMonth=(short int)(dataRead[37]&0x0F)*10+(short int)(dataRead[38]&0x0F);
			szDay=(short int)(dataRead[39]&0x0F)*10+(short int)(dataRead[40]&0x0F);
			szHour=(short int)(dataRead[41]&0x0F)*10+(short int)(dataRead[42]&0x0F);
			szMinute=(short int)(dataRead[43]&0x0F)*10+(short int)(dataRead[44]&0x0F);
			szSecond=(short int)(dataRead[45]&0x0F)*10+(short int)(dataRead[46]&0x0F);
			m_Data.m_tccdate = CTime::CTime(szYear,szMonth,szDay,szHour,szMinute,szSecond);
			*/
			//str.Format("%c%c%c%c-%c%c-%c%c %c%c:%c%c:%c%c",dataRead[33],dataRead[34],dataRead[35],dataRead[36],dataRead[37],dataRead[38],dataRead[39],dataRead[40],dataRead[41],dataRead[42],dataRead[43],dataRead[44],dataRead[45],dataRead[46]);
			str.Format("%c%c%c%c-%c%c-%c%c",dataRead[33],dataRead[34],dataRead[35],dataRead[36],dataRead[37],dataRead[38],dataRead[39],dataRead[40]);
			m_Data.m_tccdate = str;
			str.Format("%c%c:%c%c:%c%c",dataRead[41],dataRead[42],dataRead[43],dataRead[44],dataRead[45],dataRead[46]);
			m_Data.m_tcctime = str;


			m_Data.Update();
			m_Data.Requery();			
			if((nUser%50)==0) DataBaseToCtrl();
//			DataBaseToCtrl();
//			UpdateData(FALSE);

		}

		if((success)&&(nUser>=0))
		{
			if(!PurgeComm(hDev1, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR)) // device 1 fails
			{
				//m_output = "Error: Failed to purge COM port for device 1.";
				MessageBox("Error: Failed to purge COM port for Device 1.");
			}
			else
			{
				if(!WriteFile(hDev1, (LPCVOID)dataAck, toBeWritten, written, &o))//send START flag
				{
					if(GetLastError() == ERROR_IO_PENDING)
					{
						if(WaitForSingleObject(o.hEvent, INFINITE) == WAIT_OBJECT_0)
							if(GetOverlappedResult(hDev1, &o, written, FALSE))
								success = true;
					}
					// surprise removal case
					else if (GetLastError() == ERROR_OPERATION_ABORTED)
					{
						MessageBox("Surprise Removal on Device Write!");
						CloseHandle(hDev1);
						hDev1 = INVALID_HANDLE_VALUE;
						CommFlag = false;
						m_buttonul.SetWindowText("&Start");
						m_comstatus.Replace("ON","OFF");
						UpdateData(FALSE);
					}
				}
				else
					success = true;

				if(*written != toBeWritten)
					success = false;
			
				if(success) // read the sum of users that will be uploaded
				{
					TimeOutRd=500;
					phase=2;
					SetTimer(1,10,NULL);
				}
			}
		}
		//
		if((!success)&&(nUser>=0))
		{
			if(!PurgeComm(hDev1, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR)) // device 1 fails
			{
				//m_output = "Error: Failed to purge COM port for device 1.";
				MessageBox("Error: Failed to purge COM port for Device 1.");
			}
			else
			{
				if(!WriteFile(hDev1, (LPCVOID)dataError, toBeWritten, written, &o))//send START flag
				{
					if(GetLastError() == ERROR_IO_PENDING)
					{
						if(WaitForSingleObject(o.hEvent, INFINITE) == WAIT_OBJECT_0)
							if(GetOverlappedResult(hDev1, &o, written, FALSE))
								success = true;
					}
					// surprise removal case
					else if (GetLastError() == ERROR_OPERATION_ABORTED)
					{
						MessageBox("Surprise Removal on Device Write!");
						CloseHandle(hDev1);
						hDev1 = INVALID_HANDLE_VALUE;
						CommFlag = false;
						m_buttonul.SetWindowText("&Start");
						m_comstatus.Replace("ON","OFF");
						UpdateData(FALSE);
					}
				}
				else
					success = true;

				if(*written != toBeWritten)
					success = false;
			
				if(success) // read the sum of users that will be uploaded
				{
					TimeOutRd=500;
					phase=2;
					SetTimer(1,10,NULL);
				}
			}
		}
	}
	else
	{
		if(phase==2) SetTimer(1,10,NULL);
	}
	
	TimeOutRd--;
	if(TimeOutRd==0)
	{
		KillTimer(1);
		CloseHandle(hDev1);
		hDev1 = INVALID_HANDLE_VALUE;
		CommFlag = false;
		m_buttonul.SetWindowText("&Start");
		m_comstatus.Replace("ON","OFF");
		UpdateData(FALSE);
		MessageBox("Data transfered failed (2).");		
	}

	if(nUser==0)
	{
		KillTimer(1);
		CloseHandle(hDev1);
		hDev1 = INVALID_HANDLE_VALUE;
		CommFlag = false;
		m_buttonul.SetWindowText("&Start");
		m_comstatus.Replace("ON","OFF");
		UpdateData(FALSE);
		MessageBox("Data transfered successfully.");		
	}

	ETSLayoutDialog::OnTimer(nIDEvent);
}

void CMyDlg::OnButtonUl() 
{
	// TODO: Add your control notification handler code here
	if(!CommFlag)
	{
		MessageBox("start Data transfer.");
		CommFlag = true;
		m_buttonul.SetWindowText("Stop");
		FillDeviceList();
	}
	else
	{
		KillTimer(1);
		CloseHandle(hDev1);
		hDev1 = INVALID_HANDLE_VALUE;
		CommFlag = false;
		m_buttonul.SetWindowText("&Start");
		m_comstatus.Replace("ON","OFF");
		UpdateData(FALSE);
		MessageBox("Data transfer is stopped.");
	}
	

}
/***********************************************************
* Save the data uploaded as .csv file.
************************************************************/
void CMyDlg::OnSave() 
{
	// TODO: Add your control notification handler code here
	if(0==m_theList.GetItemCount())
	{
		MessageBox("Database is empty !");
		return;
	}

	CFileDialog dlgFile(
		FALSE, _T("*.csv"), NULL,
		OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
		NULL, this);
	dlgFile.m_ofn.lStructSize = sizeof(OPENFILENAME);
	dlgFile.m_ofn.lpstrFilter = "CSV file(*.csv)\0*.csv\0\0";
	dlgFile.m_ofn.lpstrTitle = "Select the file to save";
	if (dlgFile.DoModal() == IDCANCEL)
		return ;

	CString sPath = dlgFile.GetPathName();
	CString sExt = dlgFile.GetFileExt();
	sExt.MakeLower();

	SaveAsCSVFile((LPCTSTR)sPath);

	//CString str1, str2;
	//str1.LoadString(IDS_SAVEOVER);
	//str2.Format("%s:%s", str1, sPath);
	//GetDlgItem(IDC_PATH_COUNTING)->SetWindowText(str2);
}

⌨️ 快捷键说明

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