| | |
| | | CMaster::CMaster() |
| | | { |
| | | m_listener = {nullptr, nullptr, nullptr}; |
| | | m_bDataModify = FALSE; |
| | | } |
| | | |
| | | CMaster::~CMaster() |
| | |
| | | addBakeCooling(listener); |
| | | connectEquipments(); |
| | | |
| | | |
| | | // 读缓存数据 |
| | | readCache(); |
| | | |
| | | |
| | | // 定时器 |
| | | g_pMaster = this; |
| | |
| | | for (auto item : m_listEquipment) { |
| | | item->term(); |
| | | } |
| | | saveCache(); |
| | | |
| | | |
| | | return 0; |
| | | } |
| | |
| | | m_listener.onEqCimStateChanged(this, p, bOn); |
| | | } |
| | | }; |
| | | listener.onDataChanged = [&](void* pEquipment, int code) -> void { |
| | | m_bDataModify = TRUE; |
| | | }; |
| | | |
| | | pEquipment->setListener(listener); |
| | | pEquipment->setCcLink(&m_cclink); |
| | | m_listEquipment.push_back(pEquipment); |
| | |
| | | } |
| | | } |
| | | |
| | | // Port1 |
| | | { |
| | | CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d1f); |
| | | pStep->setName(STEP_EQ_PORT1_TYPE); |
| | | pStep->setListener(listener); |
| | | pStep->setWriteSignalDev(0x80); |
| | | if (pEquipment->addStep(0x3e0, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | { |
| | | CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d20); |
| | | pStep->setName(STEP_EQ_PORT1_MODE); |
| | | pStep->setListener(listener); |
| | | pStep->setWriteSignalDev(0x88); |
| | | if (pEquipment->addStep(0x3e8, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | { |
| | | CEqReadIntStep* pStep = new CEqReadIntStep(__INT32, 0x4d21); |
| | | pStep->setName(STEP_EQ_PORT1_CASSETTE_TYPE); |
| | | pStep->setListener(listener); |
| | | pStep->setWriteSignalDev(0x90); |
| | | if (pEquipment->addStep(0x3f0, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | { |
| | | CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d23); |
| | | pStep->setName(STEP_EQ_PORT1_TRANSFER_MODE); |
| | | pStep->setListener(listener); |
| | | pStep->setWriteSignalDev(0x98); |
| | | if (pEquipment->addStep(0x3f8, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | { |
| | | CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d24); |
| | | pStep->setName(STEP_EQ_PORT1_ENABLE); |
| | | pStep->setListener(listener); |
| | | pStep->setWriteSignalDev(0xa0); |
| | | if (pEquipment->addStep(0x400, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | { |
| | | CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d25); |
| | | pStep->setName(STEP_EQ_PORT1_TYPE_ATUO); |
| | | pStep->setListener(listener); |
| | | pStep->setWriteSignalDev(0xa8); |
| | | if (pEquipment->addStep(0x408, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | |
| | | // Port2 |
| | | { |
| | | CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d2f); |
| | | pStep->setName(STEP_EQ_PORT2_TYPE); |
| | | pStep->setListener(listener); |
| | | pStep->setWriteSignalDev(0x81); |
| | | if (pEquipment->addStep(0x3e1, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | { |
| | | CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d30); |
| | | pStep->setName(STEP_EQ_PORT2_MODE); |
| | | pStep->setListener(listener); |
| | | pStep->setWriteSignalDev(0x89); |
| | | if (pEquipment->addStep(0x3e9, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | { |
| | | CEqReadIntStep* pStep = new CEqReadIntStep(__INT32, 0x4d31); |
| | | pStep->setName(STEP_EQ_PORT2_CASSETTE_TYPE); |
| | | pStep->setListener(listener); |
| | | pStep->setWriteSignalDev(0x91); |
| | | if (pEquipment->addStep(0x3f1, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | { |
| | | CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d33); |
| | | pStep->setName(STEP_EQ_PORT2_TRANSFER_MODE); |
| | | pStep->setListener(listener); |
| | | pStep->setWriteSignalDev(0x99); |
| | | if (pEquipment->addStep(0x3f9, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | { |
| | | CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d34); |
| | | pStep->setName(STEP_EQ_PORT2_ENABLE); |
| | | pStep->setListener(listener); |
| | | pStep->setWriteSignalDev(0xa1); |
| | | if (pEquipment->addStep(0x401, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | { |
| | | CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d35); |
| | | pStep->setName(STEP_EQ_PORT2_TYPE_ATUO); |
| | | pStep->setListener(listener); |
| | | pStep->setWriteSignalDev(0xa9); |
| | | if (pEquipment->addStep(0x409, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | |
| | | // Port3 |
| | | { |
| | | CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d3f); |
| | | pStep->setName(STEP_EQ_PORT3_TYPE); |
| | | pStep->setListener(listener); |
| | | pStep->setWriteSignalDev(0x82); |
| | | if (pEquipment->addStep(0x3e2, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | { |
| | | CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d40); |
| | | pStep->setName(STEP_EQ_PORT3_MODE); |
| | | pStep->setListener(listener); |
| | | pStep->setWriteSignalDev(0x8a); |
| | | if (pEquipment->addStep(0x3ea, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | { |
| | | CEqReadIntStep* pStep = new CEqReadIntStep(__INT32, 0x4d41); |
| | | pStep->setName(STEP_EQ_PORT3_CASSETTE_TYPE); |
| | | pStep->setListener(listener); |
| | | pStep->setWriteSignalDev(0x92); |
| | | if (pEquipment->addStep(0x3f2, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | { |
| | | CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d43); |
| | | pStep->setName(STEP_EQ_PORT3_TRANSFER_MODE); |
| | | pStep->setListener(listener); |
| | | pStep->setWriteSignalDev(0x9a); |
| | | if (pEquipment->addStep(0x3fa, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | { |
| | | CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d44); |
| | | pStep->setName(STEP_EQ_PORT3_ENABLE); |
| | | pStep->setListener(listener); |
| | | pStep->setWriteSignalDev(0xa2); |
| | | if (pEquipment->addStep(0x402, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | { |
| | | CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d45); |
| | | pStep->setName(STEP_EQ_PORT3_TYPE_ATUO); |
| | | pStep->setListener(listener); |
| | | pStep->setWriteSignalDev(0xaa); |
| | | if (pEquipment->addStep(0x40a, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | |
| | | // Port4 |
| | | { |
| | | CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d4f); |
| | | pStep->setName(STEP_EQ_PORT4_TYPE); |
| | | pStep->setListener(listener); |
| | | pStep->setWriteSignalDev(0x83); |
| | | if (pEquipment->addStep(0x3e3, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | { |
| | | CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d50); |
| | | pStep->setName(STEP_EQ_PORT4_MODE); |
| | | pStep->setListener(listener); |
| | | pStep->setWriteSignalDev(0x8b); |
| | | if (pEquipment->addStep(0x3eb, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | { |
| | | CEqReadIntStep* pStep = new CEqReadIntStep(__INT32, 0x4d51); |
| | | pStep->setName(STEP_EQ_PORT4_CASSETTE_TYPE); |
| | | pStep->setListener(listener); |
| | | pStep->setWriteSignalDev(0x93); |
| | | if (pEquipment->addStep(0x3f3, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | { |
| | | CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d53); |
| | | pStep->setName(STEP_EQ_PORT4_TRANSFER_MODE); |
| | | pStep->setListener(listener); |
| | | pStep->setWriteSignalDev(0x9b); |
| | | if (pEquipment->addStep(0x3fb, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | { |
| | | CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d54); |
| | | pStep->setName(STEP_EQ_PORT4_ENABLE); |
| | | pStep->setListener(listener); |
| | | pStep->setWriteSignalDev(0xa3); |
| | | if (pEquipment->addStep(0x403, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | { |
| | | CEqReadIntStep* pStep = new CEqReadIntStep(__INT16, 0x4d55); |
| | | pStep->setName(STEP_EQ_PORT4_TYPE_ATUO); |
| | | pStep->setListener(listener); |
| | | pStep->setWriteSignalDev(0xab); |
| | | if (pEquipment->addStep(0x40b, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | |
| | | pEquipment->init(); |
| | | LOGE("已添加“EFEM(ROBOT)”."); |
| | | return 0; |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | // 自动保存缓存 |
| | | if (i % (4 * 2) == 0) { |
| | | if (m_bDataModify) { |
| | | saveCacheAndBackups(); |
| | | m_bDataModify = FALSE; |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | void CMaster::connectEquipments() |
| | |
| | | LOGE("连接BakeCooling-LoadPort4失败"); |
| | | } |
| | | } |
| | | |
| | | int CMaster::saveCache() |
| | | { |
| | | CFile file; |
| | | if (!file.Open(m_strFilepath.c_str(), CFile::modeCreate | CFile::modeWrite)) { |
| | | return -1; |
| | | } |
| | | |
| | | CArchive ar(&file, CArchive::store); |
| | | serialize(ar); |
| | | ar.Close(); |
| | | file.Close(); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CMaster::saveCacheAndBackups() |
| | | { |
| | | saveCache(); |
| | | |
| | | |
| | | // 创建备份目录 |
| | | CString strNewFile; |
| | | CString strFileDir = m_strFilepath.c_str(); |
| | | int index = strFileDir.ReverseFind('\\'); |
| | | ASSERT(index > 0); |
| | | strFileDir = strFileDir.Left(index); |
| | | strFileDir = strFileDir + _T("Backups"); |
| | | ::CreateDirectory(strFileDir, nullptr); |
| | | |
| | | CTime time = CTime::GetCurrentTime(); |
| | | strNewFile.Format(_T("%s//Master_%d_%02d_%02d_%02d_%02d_%02d.dat"), |
| | | (LPTSTR)(LPCTSTR)strFileDir, |
| | | time.GetYear(), time.GetMonth(), time.GetDay(), |
| | | time.GetHour(), time.GetMinute(), time.GetSecond()); |
| | | ::CopyFile(m_strFilepath.c_str(), strNewFile, FALSE); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | void CMaster::setCacheFilepath(const char* pszFilepath) |
| | | { |
| | | m_strFilepath = pszFilepath; |
| | | } |
| | | |
| | | int CMaster::readCache() |
| | | { |
| | | CFile file; |
| | | if (!file.Open(m_strFilepath.c_str(), CFile::modeRead)) { |
| | | return -1; |
| | | } |
| | | |
| | | CArchive ar(&file, CArchive::load); |
| | | serialize(ar); |
| | | ar.Close(); |
| | | file.Close(); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | void CMaster::serialize(CArchive& ar) |
| | | { |
| | | for (auto item : m_listEquipment) { |
| | | item->serialize(ar); |
| | | } |
| | | } |
| | | } |