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

📄 checkstate.cpp

📁 使用vc++技术实现光电机串口通信管理程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// CheckState.cpp : implementation file
//

#include "stdafx.h"
#include "PCM120.h"
#include "CheckState.h"
#include "DlgConfig.h"
#include "DlgE1Mod.h"
#include "DlgAllStaSet.h"
#include "DlgShx.h"
#include "DlgE1Sch.h"
#include "DlgStateDisplay.h"
#include "RectView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CCheckState dialog


CCheckState::CCheckState(CWnd* pParent /*=NULL*/)
	: CDialog(CCheckState::IDD, pParent)
{
	//{{AFX_DATA_INIT(CCheckState)
//	m_iCom = 1;
	//}}AFX_DATA_INIT
}


void CCheckState::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CCheckState)
	
//	DDX_Text(pDX, IDC_EDIT_COM, m_iCom);
//	DDV_MinMaxInt(pDX, m_iCom, 1, 20);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CCheckState, CDialog)
	//{{AFX_MSG_MAP(CCheckState)
	ON_WM_TIMER()
	ON_MESSAGE(WM_COMM_RXCHAR,OnCommunication)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCheckState message handlers

BEGIN_EVENTSINK_MAP(CCheckState, CDialog)
    //{{AFX_EVENTSINK_MAP(CCheckState)
//	ON_EVENT(CCheckState, IDC_MSCOMM1, 1 /* OnComm */, OnComm, VTS_NONE)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
int nError;
CString CCheckState::strGetSection="default";
CString CCheckState::strColorbefore="";
CString CCheckState::strRecive="";
CString CCheckState::strPath="";	
int CCheckState::iState=0;
int iSelfState=0;
int CCheckState::iTime=0;
bool CCheckState::bAuto=false;
CStringArray staAllStaName;
CStringArray staAllID;//所有站点的所有的设备ID
BOOL CCheckState::OnInitDialog() 
{
	CDialog::OnInitDialog();
//////////////////////////////////////////////////////////////////////////
	SYSTEMTIME   mySystemTime;
	GetLocalTime(&mySystemTime);
	CString   filetime;
	//	filetime.Format ("%d-%d-%d     %s%d     %d:%d:%d",mySystemTime.wYear,mySystemTime.wMonth,mySystemTime.wDay,"星期",mySystemTime.wDayOfWeek,mySystemTime.wHour,mySystemTime.wMinute,mySystemTime.wSecond);
	filetime.Format("%d-%d-%d.ini",mySystemTime.wYear,mySystemTime.wMonth,mySystemTime.wDay);
	CDlgAllStaSet dlgalstaset;
	dlgalstaset.GetModulePath(strPath,NULL);
	CString strConfigaPath;
	strConfigaPath=strPath+"config.ini";
	char charGedelay[255];
	GetPrivateProfileString("General","延时(毫秒)","1000",charGedelay,255,strConfigaPath);
	idelay=atoi((LPTSTR)charGedelay);
	strFileName=strPath+"log\\"+filetime;
	SetTimer(3,10,NULL);
//////////////////////////////////////////////////////////////////////////

	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CCheckState::OnOK() 
{

	CDialog::OnOK();
}
BOOL over;

void CCheckState::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	switch(nIDEvent) 
	{
	case 1:	
		KillTimer(1);
		m_Port.ClosePort();
		if(m_strRXData.Find("7E 7E")>=0)
		{
			int ipos7E =m_strRXData.Find("7E 7E");
			CString strWarn ;
			m_strRXData=m_strRXData.Right(m_strRXData.GetLength()-ipos7E-3);
			strWarn =m_strRXData.Right(12);
			char charGetbe[255];
			CString strIDtemp;//取得的ID
			strIDtemp=m_strRXData.Mid(6,2);
			GetPrivateProfileString("default",m_strRXData.Mid(6,2)," ",charGetbe,255,strFileName);
			CString strbefore;
			strbefore=(LPCTSTR)charGetbe;
			WritePrivateProfileString("default",m_strRXData.Mid(6,2),strWarn,strFileName);
			CString strSecIDE;//存“01E1,01E2 01E3 01E4之类的”
			strSecIDE=strIDtemp+"E1";
			GetPrivateProfileString("default",strSecIDE,"0",charGetbe,255,strFileName);
			CString strchancewarn;//经修改后的告警信息;
			CString strGetModeset;
			strGetModeset=(LPCTSTR)charGetbe;
			CString strCRC,strbinCRC;
			strCRC=strWarn.Left(2);
			XstrtoBin(strCRC,strbinCRC);
			if(strGetModeset.Compare("1")==0)
			{
				if(strbinCRC.Mid(5,1)=="1")
				{
					strchancewarn+="04 ";
				}
				else
				{
					strchancewarn+="00 ";
				}
				
			}
			else
			{
				strchancewarn+=strWarn.Left(3);
			}
			strSecIDE=strIDtemp+"E2";
			GetPrivateProfileString("default",strSecIDE,"0",charGetbe,255,strFileName);
			strGetModeset=(LPCTSTR)charGetbe;
			strCRC=strWarn.Mid(3,2);
			XstrtoBin(strCRC,strbinCRC);
			if(strGetModeset.Compare("1")==0)
			{
				if(strbinCRC.Mid(5,1)=="1")
				{
					strchancewarn+="04 ";
				}
				else
				{
					strchancewarn+="00 ";
				}
			}
			else
			{
				strchancewarn+=strWarn.Mid(3,3);
			}
			strSecIDE=strIDtemp+"E3";
			GetPrivateProfileString("default",strSecIDE,"0",charGetbe,255,strFileName);
			strGetModeset=(LPCTSTR)charGetbe;
			strCRC=strWarn.Mid(6,2);
			XstrtoBin(strCRC,strbinCRC);
			if(strGetModeset.Compare("1")==0)
			{
				if(strbinCRC.Mid(5,1)=="1")
				{
					strchancewarn+="04 ";
				}
				else
				{
					strchancewarn+="00 ";
				}
			}
			else
			{
				strchancewarn+=strWarn.Mid(6,3);
			}
			strSecIDE=strIDtemp+"E4";
			GetPrivateProfileString("default",strSecIDE,"0",charGetbe,255,strFileName);
			strGetModeset=(LPCTSTR)charGetbe;
			strCRC=strWarn.Mid(9,2);
			XstrtoBin(strCRC,strbinCRC);
			if(strGetModeset.Compare("1")==0)
			{
				if(strbinCRC.Mid(5,1)=="1")
				{
					strchancewarn+="04";
				}
				else
				{
					strchancewarn+="00";
				}
			}
			else
			{
				strchancewarn+=strWarn.Mid(9,2);
			}
			WritePrivateProfileString("default",m_strRXData.Mid(6,2),strchancewarn,strFileName);
			CString strStand;
			strStand=strbefore;
			//strStand="04 04 04 04";
		//	strStand+=" ";06.10.19去掉的;
			if(strchancewarn.Compare(strStand)!=0)
			{
				WritePrivateProfileString(strLogSection,m_strRXData.Mid(6,2),strchancewarn,strFileName);				
			}			
			if(iIDidx<iCntID-1)
			{
				iIDidx++;
				checkmod();
			//	SetTimer(5,idelay,NULL);
			//	OneCyle();
			}
			else
			{
				m_Port.ClosePort();
				CCheckState::strGetSection=	strLogSection;
				strColor="";
//////////////////////////取各站的状态即颜色显示////////////////////////////////////////////////
				for(int i =0;i<staAllStaName.GetSize();i++)
				{		
					CStringArray staTemp;
					int iDevCntTemp=0;
					ReadConfigDevID(i+1,staTemp,iDevCntTemp);
					int nErr=0;
					for(int j=0;j<staTemp.GetSize();j++)
					{				
						CString staAddTemp=staTemp.GetAt(j);						
						char Get[255];
						//GetPrivateProfileString("default",staAddTemp,"04 04 04 04",Get,255,strPath);
						GetPrivateProfileString("default",staAddTemp,"FF FF FF FF",Get,255,strFileName);
						CString strGetWarning;
						strGetWarning=Get;
						if(strGetWarning=="FF FF FF FF")
						{
							nErr++;
						}
						else
						{
							strGetWarning.Replace("04","00");
							if(strGetWarning.Compare("00 00 00 00")!=0)
							{
								nErr+=100;
							}
						}
						
					}
					int iSizeDev=staTemp.GetSize();
					if(nErr==iSizeDev)
					{
						strColor+="0";
					}
					else if(nErr==0)
					{
						strColor+="2";
					}
					else if(nErr>=100||nErr<iSizeDev)
					{
						strColor+="1";
					}

					
				}
				strColorbefore=strColor;
//////////////////////////////////////////////////////////////////////////				
			}
		}
		else//收到的串的长度不是57时,不是正常的
		{
////////////////////////////////////////////////////F//////////////////////
			char charGetbe[255];
			GetPrivateProfileString("default",staAdd," ",charGetbe,255,strFileName);
			WritePrivateProfileString("default",staAdd,"FF FF FF FF",strFileName);
			CString strStand;
			CString strIDEn;			
			strIDEn.Format("%sE1",staAdd);
			WritePrivateProfileString("default",strIDEn,0,strFileName);
			strIDEn.Format("%sE2",staAdd);
			WritePrivateProfileString("default",strIDEn,0,strFileName);
			strIDEn.Format("%sE3",staAdd);
			WritePrivateProfileString("default",strIDEn,0,strFileName);
			strIDEn.Format("%sE4",staAdd);
			WritePrivateProfileString("default",strIDEn,0,strFileName);
			strStand=charGetbe;
		//	strStand="04 04 04 04";
			if(strStand.Compare("FF FF FF FF")!=0)
			{
				WritePrivateProfileString(strLogSection,staAdd,"FF FF FF FF",strFileName);				
			}
//////////////////////////////////////////////////////////////////////////
			//WritePrivateProfileString(strLogSection,staAdd,"FF FF FF FF ",strPath);
		//	WritePrivateProfileString("default",staAdd,"FF FF FF FF",strPath);
			if(iIDidx<iCntID-1)
			{
				iIDidx++;
				checkmod();
			//	SetTimer(5,idelay,NULL);
			//	OneCyle();
				
			}	
			else
			{
			//	m_Port.ClosePort();//当所有站的设备检查一遍后关闭串
				CCheckState::strGetSection=	strLogSection;
				strColor="";
//////////////////////////取各站的状态即颜色显示////////////////////////////////////////////////
				for(int i =0;i<staAllStaName.GetSize();i++)
				{		
					CStringArray staTemp;
					int iDevCntTemp=0;
					ReadConfigDevID(i+1,staTemp,iDevCntTemp);
					int nErr=0;
					for(int j=0;j<staTemp.GetSize();j++)
					{				
						CString staAddTemp=staTemp.GetAt(j);						
						char Get[255];
					//	GetPrivateProfileString("default",staAddTemp,"04 04 04 04",Get,255,strPath);
						GetPrivateProfileString("default",staAddTemp,"FF FF FF FF",Get,255,strFileName);
						CString strGetWarning;
						strGetWarning=Get;
						if(strGetWarning=="FF FF FF FF")
						{
							nErr++;
						}
						
						else 
						{
							strGetWarning.Replace("04","00");
							if(strGetWarning.Compare("00 00 00 00")!=0)						
							{
								nErr+=100;
							}
						}
						
					}
					int iSizeDev=staTemp.GetSize();
					if(nErr==iSizeDev)
					{
						strColor+="0";
					}
					else if(nErr==0)
					{
						strColor+="2";
					}
					else if(nErr>=100||nErr<iSizeDev)
					{
						strColor+="1";
					}

					
				}
				strColorbefore=strColor;
//////////////////////////////////////////////////////////////////////////
			}
		}
		
		break;
	case 2:
		if(bAuto==true)
		{
		
			doCheck();
		}
		
		break;
	case 3:
		if(CDlgConfig::iState==0&& CDlgShx::iState==0&&CDlgE1Mod::iState==0)
		{
			if(CCheckState::bAuto==0)
			{
				CCheckState::bAuto=true;
				OnAutoCheck();
				
			}
		}
		else
		{

			OnAutoStop();
			CCheckState::bAuto=false;
		}
	
		break;	
	case 4:
		KillTimer(4);
		if(bAuto==true)
		{
			
			doCheck();
		}		
		break;
	case 5:
			KillTimer(5);
		//	m_Port.ClosePort();
			CCheckState::iState=0;
		if(!m_strRXData.IsEmpty())
		{
			CString strRXTemp,strRXBin,strGetAdd;
			strRXTemp=m_strRXData.Right(3);
			int nPos7E=m_strRXData.Find("7E 7E");
			if(nPos7E>=0)
			{
				strGetAdd=m_strRXData.Mid(nPos7E+9,2);
				strRXTemp.Replace(" ","");
				CString strpre;
				
				XstrtoBin(strRXTemp,strRXBin);                  
				if(strRXBin.Left(1)=="1")
				{
					strpre.Format("%sE4",strGetAdd);
					WritePrivateProfileString("default",strpre,"1",strFileName);
				}
				else
				{
					strpre.Format("%sE4",strGetAdd);
					WritePrivateProfileString("default",strpre,"0",strFileName);
					
				}
				if(strRXBin.Mid(1,1)=="1")
				{
					strpre.Format("%sE3",strGetAdd);
					WritePrivateProfileString("default",strpre,"1",strFileName);
				}
				else
				{
					strpre.Format("%sE3",strGetAdd);
					WritePrivateProfileString("default",strpre,"0",strFileName);;
				}
				if(strRXBin.Mid(2,1)=="1")
				{
					strpre.Format("%sE2",strGetAdd);
					WritePrivateProfileString("default",strpre,"1",strFileName);
				}
				else
				{

⌨️ 快捷键说明

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