📄 serialtestdlg.cpp
字号:
int iResult = ReadDB(strSQL,pRsPtr,strTip);
if(iResult == 0)
{
if (!pRsPtr->adoEOF)
{
GetFieldValue("fAlarmLevel",pRsPtr,iLevel);
rscStatus->iLevel = iLevel;
if( iLevel == 1 )
{
//if(m_CirStatus->maxCarrent < 1000)
//{
if(GetFlag() != 1)
{
//if(m_CirStatus->maxCarrent < 3000)
if (!(m_CirStatus->iCarrent < rscStatus->iCarrent && m_CirStatus->maxCarrent > 3000 ))
rscStatus->iLevel = 0;
}else
{
if(m_CirStatus->maxCarrent > 3000 && rscStatus->iCarrent != 0 )
{
rscStatus->iLevel = 0;
}else if ( m_CirStatus->dwSeconds > m_CirStatus->dBaseTime )
{
//rscStatus->iLevel = 0;
}
}
//}
}
pRsPtr->Close();
}else
{
if(GetFlag() == 1 && m_CirStatus->dwSeconds > m_CirStatus->dBaseTime + 0.4 && m_CirStatus->iLevel <2 )
if (rscStatus->iVoltage ==1)
rscStatus->iLevel = 2;
else
rscStatus->iLevel = 1;
else
rscStatus->iLevel = 0;
pRsPtr->Close();
}
}
}
//增加信息到窗体中
CTimeSpan sp;
long iSecond;
if (rscStatus->iLevel != m_CirStatus->iLevel || m_listAlarm.GetItemCount() == 0 )
{
sp = CTime::GetCurrentTime() - tmAlarm;
iSecond = sp.GetTotalSeconds() ;
blOneLevel = FALSE;
iItem = m_listAlarm.GetItemCount() ;
strValue = "01";
iItem = m_listAlarm.InsertItem(m_listAlarm.GetItemCount() +1,strValue,rscStatus->iLevel);
strValue = GetAlarmName(rscStatus->iLevel);
m_listAlarm.SetItemText(iItem,3,strValue);
}else
{
iItem = m_listAlarm.GetItemCount() - 1;
strValue = GetAlarmName(rscStatus->iLevel);
m_listAlarm.SetItemText(iItem,3,strValue);
}
strValue.Format("%.1f",rscStatus->iCarrent);
m_listAlarm.SetItemText(iItem,1,strValue);
strValue.Format("%4.0f",rscStatus->iRate );
m_listAlarm.SetItemText(iItem,2,strValue);
//strValue = GetAlarmName(rscStatus->iLevel);
//m_listAlarm.SetItemText(iItem,3,strValue);
strValue = m_CirStatus->tmStartTime.Format("%Y-%m-%d %H:%M:%S");
m_listAlarm.SetItemText(iItem,4,strValue);
strValue = rscStatus->tmEndTime.Format("%Y-%m-%d %H:%M:%S");
m_listAlarm.SetItemText(iItem,5,strValue);
strValue.Format("%4.1f",rscStatus->dwSeconds);
m_listAlarm.SetItemText(iItem,6,strValue);
//iItem = m_listAlarm.GetItemCount() -1 ;
if (rscStatus->iLevel > 0 && rscStatus->iLevel >= m_CirStatus->iLevel )
{
strValue = "告警";
m_listAlarm.SetItemText(iItem,7,strValue);
}else if (rscStatus->iLevel == 0 && m_CirStatus->iLevel > 0 )
{
strValue = "消警";
m_CirStatus->tmStartTime = m_CirStatus->tmEndTime = rscStatus->tmEndTime ;
m_listAlarm.SetItemText(iItem,7,strValue);
}else if (rscStatus->iLevel == 0 && m_CirStatus->iLevel == 0 )
{
strValue = "正常";
//m_CirStatus->tmStartTime = CTime::GetCurrentTime();
m_listAlarm.SetItemText(iItem,7,strValue);
}
strValue.Format("%4.0f",rscStatus->iVoltage);
m_listAlarm.SetItemText(iItem,8,strValue);
m_CirStatus->dwSeconds = rscStatus->dwSeconds;
m_CirStatus->dwVolSeconds = rscStatus->dwVolSeconds;
m_CirStatus->iCarrent = rscStatus->iCarrent;
m_CirStatus->iVoltage = rscStatus->iVoltage;
m_CirStatus->iLevel = rscStatus->iLevel;
m_CirStatus->iRate = rscStatus->iRate;
m_CirStatus->srCarrent = rscStatus->srCarrent;
m_CirStatus->srRate = rscStatus->srRate;
m_CirStatus->srVoltage = rscStatus->srVoltage;
m_CirStatus->tmEndTime = rscStatus->tmEndTime;
m_CirStatus->iOne = rscStatus->iOne;
if(rscStatus->dBaseTime >0)
m_CirStatus->dBaseTime = rscStatus->dBaseTime;
//if (m_CirStatus->maxCarrent < m_CirStatus->iCarrent)
// m_CirStatus->maxCarrent = m_CirStatus->iCarrent;
//发出告警信息
return 0;
}
int CSerialTestDlg::WriteAlarm(CCircleStatus * m_curStatus)
{
//CString strSQL,strTable,strTip ; //SQL语句
//_variant_t var;
//_RecordsetPtr pRsPtr ;
//pRsPtr.CreateInstance(__uuidof(Recordset));
//strSQL.Format("Select * From CMTSampling Where fCarrent= %d",m_curModel);
//int iResult = ReadDB(strSQL,pRsPtr,strTip);
//try
//{
// if(iResult == 0)
// {
// if (!pRsPtr->adoEOF)
// {
// //pRsPtr->PutCollect(_variant_t("fCarrent"),_variant_t(_bstr_t(port->tmUpdateTime.Format(_T("%Y-%m-%d %H:%M:%S")))));
// pRsPtr->PutCollect(_variant_t("fNum"),_variant_t(_bstr_t(iSample)));
// pRsPtr->PutCollect(_variant_t("fRate"),_variant_t(_bstr_t(iRate)));
// pRsPtr->UpdateBatch(adAffectCurrent);
// pRsPtr->Close();
// }else
// {
// pRsPtr->Close();
// strSQL.Format("Insert into CMTSampling(fCarrent, fNum, fRate) Values(%d,%d,%d)",iCarrent,iSample,iRate);
// m_ConPtr->Execute(_bstr_t(strSQL),NULL,adCmdText);
// }
// }
// return TRUE;
//}
//catch (_com_error e)
//{
// strTip.Format("%dmA标定失败...",iCarrent);
// AfxMessageBox(strTip);
// return FALSE;
//}
return 0;
}
void CSerialTestDlg::OnNMDblclkListtable(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
this->LoadItem();
*pResult = 0;
}
void CSerialTestDlg::OnBnClickedBtnset()
{
char *btBuf;
CByteArray btSend;
CString sBuf,strValue;
m_ConfigNum.GetWindowText(strValue);
m_curModel = atoi(strValue.GetBuffer());
m_ConfigNum.GetWindowText(strValue);
if (strValue.GetLength() == 0)
{
AfxMessageBox(_T("请设定当前标定的电流..."));
m_ConfigNum.SetFocus();
return ;
}
m_SendInfo.GetWindowText(sBuf);
sBuf = "F";
int iLen = sBuf.GetLength() * sizeof(TCHAR);
btBuf = new char[iLen];
btBuf = (char *)sBuf.GetBuffer();
m_inCount++;
m_outCount++;
m_Port.AskCom(btBuf,iLen);
}
void CSerialTestDlg::OnNMRclickListtable(NMHDR *pNMHDR, LRESULT *pResult)
{
CMenu menu;
menu.LoadMenu(IDR_MENUPOP);
CPoint point;
GetCursorPos(&point);
// 显示图标菜单
menu.GetSubMenu(0)->TrackPopupMenu(
TPM_LEFTBUTTON|TPM_RIGHTBUTTON,
point.x, point.y, this, NULL);
*pResult = 0;
}
void CSerialTestDlg::OnNMDblclkListalarm(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
m_listAlarm.DeleteAllItems();
*pResult = 0;
}
UINT CSerialTestDlg::Asking(LPVOID lpWnd)
{
CSerialTestDlg *dlg = (CSerialTestDlg *)lpWnd;
int iRate = dlg->iInterval;
for(;;)
{
if (!dlg->bAsking)
return 0;
else
{
dlg->AskData();
Sleep(iRate);
}
}
}
int CSerialTestDlg::GetRange(double iValue)
{
int iResult = 0;
if (iValue < 50)
iValue = 0;
else if (iValue >=50 && iValue < 200)
iValue = 1;
else if(iValue >=200 && iValue < 300)
iValue = 2;
else if(iValue >=300 && iValue < 500)
iValue = 3;
else if(iValue >=500 && iValue < 1000)
iValue = 4;
else if(iValue >=1000 && iValue < 2000)
iValue = 5;
else if(iValue >=2000 && iValue < 3000)
iValue = 6;
else if(iValue >3000 )
iValue = 7;
return iValue;
}
CString CSerialTestDlg::GetAlarmName(int iLevel)
{
CString sRet;
sRet.Empty();
switch(iLevel)
{
case 0:
sRet = "";
break;
case 1:
sRet = "警告";
break;
case 2:
sRet = "一般告警";
break;
case 3:
sRet = "重要告警";
break;
case 4:
sRet = "紧急告警";
break;
}
return sRet;
}
void CSerialTestDlg::OnEnChangeEdtport()
{
// TODO: 如果该控件是 RICHEDIT 控件,则它将不会
// 发送该通知,除非重写 CDialog::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
// TODO: 在此添加控件通知处理程序代码
}
void CSerialTestDlg::OnEnChangeEdtip()
{
// TODO: 如果该控件是 RICHEDIT 控件,则它将不会
// 发送该通知,除非重写 CDialog::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
// TODO: 在此添加控件通知处理程序代码
}
// 滤除杂波
char CSerialTestDlg::FilterNum(char cSample)
{
//BYTE btTemp;
BYTE *pByte;
//int iSum;
CString strTemp;
if(m_btArray.GetCount() > 6)
m_btArray.RemoveAt(0);
m_btArray.Add((BYTE)cSample);
if (m_btArray.GetCount() >= 6 )
{
pByte = m_btArray.GetData();
if (cSample == 0 && pByte[5] != 0)
{
return((char)pByte[5]) ;
}
if(pByte[5] <= pByte[4] && pByte[4] <= pByte[3] && pByte[3] <= pByte[2] && pByte[2] <= pByte[1] && pByte[1] <= pByte[0])
{
if ( abs(pByte[5]-pByte[4]) > 2)
return((char)pByte[4]) ;
else
return(cSample) ;
}
else if(pByte[5] >= pByte[4] && pByte[4] >= pByte[3] && pByte[3] >= pByte[2] && pByte[2] >= pByte[1] && pByte[1] >= pByte[0])
{
if ( pByte[5]-pByte[4] > 3)
return((char)pByte[5]) ;
else
return(cSample) ;
//return(cSample) ;
}
else
{
if ( abs(pByte[5] - pByte[4]) > 3)
{
if (pByte[5] < pByte[4])
return((char)((pByte[5] + pByte[4] + pByte[3] +pByte[2])/4)) ;
else
return((char)pByte[5]) ;
}
else
return(cSample);
/* iSum = 0;
for (int i=0;i< m_btArray.GetCount() ;i++)
{
iSum += m_btArray.GetAt(i);
}
btTemp = (double)iSum/m_btArray.GetCount();
strTemp.Format("%d",btTemp);
TRACE0(strTemp);
return((char)btTemp);*/
}
}else
{
return (0);
}
return 0;
}
int CSerialTestDlg::SetIniSample(int iValue)
{
int iResult = 0;
if (iCount >= 6 )
{
if (iValue < arIni[5] )
{
iResult = arIni[5];
}else
{
for(int i=0;i<6;i++)
{
arIni[i] = arIni[i+1];
}
iCount = 5;
arIni[5] = iValue;
if (arIni[0] == arIni[1] && arIni[1] == arIni[2] && arIni[2] == arIni[3] && arIni[3] == arIni[4] && arIni[4] == arIni[5])
iResult = arIni[5];
else
iResult = (arIni[0]+arIni[1]+arIni[2]+arIni[3]+arIni[4]+arIni[5]) /6 ;
}
}else
{
iResult = 0;
if (iCount < 2)
{
arIni[iCount] = iValue;
iResult = iValue;
iCount++;
}else{
arIni[iCount] = iValue;
iCount++;
for(int i = 0;i< iCount ;i++)
{
iResult += arIni[i];
}
iResult = iResult / iCount;
return iResult;
}
}
return iResult;
}
// 获得曲线特征
int CSerialTestDlg::GetFlag(void)
{
int iResult =0 ;
if (arrCarrent[0] >= 4)
{
if (arrCarrent[1] >= arrCarrent[2] && arrCarrent[2] >= arrCarrent[3] && arrCarrent[3] ==0 && arrCarrent[1] > 0)
{
iResult = 1;
}else if (arrCarrent[1] < arrCarrent[2] && arrCarrent[2] < arrCarrent[3] && arrCarrent[1] ==0 )
{
iResult = 2;
}else if(arrCarrent[1] > arrCarrent[3] && (arrCarrent[1] >3000 || arrCarrent[2]>3000 || arrCarrent[3]>3000) )
{
iResult = 1;
}
}
return iResult;
}
// 取得警的最低间
double CSerialTestDlg::GetBaseAlarm(double iValue)
{
CString strSQL,strTip;
double dBaseCarrent=0;
_RecordsetPtr pRsPtr ;
pRsPtr.CreateInstance(__uuidof(Recordset));
if(iValue > 200)
{
strSQL.Format("Select * From CMTAlarmLevel Where fClass =0 and fCarrent1 <= %.0f and fCarrent2 >%.0f ",\
iValue,iValue);
int iResult = ReadDB(strSQL,pRsPtr,strTip);
if(iResult == 0)
{
GetFieldValue("fSecond1",pRsPtr,dBaseCarrent);
}
pRsPtr->Close();
}
return dBaseCarrent;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -