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