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

📄 meterinterface.cpp

📁 vc 485串口通讯测试程序 vc-commtest
💻 CPP
字号:
// MeterInterface.cpp: implementation of the CMeterInterface class.
//
//////////////////////////////////////////////////////////////////////

#include "MeterInterface.h"
#include "para_interface.h"
#include "MeterZJ.h"
#include "MeterGB.h"
#include "Anacom.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMeterInterface::CMeterInterface()
{
//	m_ShmDB.CreateDB();
        bGreate = false;
	pMeter  = NULL;	
	pMyCom  = NULL;
	pShmDB  = NULL;
	m_meter = 0;
}

CMeterInterface::~CMeterInterface()
{
	if(pMeter)
	       delete pMeter;
	if(pMyCom)
		delete pMyCom;
        if(pShmDB)
        	delete pShmDB;
}
bool  CMeterInterface::GetData(BYTE *data,int &Len,int item)
{
	if( !bGreate )
	{
//		m_Err_Code = 0x0100;
		return false;
	}

	if(pShmDB->CheckItem(item))//实时数据库中有的项目
	{	
		return pShmDB->GetShmData( data,(int )m_meter, item, Len);
	}
	CAnacom pAnacom;
	if(pAnacom.CheckItem(item))
	{
		return pAnacom.GetData( data,(int) m_meter, item, Len);		
	}	
	
	if(!pMeter->GetData( data, Len, item))
	{	
	        return false;	
	}
	
	return true;
}

bool  CMeterInterface::Init( BYTE meter_no )
{
	if( bGreate  )
	{
		if( meter_no == m_meter)
		{
		        return true;
		}
		
		return false;
	}
	bGreate  = true;
	
	if( !GreatShmDB() )
	{
		return false;
	}
	
	if( !GreatMeter( meter_no ) )
	{
		return false;
	}	
	
	return true;
}

BYTE  CMeterInterface::GetMeterNo()
{
	return m_meter;
}

bool CMeterInterface::GreatMeter(BYTE meter_no)
{
	METERPARA      m_meter_para;
	ParaInterface m_ParaInterface;
	BYTE data[64];
	int len;	
	m_ParaInterface.AttachShm();
	if( !m_ParaInterface.GetTermPara( data, &len, 0x890f, meter_no ) )
	{
//		printf("\r\nCreatD 1 %d",meter_no );		
		return false;
	}
	
        memcpy( &m_meter_para.com_para, data, sizeof(METERCOMPARA));
 	if(!m_ParaInterface.GetTermPara( data, &len, 0x8910, meter_no ))
 	{
// 		printf("\r\nCreatD 2" );
		return false;
	}
	
	m_meter_para.type = data[0];
	m_meter_para.No   = meter_no;
	m_meter           = meter_no;
//	printf("\r\n PORT%d",m_meter_para.com_para.port);
	pMyCom = new MyCom( m_meter_para.com_para.port  );
	if( pMyCom == NULL)
	{
//		printf("\r\n CreatD 3" );
	        return false;
	}
	
	switch(m_meter_para.com_para.protcol)//m_meter_temp.com_para.meter_protcol
	{
		case PROTCOLGB://国标规约
		     pMeter = new CMeterGB( m_meter_para );
		     break;
		case PROTCOLZJ://浙江规约
		     pMeter = new CMeterZJ( m_meter_para );
		     break;
		default:
		     return false;
	}
	pMeter->AttachShmMan( pShmDB );
	pMeter->AttachCom( pMyCom );
	return true;
}
bool CMeterInterface::GreatShmDB()
{
	pShmDB = new ShmMan( SHM_ID );
	if(pShmDB == NULL)
	{
	        return false;
	}
	
	if( !pShmDB->CreateDB() ) {  //生成实时数据库
		
		return false;
		
	}
	return true;
}
bool  CMeterInterface::SetAddress(BYTE *address,int &Len)
{
	
	return pMeter->SetAddress( address, Len);
}
bool    CMeterInterface::SetClock(time_t *m_time)
{
	return pMeter->SetClock( m_time );
}

⌨️ 快捷键说明

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