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

📄 ptcmdf.cpp

📁 MDF监控源码2
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	//{
	//	CString strTip ;
	//	strTip.Format( "异常:执行MDF响应命令ACmd50H发生异常:%s ",(LPCSTR)e.Description() ) ;
	//	cAdo.WriteLog(strTip) ;
	//	return -1 ;
	//}
	return -1;
}

//##ModelId=44B6F88400E0
int CPtcMDF::ACmd51H(sCommItem *pItem)
{
	char acEQ[10];
	char acComp[20] ;
	char* pTemp ;
	UCHAR ucCover ;

	int i,nLen ;
	CString strTip ;
	CString strTemp1,strTemp2 ;
	CAdoDB cAdo ;

	try
	{
		//cAdo.InitDB() ;
		nLen = pItem->strBuf.GetLength() ;
		if( nLen < 80 )
		{
			strTip.Format("异常:设备 %s 获取监厂家信息 响应命令 格式出错 ",pItem->pEQ->strName) ;
			theApp.DebugShow(strTip) ;
			cAdo.WriteLog(strTip) ;
			return -1 ;
		}

		memset(acEQ,0,sizeof(acEQ)) ;
		memset(acComp,0,sizeof(acComp)) ;
		pTemp = (char*)pItem->InPack.INFO ;

		i = strlen( pTemp ) ; 
		
		memcpy(acEQ,pTemp,i) ;
		acEQ[i] = '\0' ;
		strTemp1 = acEQ ;

		strTemp2 = "采集器名称:" + strTemp1 ;
		ucCover = *(pItem->InPack.INFO+11) ; 

		if(ucCover > 0x09)
			strTemp1.Format("厂家软件版本:%d.1%d ", *(pItem->InPack.INFO+10),ucCover-0x0A) ;
		else
			strTemp1.Format("厂家软件版本:%d.0%d ", *(pItem->InPack.INFO+10),ucCover) ;

		strTemp2 += strTemp1 ;
		pTemp += 12 ;
		i = strlen(pTemp) ;
		memcpy( acComp, pTemp , i) ;
		acComp[i] = '\0' ;
		strTemp1 = acComp ;
		strTemp2 += "厂家名称:" + strTemp1 ;

		//-测试-
		theApp.DebugShow(strTemp2) ;
		return 0 ;

	}
	catch(_com_error e)
	{
		strTip.Format( "异常:执行MDF响应命令ACmd51H发生异常:%s ",(LPCSTR)e.Description() ) ;
		cAdo.WriteLog(strTip) ;
		return -1 ;
	}
}


//##ModelId=44B6F88400DE
int CPtcMDF::ACmd60H(sCommItem *pItem)
{
	int nLen ;
	CString strTip ;
	CAdoDB cAdo ;

	try
	{
		//cAdo.InitDB() ;
		nLen = pItem->strBuf.GetLength() ;

		if( nLen < 16 )
		{
			strTip.Format("异常:设备 %s 初始化响应命令格式出错 %s ",pItem->pEQ->strName,pItem->strBuf) ;
			theApp.DebugShow(strTip) ;
			cAdo.WriteLog(strTip) ;
			return -1 ;
		}

		if( pItem->pEQ->nTimeOut >= CONFIRM_TIME )
		{
			pItem->pEQ->nTimeOut = 0 ;
			strTip.Format("系统:设备 %s 通讯恢复正常",pItem->pEQ->strName) ;
			theApp.DebugShow(strTip) ;
 			cAdo.WriteLog(strTip) ;
		}

		strTip.Format("系统:设备 %s 初始化 成功",pItem->pEQ->strName) ;
		theApp.DebugShow(strTip) ;
		cAdo.WriteLog(strTip) ;
		pItem->pEQ->unCommState = 1 ;//设置设备为已初始化状态
		pItem->pEQ->nTimeOut = 0 ;//超时复位
		return 0 ;
	}
	catch(_com_error e)
	{
		strTip.Format( "异常:执行MDF响应命令ACmd60H发生异常:%s ",(LPCSTR)e.Description() ) ;
		cAdo.WriteLog(strTip) ;
		return -1 ;
	}
}

//##ModelId=44B6F88400DC
int CPtcMDF::Order(sCommItem *pItem)
{
	return 0 ;
}

//##ModelId=44B6F88400CE
int CPtcMDF::Build( sCommEQ *pEQ, UCHAR ucCmd, CString& strSend )
{
	UCHAR* ucpSend ;
	DWORD dwCHKSUM ;
	DWORD len ;
	int nYear ;
	char cTemp[3] ;
	UCHAR cTimeSrc[10] ;
	char cTimeDst[10] ;

	CString strCHKSUM ;
	CString strTemp ;
	CString strTime ;
	CString strTip ;

	if(pEQ == NULL )
		return -1 ;	// 添加未知设备处理

	try
	{
		BytesToString(&ucCmd,cTemp,1) ;
		strSend.Empty() ;

		if( pEQ->strIDAddr.GetLength() != 2 )
		{
			strSend.Empty() ;
			strTip.Format("异常:监测模块:%s 非法地址:%s 无法生成 %s 命令包 %s",pEQ->strName,pEQ->strIDAddr,(LPSTR)cTemp ) ;
			theApp.WriteTxtLog(strTip) ;
			return -1 ;
		}

		if( pEQ->strType.GetLength() != 2 )
		{
			strSend.Empty() ;
			strTip.Format("异常:监测模块:%s 非法类型:%s 无法生成 %s 命令包 %s",pEQ->strName,pEQ->strIDAddr,(LPSTR)cTemp ) ;
			theApp.WriteTxtLog(strTip) ;
			return -1 ;
		}

		strSend = char(0X7E) ;
		strSend += "10" ;
		strSend += pEQ->strIDAddr ;
		strSend += pEQ->strType ;


		if( ucCmd > 0xF0 )
			strSend += "00" ;
		else
			strSend += (LPSTR)cTemp ;

		switch (ucCmd)
		{
			case 0x4E : //设置监测模块时间
				strTemp = m_fun.GetLENGTH(14)	;	//生成LENGTH
				nYear = atoi(CTime::GetCurrentTime().Format("%Y")) ;

				cTimeSrc[0] = nYear >> 8 ;
				cTimeSrc[1] = nYear & 0xFF ;
				cTimeSrc[2] = atoi(CTime::GetCurrentTime().Format("%m")) ;
				cTimeSrc[3] = atoi(CTime::GetCurrentTime().Format("%d")) ;
				cTimeSrc[4] = atoi(CTime::GetCurrentTime().Format("%H")) ;
				cTimeSrc[5] = atoi(CTime::GetCurrentTime().Format("%M")) ;
				cTimeSrc[6] = atoi(CTime::GetCurrentTime().Format("%S")) ;
				BytesToString(cTimeSrc,cTimeDst,7) ;
				strTime = (LPSTR)cTimeDst ;
				strSend += strTemp + strTime ;
				break ;
			case 0xF2 ://生成相应报警包
				break ;
			default :
				strTemp = m_fun.GetLENGTH(0) ;
				strSend += strTemp ;
				break ;

		}

		//if(strTemp.GetLength() > 4) //出错误的LENGTH将大于正常的4字节
			//return -1 ;

		len = strSend.GetLength() - 1 ;	//数据内容长度

		ucpSend = (UCHAR*)strSend.GetBuffer(0) ;
		dwCHKSUM = m_fun.GetCHKSUM(++ucpSend,len) ;
		strSend += m_fun.CHKSUMToString(dwCHKSUM) ;
		strSend += char(0X0D) ;

		return 0 ;
	}
	catch(_com_error e)
	{
		strTip.Format( "异常:监测模块:%s 组包发生异常:%s",pEQ->strName,(LPCSTR)e.Description() ) ;
		theApp.WriteTxtLog(strTip) ;
		return -1 ;
	}
	return -1;
}



//##ModelId=44B6F88400CE
CString CPtcMDF::Build( CString strAddr,CString strType, UCHAR ucCmd)
{
	UCHAR* ucpSend ;
	DWORD dwCHKSUM ;
	DWORD len ;
	int nYear ;
	char cTemp[3] ;
	//BYTE btTemp;
	UCHAR cTimeSrc[10] ;
	char cTimeDst[10] ;
	
	CString strSend; 

	CString strCHKSUM ;
	CString strTemp ;
	CString strTime ;
	CString strTip ;

	try
	{
		
		BytesToString(&ucCmd,cTemp,1) ;
		

		strSend.Empty();
		strTemp.Empty();

		if( strAddr.GetLength() == 0  )
		{
			return "";
		}

		if( strType.GetLength() == 0 )
		{
			return "" ;
		}

		strSend = char(0X7E) ;
		strSend += ID_VER ;
		strSend += strAddr ;
		strSend += strType ;


		if( ucCmd > 0xF0 )
			strSend += "00" ;
		else
		{
			
			String2Hex(strTemp,&ucCmd,1);
			strSend += strTemp;
		}

		switch (ucCmd)
		{
			case 0x4E : //设置监测模块时间
				strTemp = m_fun.GetLENGTH(14)	;	//生成LENGTH
				nYear = atoi(CTime::GetCurrentTime().Format("%Y")) ;

				cTimeSrc[0] = nYear >> 8 ;
				cTimeSrc[1] = nYear & 0xFF ;
				cTimeSrc[2] = atoi(CTime::GetCurrentTime().Format("%m")) ;
				cTimeSrc[3] = atoi(CTime::GetCurrentTime().Format("%d")) ;
				cTimeSrc[4] = atoi(CTime::GetCurrentTime().Format("%H")) ;
				cTimeSrc[5] = atoi(CTime::GetCurrentTime().Format("%M")) ;
				cTimeSrc[6] = atoi(CTime::GetCurrentTime().Format("%S")) ;
				BytesToString(cTimeSrc,cTimeDst,7) ;
				strTime = (LPSTR)cTimeDst ;
				strSend += strTemp + strTime ;
				break ;
			case 0xF2 ://生成相应报警包
				break ;
			default :
				strTemp = m_fun.GetLENGTH(0) ;
				
				strSend += strTemp ;
				break ;

		}

		//if(strTemp.GetLength() > 4) //出错误的LENGTH将大于正常的4字节
			//return -1 ;

		len = strSend.GetLength() - 1 ;	//数据内容长度

		ucpSend = (UCHAR*)strSend.GetBuffer(0) ;
		dwCHKSUM = m_fun.GetCHKSUM(++ucpSend,len) ;
		strSend += m_fun.CHKSUMToString(dwCHKSUM) ;
		strSend += char(0X0D) ;

		return strSend;
	}
	catch(_com_error e)
	{
		strTip.Format( "监测模块发生异常:%s",(LPCSTR)e.Description() ) ;
		TRACE0(strTip) ;
		return "";
	}
	return "";
}

//##ModelId=44B6F88400CC
CString CPtcMDF::GetCmdNote(UCHAR ucCmd)
{
	CString strNote ;
	switch( ucCmd )
	{
		case 0x44 :
			strNote = "获取监测模块告警" ;
			break ;
		case 0x4d :
			strNote = "获取检测模块时间" ;
			break ;
		case 0x4e :
			strNote = "设定检测模块时间" ;
			break ;
		case 0x4f :
			strNote = "获取通信协议版本号" ;
			break ;
		case 0x50 :
			strNote = "获取设备地址" ;
			break ;
		case 0x51 :
			strNote = "获取设备厂家信息" ;
			break ;
		case 0x55 :
			strNote = "程序测试用码(获取命令格式)" ;
			break ;
		case 0x58 :
			strNote = "系统复位启动" ;
			break ;
		case 0x60 :
			strNote = "初始化检测模块" ;
			break ;
		case 0xe0 :
			strNote = "设备告警上传" ;
			break ;
		default :
			strNote = "未知命令" ;
			break ;
	}
	return strNote ;
}

⌨️ 快捷键说明

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