You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

280 lines
11 KiB
C++

#include "StdAfx.h"
#include "PciPortMgr.h"
#include "Propertie.h"
#include "PropertieMgr.h"
#include "Motor.h"
#include "AuthorityMgr.h"
#define PCI_PORT_CNT 16 //<2F><><EFBFBD><EFBFBD>pci <20><><EFBFBD>˿ڵĸ<DAB5><C4B8><EFBFBD>
CPciPortMgr *gPciPortMgr = new CPciPortMgr;
CPciPortMgr::CPciPortMgr(void)
{
//<2F><>ʼ<EFBFBD><CABC>pci <20>Ķ˿ڿ<CBBF><DABF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
IniPciPortVec();
m_OutPortDefaultStateL = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD>˿ڵͰ<DAB5>λ<EFBFBD><CEBB>Ĭ<EFBFBD><C4AC>״̬
m_OutPortDefaultStateH = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD>˿ڸ߰<DAB8>λ<EFBFBD><CEBB>Ĭ<EFBFBD><C4AC>״̬
}
CPciPortMgr::~CPciPortMgr(void)
{
}
void CPciPortMgr::Ini()
{
//<2F><>ʼ<EFBFBD><CABC><EFBFBD>˿ڿ<CBBF><DABF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
IniPortCtrlType();
//<2F><>ʼ<EFBFBD><CABC><EFBFBD>˿ڱ仯<DAB1>Ĺ۲<C4B9><DBB2><EFBFBD>
IniObserver();
}
//<2F><>ʼ<EFBFBD><CABC>pci <20>Ķ˿ڿ<CBBF><DABF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CPciPortMgr::IniPciPortVec()
{
m_PciPortCnt = PCI_PORT_CNT*2;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
for(int i=0;i<m_PciPortCnt;i++)
{
m_PciPortVec.push_back(make_pair(PCI_PORT_NULL,false));
}
}
//<2F><>ʼ<EFBFBD><CABC><EFBFBD>˿ڿ<CBBF><DABF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CPciPortMgr::IniPortCtrlType()
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>-------------------------------------
m_OutPortCtrlType.push_back(PCI_PORT_NULL);
//X <20><>
m_OutPortCtrlType.push_back(PCI_PORT_PLUS_X);
m_OutPortCtrlType.push_back(PCI_PORT_DIR_X);
//Y <20><>
m_OutPortCtrlType.push_back(PCI_PORT_DIR_Y);
m_OutPortCtrlType.push_back(PCI_PORT_PLUS_Y);
//Z <20><>
m_OutPortCtrlType.push_back(PCI_PORT_DIR_Z);
m_OutPortCtrlType.push_back(PCI_PORT_PLUS_Z);
//<2F><><EFBFBD><EFBFBD>
m_OutPortCtrlType.push_back(PCI_PORT_LASER);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_OutPortCtrlType.push_back(PCI_PORT_LASER_2);
//<2F><><EFBFBD><EFBFBD>
m_OutPortCtrlType.push_back(PCI_PORT_EXHAUST_FAN);
//<2F><><EFBFBD><EFBFBD>1
m_OutPortCtrlType.push_back(PCI_PORT_VACUUM_OUT1);
//<2F><><EFBFBD><EFBFBD>2
m_OutPortCtrlType.push_back(PCI_PORT_VACUUM_OUT2);
//<2F><><EFBFBD><EFBFBD>
m_OutPortCtrlType.push_back(PCI_PORT_LIGHT_R);
m_OutPortCtrlType.push_back(PCI_PORT_LIGHT_Y);
m_OutPortCtrlType.push_back(PCI_PORT_LIGHT_G);
m_OutPortCtrlType.push_back(PCI_PORT_ALARM);
//<2F><><EFBFBD><EFBFBD>
m_OutPortCtrlType.push_back(PCI_PORT_AIR);
//<2F><>
m_OutPortCtrlType.push_back(PCI_PORT_DOOR);
//PLC
m_OutPortCtrlType.push_back(PCI_PORT_PLC_1);
m_OutPortCtrlType.push_back(PCI_PORT_PLC_2);
m_OutPortCtrlType.push_back(PCI_PORT_PLC_3);
m_OutPortCtrlType.push_back(PCI_PORT_PLC_4);
m_OutPortCtrlType.push_back(PCI_PORT_PLC_5);
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>-------------------------------------
m_InPortCtrlType.push_back(PCI_PORT_NULL);
m_InPortCtrlType.push_back(PCI_PORT_LIMIT_SWITCH_X_F);
m_InPortCtrlType.push_back(PCI_PORT_LIMIT_SWITCH_X_N);
m_InPortCtrlType.push_back(PCI_PORT_LIMIT_SWITCH_Y_F);
m_InPortCtrlType.push_back(PCI_PORT_LIMIT_SWITCH_Y_N);
m_InPortCtrlType.push_back(PCI_PORT_LIMIT_SWITCH_Z_F);
m_InPortCtrlType.push_back(PCI_PORT_LIMIT_SWITCH_Z_N);
m_InPortCtrlType.push_back(PCI_PORT_VACUUM_IN1);
m_InPortCtrlType.push_back(PCI_PORT_VACUUM_IN2);
m_InPortCtrlType.push_back(PCI_PORT_AIR_CYLINDER_1);
m_InPortCtrlType.push_back(PCI_PORT_AIR_CYLINDER_2);
m_InPortCtrlType.push_back(PCI_PORT_DOOR_CHECK);
m_InPortCtrlType.push_back(PCI_PORT_GRATING);
m_InPortCtrlType.push_back(PCI_PORT_STOP);
m_InPortCtrlType.push_back(PCI_PORT_FIBER1);
m_InPortCtrlType.push_back(PCI_PORT_FIBER2);
}
//<2F><>ʼ<EFBFBD><CABC><EFBFBD>˿ڱ仯<DAB1>Ĺ۲<C4B9><DBB2><EFBFBD>
void CPciPortMgr::IniObserver()
{
//<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>Ҫ<EFBFBD><D2AA>Ч<EFBFBD><D0A7>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2B4A6>
CMotor *pMotorX = CMotor::GetMotor(MOTOR_X);
CMotor *pMotorY = CMotor::GetMotor(MOTOR_Y);
CMotor *pMotorZ = CMotor::GetMotor(MOTOR_Z);
pMotorX->SetPciPortType(PCI_PORT_DIR_X,PCI_PORT_PLUS_X,PCI_PORT_LIMIT_SWITCH_X_F,PCI_PORT_LIMIT_SWITCH_X_N);
pMotorY->SetPciPortType(PCI_PORT_DIR_Y,PCI_PORT_PLUS_Y,PCI_PORT_LIMIT_SWITCH_Y_F,PCI_PORT_LIMIT_SWITCH_Y_N);
pMotorZ->SetPciPortType(PCI_PORT_DIR_Z,PCI_PORT_PLUS_Z,PCI_PORT_LIMIT_SWITCH_Z_F,PCI_PORT_LIMIT_SWITCH_Z_N);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>˿ڸı<DAB8><C4B1>Ĺ۲<C4B9><DBB2><EFBFBD>
Attach(pMotorX);
Attach(pMotorY);
Attach(pMotorZ);
}
#if 1//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMFCPropertyGridProperty *CPciPortMgr::CreatGridProperty()
{
CString PropertyName;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CString Description;//<2F><><EFBFBD><EFBFBD>
CString Path = _T("PciPort");;//<2F>洢·<E6B4A2><C2B7>
CString Name;
//-------------------------------------------------------------------------------//
PropertyName = _T("PCI <20>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>");
CMFCPropertyGridProperty* pGroup = new CMFCPropertyGridProperty(PropertyName);
//-------------------------------------------------------------------------------//
if(gAuthorityMgr->CheckAuthority(_FACTORY))
{
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>ӳ<EFBFBD><D3B3>
Name = _T("m_OutPortDefaultStateL");//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPropertie *pPropertie = new CPropertie;
pPropertie->SetpVal((void*)&m_OutPortDefaultStateL);
pPropertie->SetType(_PROP_TYPE_INT);
pPropertie->SetpModule(this);
pPropertie->SetPath(Path);
pPropertie->SetName(Name);
pPropertie->WriteRead(true);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
PropertyName = _T("Ĭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
Description = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ڵͰ<EFBFBD>λ<EFBFBD><EFBFBD>Ĭ<EFBFBD><EFBFBD>״̬,<2C><><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>ÿһλ<D2BB><CEBB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>˿<EFBFBD>");
CMFCPropertyGridProperty* p = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_OutPortDefaultStateL, Description);
pGroup->AddSubItem(p);
gDevicePropertieMgr.Insert(p, pPropertie);
}
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>ӳ<EFBFBD><D3B3>
Name = _T("m_OutPortDefaultStateH");//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPropertie *pPropertie = new CPropertie;
pPropertie->SetpVal((void*)&m_OutPortDefaultStateH);
pPropertie->SetType(_PROP_TYPE_INT);
pPropertie->SetpModule(this);
pPropertie->SetPath(Path);
pPropertie->SetName(Name);
pPropertie->WriteRead(true);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
PropertyName = _T("Ĭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
Description = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ڸ߰<EFBFBD>λ<EFBFBD><EFBFBD>Ĭ<EFBFBD><EFBFBD>״̬,<2C><><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>ÿһλ<D2BB><CEBB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>˿<EFBFBD>");
CMFCPropertyGridProperty* p = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_OutPortDefaultStateH, Description);
pGroup->AddSubItem(p);
gDevicePropertieMgr.Insert(p, pPropertie);
}
for(int i=0;i<m_PciPortCnt;i++)
{
CString Idx;
if(i<PCI_PORT_CNT)
{
Idx.Format("%ld",i);
PropertyName = "out <20>˿<EFBFBD>" + Idx;
}
else
{
Idx.Format("%ld",i%PCI_PORT_CNT);
PropertyName = "in <20>˿<EFBFBD>" + Idx;
}
Idx.Format("%ld",i);
CMFCPropertyGridProperty* pGroup1 = new CMFCPropertyGridProperty(PropertyName);
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>ӳ<EFBFBD><D3B3>
Name = "m_PciPortVec_first" + Idx;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPropertie *pPropertie = new CPropertie;
pPropertie->SetpVal((void*)&(m_PciPortVec[i].first));
pPropertie->SetType(_PROP_TYPE_STRING);
pPropertie->SetpModule(this);
pPropertie->SetPath(Path);
pPropertie->SetName(Name);
pPropertie->WriteRead(true);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
PropertyName = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
Description = _T("<EFBFBD>˿ڿ<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
CMFCPropertyGridProperty* p1 = new CMFCPropertyGridProperty(PropertyName,(_variant_t)m_PciPortVec[i].first, Description);
//<2F><><EFBFBD><EFBFBD><EFBFBD>˿ڿ<CBBF><DABF>Կ<EFBFBD><D4BF>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD>
if(i<PCI_PORT_CNT)
InsertOutCtrlType(p1);
else
InsertInCtrlType(p1);
p1->AllowEdit(FALSE);//<2F><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>
pGroup1->AddSubItem(p1);
gDevicePropertieMgr.Insert(p1, pPropertie);
}
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>ӳ<EFBFBD><D3B3>
Name = "m_PciPortVec_second" + Idx;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPropertie *pPropertie = new CPropertie;
pPropertie->SetpVal((void*)&m_PciPortVec[i].second);
pPropertie->SetType(_PROP_TYPE_BOOL);
pPropertie->SetpModule(this);
pPropertie->SetPath(Path);
pPropertie->SetName(Name);
pPropertie->WriteRead(true);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
PropertyName = _T("<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
Description = _T("<EFBFBD>˿ڷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ֵ");
CMFCPropertyGridProperty* p = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_PciPortVec[i].second, Description);
pGroup1->AddSubItem(p);
gDevicePropertieMgr.Insert(p, pPropertie);
}
pGroup->AddSubItem(pGroup1);
}
}
//-------------------------------------------------------------------------------//
return pGroup;
}
void CPciPortMgr::ExportPar(ofstream *pFile)
{
(*pFile)<<"<><C4A3>] [CPciPortMgr]------------------------------------------------"<<endl;
for(int i=0;i<m_PciPortCnt;i++)
{
(*pFile)<<"[<5B>˿ں<CBBF>]"<<i<<endl;
(*pFile)<<"[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]"<<m_PciPortVec[i].first<<endl;
(*pFile)<<"[<5B>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>]"<<m_PciPortVec[i].second<<endl;
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD>ı<EFBFBD>ʱ֪ͨ<CDA8><D6AA><EFBFBD>еĹ۲<C4B9><DBB2><EFBFBD>
void CPciPortMgr::OnPropertyChanged()
{
NotifyObservers();
}
#endif
//<2F><><EFBFBD><EFBFBD>out <20>˿ڿ<CBBF><DABF>Կ<EFBFBD><D4BF>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CPciPortMgr::InsertOutCtrlType(CMFCPropertyGridProperty* p)
{
vector<CString>::iterator iter = m_OutPortCtrlType.begin();
vector<CString>::iterator iter_end = m_OutPortCtrlType.end();
for(;iter!=iter_end;iter++)
{
p->AddOption(*iter);
}
}
//<2F><><EFBFBD><EFBFBD>in <20>˿ڿ<CBBF><DABF>Կ<EFBFBD><D4BF>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CPciPortMgr::InsertInCtrlType(CMFCPropertyGridProperty* p)
{
vector<CString>::iterator iter = m_InPortCtrlType.begin();
vector<CString>::iterator iter_end = m_InPortCtrlType.end();
for(;iter!=iter_end;iter++)
{
p->AddOption(*iter);
}
}
//<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD>Ӧ<EFBFBD>Ķ˿ں<CBBF>
SPciPort CPciPortMgr::GetCtrlPort(CString CtrlContent)
{
SPciPort PciPort;
vector<pair<CString,bool>>::iterator iter = m_PciPortVec.begin();
vector<pair<CString,bool>>::iterator iter_end = m_PciPortVec.end();
for(int i=0;iter!=iter_end;iter++,i++)
{
if(CtrlContent == (*iter).first)
{
PciPort.num = i%16;//ע<><D7A2>(<28><><EFBFBD><EFBFBD>8 <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD>0<EFBFBD><30>)
PciPort.bReverse = (*iter).second;
break;
}
}
return PciPort;//û<>ҵ<EFBFBD>
}