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

📄 serialtestdlg.cpp

📁 MDF监控源码2
💻 CPP
📖 第 1 页 / 共 4 页
字号:
			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 + -