operationtooldlg1.cpp

来自「采用文档类方法实现的一种串口通讯协议。可以借鉴参考」· C++ 代码 · 共 2,277 行 · 第 1/4 页

CPP
2,277
字号
		nCount += I_pbyDataS[2] << 8;
		nCount += I_pbyDataS[3];
		strLast.Format("%d\n\r", nCount);
		strInf += strLast;

		m_lDatalogLength = nCount;
		//not complete
		break;
	case 0x84:		
		mf_DispMsg("", 1);
		mf_ClearFile("DataLog.Txt");		//clear abyDataLog data

		byFinishFlag = I_pbyDataS[0];

		unPacketIndex  = I_pbyDataS[1] << 8;
		unPacketIndex += I_pbyDataS[2];

		nHeader  = I_pbyDataS[3] << 8;
		nHeader += I_pbyDataS[4];
		
		DWORD dwProgressLen;
		dwProgressLen = static_cast<DWORD>((m_lDatalogLength - (unPacketIndex * 128)) / 128 + 1);
		m_theApp->mf_ShowWaitDialog(dwProgressLen, 0, "TyprIII Utility", "Getting abyDataLog data...");
		m_theApp->mf_SetPosWaitProgressBar(nRollCount);

		for (xyz= 3; xyz < I_nPacLen; xyz++)		//add data to abyDataLog
		{
			abyDataLog.Add(I_pbyDataS[xyz]);
		}

		if (byFinishFlag == 1)		//finish flag is true
		{
			strInf += "This is the last packet!\n\r";			
			mf_DispMsg(strInf);
			return ;
		}
		
		BOOL bNext;

		while(byFinishFlag != 1)
		{
			if (nHeader == (short)0xFDFD) 
			{
				bNext = FALSE;

				while(!bNext)		//get next packet data
				{
					if (nRollCount < dwProgressLen)
					{
						nRollCount ++;
					}
					else
					{
						nRollCount  = dwProgressLen;
					}

					mf_RepeatReadData(nParaCount, abyDataS);
					m_theApp->mf_SetPosWaitProgressBar(nRollCount);

					byFinishFlag = abyDataS[0];	
					
					nHeader  = abyDataS[3] << 8;
					nHeader += abyDataS[4];					

					if (byFinishFlag == 1)
					{
						bNext = TRUE;
						if (abyDataLog.GetSize() > 0)
						{
							mf_Deal2184(abyDataLog);
						}						
					}

					if (nHeader == (short)0xFDFD)
					{
						bNext = TRUE;
						if (abyDataLog.GetSize() > 0)
						{
							mf_Deal2184(abyDataLog);
						}
						abyDataLog.RemoveAll();
						for (xyz = 3; xyz < nParaCount; xyz++)
						{
							abyDataLog.Add(abyDataS[xyz]);					
						}
					}
					else
					{
						for (xyz = 3; xyz < nParaCount; xyz++)
						{
							abyDataLog.Add(abyDataS[xyz]);					
						}
					}	//end for nHeader 2
				}	//end while
				
			}
			else
			{
				nHeader = (short)0xFDFD;
				abyDataLog.RemoveAll();
			}	//end nHeader 1
		}	//end finish 1
		
		strInf = "Please look for file abyDataLog.txt in same path\n\r";
		((CButton *)GetDlgItem(ID_OpenFile))->ShowWindow(SW_SHOW);
		m_theApp->mf_HideWaitDialog();

		break;
	case 0x85:
 		strInf  += "The Unit Mode is:\t";
		switch(I_pbyDataS[0])
		{
		case 0:
			strInf += "";
			break;
		case 1:
			strInf += "idle";
			break;
		case 2:
			strInf += "init";
			break;
		case 3:
			strInf += "diagnostic";
			break;
		case 4:
			strInf += "sleep";
			break;
		case 5:
			strInf += "Calibration";
			break;
		case 6:
			strInf += "survey";
			break;
		case 7:
			strInf += "transparent";
			break;
		case 8:
			strInf += "Pc communication";
			break;
		case 9:
			strInf += "charging";
			break;
		default:
			break;
		}
	default:
		break;
	}

	mf_DispMsg(strInf);

	mf_ChangeFormat();

}

void COperationToolDlg::mf_Deal2184(CByteArray& I_abyByte)
{
	int		xyz= 0;
	CString strInf;
	CString strLast;
	UINT	unSensors = 0;
	UINT	unInterval = 0;
	int		nDataPoint = 0;
	UINT	unMask = 0;
	UINT	unDataLen = 0;
	UINT	unDataLogStart = 0;
	float	fValue = 0.0;
	UINT	unMaskCount = 0;
	UINT	nHeader = 0;
	BYTE	byStatus = 0;

	strInf = "             The DataLog Events\n\r";
	
	strInf += "Serial Number: ";

	for(xyz = 0; xyz < 5; xyz++)
	{
		strLast.Format("%02X", I_abyByte[xyz+3]);
		strInf += strLast ;
		if (xyz == 1)	
		{
			strInf += "-";	
		}
	}
	
	strInf += "\n\r";
	
	strInf += "Firmware Version:\t";
	for(xyz=0;xyz<4;xyz++)
	{
		strLast.Format("%c",I_abyByte[xyz+8]);
		strInf += strLast ;
	}	

	strInf += "\n\rInstrument ID:\t";
	strLast.Format("%02X\n\r", I_abyByte[12]);
	strInf += strLast ;			
	
	unSensors = I_abyByte[14];
	strInf += "Total unSensors:\t";
	strLast.Format("%d\n\r", I_abyByte[14]);
	strInf += strLast ;			

	strInf += "Event Time:\t";
	strLast.Format("20%02d-%02d-%02d  %02d:%02d",I_abyByte[24],I_abyByte[25],I_abyByte[26],I_abyByte[27],I_abyByte[28]);
	strInf += strLast + "<-->";
	strLast.Format("20%02d-%02d-%02d  %02d:%02d\n\r",I_abyByte[30],I_abyByte[31],I_abyByte[32],I_abyByte[33],I_abyByte[34]);
	strInf += strLast;	
	
	nHeader = (I_abyByte[21] << 8) + I_abyByte[22];
	unInterval = (I_abyByte[36] <<8) + I_abyByte[37];
	nDataPoint = (I_abyByte[59]<<24) + (I_abyByte[60]<<16) + (I_abyByte[61]<<8) + I_abyByte[62];

	if (nDataPoint <= 0)
	{
		strInf += "abyDataLog numbers is 0.\n\r";
//		mf_DispMsg(strInf);
		return;
	}

	for (xyz = 0; xyz < m_nSensornumber; xyz++)
	{
		strInf += m_SensorInf[xyz].Name + "(" + m_SensorInf[xyz].unit + ") :\n\r";		
		
		byStatus =  I_abyByte[80 + unDataLogStart];;
		unMask=I_abyByte[83 + unDataLogStart];
		unDataLen = I_abyByte[84 + unDataLogStart];		
		
		strInf += "Calibration date: ";
		strLast.Format("20%02d-%02d-%02d  %02d:%02d\n\r", I_abyByte[86 + unDataLogStart],
													 I_abyByte[87 + unDataLogStart],
													 I_abyByte[88 + unDataLogStart],
													 I_abyByte[89 + unDataLogStart],
													 I_abyByte[90 + unDataLogStart]);
		strInf += strLast;

		unMaskCount = 0;
		if ((unMask & 0x1) == 0x01)
		{
			fValue = static_cast<float>(((I_abyByte[91 + unDataLogStart] << 8) + I_abyByte[92 + unDataLogStart])/10.0);
			strLast.Format("%.1f", fValue);
			strInf += "Span Value: " + strLast;
			strInf += "\n\r";
			unMaskCount ++;
		}

		if ((unMask & 0x2) == 0x02)
		{
			if (unMaskCount ==0)
				fValue = static_cast<float>(((I_abyByte[91 + unDataLogStart] << 8) + I_abyByte[92 + unDataLogStart])/10.0);
			else
				fValue = static_cast<float>(((I_abyByte[93 + unDataLogStart] << 8) + I_abyByte[94 + unDataLogStart])/10.0);

			strLast.Format("%.1f", fValue);
			strInf += "Low Level: " + strLast;
			strInf += "\n\r";
			unMaskCount ++;
		}

		
		if ((unMask & 0x4) == 0x04)
		{
			switch(unMaskCount)
			{
			case 0:
				fValue = static_cast<float>(((I_abyByte[91 + unDataLogStart] << 8) + I_abyByte[92 + unDataLogStart])/10.0);
				break;
			case 1:
				fValue = static_cast<float>(((I_abyByte[93 + unDataLogStart] << 8) + I_abyByte[94 + unDataLogStart])/10.0);
				break;
			case 2:
				fValue = static_cast<float>(((I_abyByte[95 + unDataLogStart] << 8) + I_abyByte[96 + unDataLogStart])/10.0);
				break;
			default:
				break;
			}
			strLast.Format("%.1f",fValue);
			strInf += "High Level: " + strLast;
			strInf += "\n\r";

			unMaskCount ++;
		}
		if ((unMask & 0x8) == 0x08)
		{
			switch(unMaskCount)
			{
			case 0:
				fValue = static_cast<float>(((I_abyByte[91 + unDataLogStart] << 8) + I_abyByte[92 + unDataLogStart])/10.0);
				break;
			case 1:
				fValue = static_cast<float>(((I_abyByte[93 + unDataLogStart] << 8) + I_abyByte[94 + unDataLogStart])/10.0);
				break;
			case 2:
				fValue = static_cast<float>(((I_abyByte[95 + unDataLogStart] << 8) + I_abyByte[96 + unDataLogStart])/10.0);
				break;
			case 3:
				fValue = static_cast<float>(((I_abyByte[97 + unDataLogStart] << 8) + I_abyByte[98 + unDataLogStart])/10.0);
				break;
			default:
				break;
			}
			strLast.Format("%.1f", fValue);
			strInf += "drift Level: " + strLast;
			strInf += "\n\r";
			
			unMaskCount ++;
		}
		if ((unMask & 0x10) == 0x10)
		{
			switch(unMaskCount)
			{
			case 0:
				fValue = static_cast<float>(((I_abyByte[91+unDataLogStart] << 8) + I_abyByte[92+unDataLogStart])/10.0);
				break;
			case 1:
				fValue = static_cast<float>(((I_abyByte[93+unDataLogStart] << 8) + I_abyByte[94+unDataLogStart])/10.0);
				break;
			case 2:
				fValue = static_cast<float>(((I_abyByte[95+unDataLogStart] << 8) + I_abyByte[96+unDataLogStart])/10.0);
				break;
			case 3:
				fValue = static_cast<float>(((I_abyByte[97+unDataLogStart] << 8) + I_abyByte[98+unDataLogStart])/10.0);
				break;
			case 4:
				fValue = static_cast<float>(((I_abyByte[99+unDataLogStart] << 8) + I_abyByte[100+unDataLogStart])/10.0);
				break;
			default:
				break;
			}
			strLast.Format("%.1f",fValue);
			strInf += "Over Level: " + strLast;
			strInf += "\n\r";
			unMaskCount ++;
		}
		if ((unMask & 0x20) == 0x20)
		{
			switch(unMaskCount)
			{
			case 0:
				fValue = static_cast<float>(((I_abyByte[91+unDataLogStart] << 8) + I_abyByte[92+unDataLogStart])/10.0);
				break;
			case 1:
				fValue = static_cast<float>(((I_abyByte[93+unDataLogStart] << 8) + I_abyByte[94+unDataLogStart])/10.0);
				break;
			case 2:
				fValue = static_cast<float>(((I_abyByte[95+unDataLogStart] << 8) + I_abyByte[96+unDataLogStart])/10.0);
				break;
			case 3:
				fValue = static_cast<float>(((I_abyByte[97+unDataLogStart] << 8) + I_abyByte[98+unDataLogStart])/10.0);
				break;
			case 4:
				fValue = static_cast<float>(((I_abyByte[99+unDataLogStart] << 8) + I_abyByte[100+unDataLogStart])/10.0);
				break;
			case 5:
				fValue = static_cast<float>(((I_abyByte[101+unDataLogStart] << 8) + I_abyByte[102+unDataLogStart])/10.0);
				break;
			default:
				break;
			}
			strLast.Format("%.1f", fValue);
			strInf += "STEL Level: " + strLast;
			strInf += "\n\r";
			
			unMaskCount ++;
		}
		if ((unMask & 0x40) == 0x40)
		{
			switch(unMaskCount)
			{
			case 0:
				fValue = static_cast<float>(((I_abyByte[91+unDataLogStart] << 8) + I_abyByte[92+unDataLogStart])/10.0);
				break;
			case 1:
				fValue = static_cast<float>(((I_abyByte[93+unDataLogStart] << 8) + I_abyByte[94+unDataLogStart])/10.0);
				break;
			case 2:
				fValue = static_cast<float>(((I_abyByte[95+unDataLogStart] << 8) + I_abyByte[96+unDataLogStart])/10.0);
				break;
			case 3:
				fValue = static_cast<float>(((I_abyByte[97+unDataLogStart] << 8) + I_abyByte[98+unDataLogStart])/10.0);
				break;
			case 4:
				fValue = static_cast<float>(((I_abyByte[99+unDataLogStart] << 8) + I_abyByte[100+unDataLogStart])/10.0);
				break;
			case 5:
				fValue = static_cast<float>(((I_abyByte[101+unDataLogStart] << 8) + I_abyByte[102+unDataLogStart])/10.0);
				break;
			case 6:
				fValue = static_cast<float>(((I_abyByte[103+unDataLogStart] << 8) + I_abyByte[104+unDataLogStart])/10.0);
				break;
			default:
				break;
			}
			strLast.Format("%.1f", fValue);
			strInf += "TWA Level: " + strLast;
			strInf += "\n\r";
			
			unMaskCount ++;
		}
		unDataLogStart += (unDataLen + 5);
	}	
	strInf += "\n\r\n\r";
	
	strInf += "Event Time: ";
	strLast.Format("20%02d-%02d-%02d  %02d:%02d",I_abyByte[24],I_abyByte[25],I_abyByte[26],I_abyByte[27],I_abyByte[28]);
	strInf += strLast + "<-->";
	strLast.Format("20%02d-%02d-%02d  %02d:%02d",I_abyByte[30],I_abyByte[31],I_abyByte[32],I_abyByte[33],I_abyByte[34]);
	strInf += strLast;
	strInf += "\n\r";		

	strInf += "     ";
	for(xyz=0; xyz<m_nSensornumber; xyz++)
	{
		strInf += m_SensorInf[xyz].Name + "(" + m_SensorInf[xyz].unit + ")" + "  ";
	}
	strInf += "\n\r";	

	for(xyz=0; xyz<nDataPoint; xyz++)
	{
		strLast.Format("20%02d-%02d-%02d  %02d:%02d",I_abyByte[24],I_abyByte[25],I_abyByte[26],I_abyByte[27],(I_abyByte[28]+(xyz+1)*(unInterval/60)));
		strInf += strLast + "  ";
		for (int r=0; r<m_nSensornumber; r++)
		{			
			switch(byStatus & 0x0C)
			{
			case 0x0:
				fValue = static_cast<float>(((I_abyByte[nHeader] << 8) + I_abyByte[nHeader+1]));	
				break;
			case 0x4:
				fValue = static_cast<float>(((I_abyByte[nHeader] << 8) + I_abyByte[nHeader+1])/10.0);	
				break;
			case 0x8:
				fValue = static_cast<float>(((I_abyByte[nHeader] << 8) + I_abyByte[nHeader+1])/100.0);	
				break;
			case 0x0C:
				fValue = static_cast<float>(((I_abyByte[nHeader] << 8) + I_abyByte[nHeader+1])/1000.0);	
				break;
			}

			strLast.Format("%.1f", fValue);
			strInf += strLast + "      ";
			nHeader += 2;
		}
		strInf += "\n\r";
	}
	
	strInf += "\n\r\n\r\n\r";

	mf_SaveDataLog("DataLog.TXT", strInf);
//	mf_DispMsg(strInf);
}

BOOL COperationToolDlg::mf_SaveDataLog(const char *I_szName, CString I_Str)
{
	ASSERT(I_szName != NULL);

	FILE *fp = NULL;
	char szFilePath[_MAX_PATH] = "";
	char szFileName[20] = "\\";

	if ((_getcwd(szFilePath, _MAX_PATH)) == NULL)
	{
		TRACE("Get File Path Error\n");
	}
	
	strcat(szFileName, I_szName);
	strcat(szFilePath, szFileName);

	if ((fp = fopen(szFilePath, "a+t")) == NULL)
	{
		TRACE("Can't save into disk\n");
		return FALSE;
	}

	fprintf(fp, "%s\n", (LPCSTR)I_Str);
	
	fclose(fp);
	
	return TRUE;
}

BOOL COperationToolDlg::mf_ClearFile(const char *I_szName)
{
	ASSERT(I_szName != NULL);

	FILE *fp = NULL;
	char szFilePath[_MAX_PATH] = "";
	char szFileName[20] = "\\";

	if ((_getcwd(szFilePath, _MAX_PATH)) == NULL)
	{
		TRACE("Get File Path Error\n");
	}
	
	strcat(szFileName, I_szName);
	strcat(szFilePath, szFileName);

	if ((fp = fopen(szFilePath, "w+t")) == NULL)
	{
		TRACE("Can't save into disk\n");
		return FALSE;
	}

	fprintf(fp, "%s\n", "");	
	fclose(fp);
	
	return TRUE;
}


BOOL COperationToolDlg::mf_SaveMemory(const char *I_szName, CByteArray &I_abybyteArray)
{
	ASSERT(I_szName != NULL);

	FILE *fp = NULL;
	char szFilePath[_MAX_PATH] = "";
	char szFileName[20] = "\\";	
	int		nFileSize;

	if ((_getcwd(szFilePath, _MAX_PATH)) == NULL)
	{
		TRACE("Get File Path Error\n");
	}
	
	strcat(szFileName, I_szName);
	strcat(szFilePath, szFileName);

	if ((fp = fopen(szFilePath, "a+t")) == NULL)
	{
		TRACE("Can't save into disk\n");
		return FALSE;
	}
	
	nFileSize = I_abybyteArray.GetSize();
	for (int r = 0; r < nFileSize; r++)
	{
		fprintf(fp, "%02X ", I_abybyteArray.GetAt(r));
		
		if ((r % 10) == 0)
		{
			fprintf(fp, "\n\r");
		}
	}
	
	fclose(fp);
	
	return TRUE;
}

void COperationToolDlg::mf_ChangeFormat()
{
	CHARFORMAT cf;
	memset(&cf, 0, sizeof(CHARFORMAT));

	m_recSlaveSponse.SetSel(0, m_recSlaveSponse.LineLength(1));
	m_recSlaveSponse.GetDefaultCharFormat(cf);
	cf.dwMask |= CFM_COLOR|CFM_FACE|CFM_BOLD|CFM_SIZE;
	cf.dwEffects |= CFE_BOLD;
	cf.yHeight = 180;
	strcpy(cf.szFaceName, "Arial");
	m_recSlaveSponse.SetDefaultCharFormat(cf);
	
	cf.yHeight = 220;
	cf.dwEffects &= ~CFE_AUTOCOLOR;	
	cf.crTextColor = RGB(255, 128, 128);	
	m_recSlaveSponse.SetSelectionCharFormat(cf);
}

⌨️ 快捷键说明

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