📄 meterinterface.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 + -