| .gitignore | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CEqAlarmStep.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CEqModeStep.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CEqStatusStep.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CEquipment.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CMaster.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CMaster.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CStep.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CStep.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/Model.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
.gitignore
@@ -48,3 +48,4 @@ *.iom SourceCode/Bond/BoounionPLC/BoounionPLC.vcxproj.user SourceCode/Bond/x64/Debug/ServoConfiguration.ini *.iobj SourceCode/Bond/Servo/CEqAlarmStep.cpp
@@ -26,18 +26,19 @@ char szBuffer[64]; int nRet = m_pCclink->ReadData2(m_station, DeviceType::W, m_nAlarmDev, 64, szBuffer); if (0 == nRet) { m_nAlarmState = (unsigned int)CToolUnits::toInt16(&szBuffer[0]); m_nUnitId = (unsigned int)CToolUnits::toInt16(&szBuffer[2]); m_nAlarmId = (unsigned int)CToolUnits::toInt16(&szBuffer[4]); m_nAlarmCode = (unsigned int)CToolUnits::toInt16(&szBuffer[6]); m_nAlarmLevel = (unsigned int)CToolUnits::toInt16(&szBuffer[8]); LOGI("<CEqAlarmStep> Equipment Alarm state Changed<State:%d, Unit:%d, Level:%d, Code:%d, ID:%d>\n", m_nAlarmState, m_nUnitId, m_nAlarmLevel, m_nAlarmCode, m_nAlarmId, m_strText.c_str(), m_strDescription.c_str()); if (0 != nRet) { return -1; } m_nAlarmState = (unsigned int)CToolUnits::toInt16(&szBuffer[0]); m_nUnitId = (unsigned int)CToolUnits::toInt16(&szBuffer[2]); m_nAlarmId = (unsigned int)CToolUnits::toInt16(&szBuffer[4]); m_nAlarmCode = (unsigned int)CToolUnits::toInt16(&szBuffer[6]); m_nAlarmLevel = (unsigned int)CToolUnits::toInt16(&szBuffer[8]); LOGI("<CEqAlarmStep> Equipment Alarm state Changed<State:%d, Unit:%d, Level:%d, Code:%d, ID:%d>\n", m_nAlarmState, m_nUnitId, m_nAlarmLevel, m_nAlarmCode, m_nAlarmId, m_strText.c_str(), m_strDescription.c_str()); return 0; } SourceCode/Bond/Servo/CEqModeStep.cpp
@@ -20,14 +20,17 @@ CStep::onReadData(); DWordContainer dc; if (0 == m_pCclink->ReadDWordData(m_station, DeviceType::W, m_nModeDev, 1, dc) && dc.size() >= 1) { m_nMode = dc.at(0); std::string strTemp; LOGI("<CEqModeStep> Equipment Mode Changed<%s>\n", getModeDescription(strTemp).c_str()); if (0 != m_pCclink->ReadDWordData(m_station, DeviceType::W, m_nModeDev, 1, dc)) { return -2; } if (dc.size() < 1) { return -2; } m_nMode = dc.at(0); std::string strTemp; LOGI("<CEqModeStep> Equipment Mode Changed<%s>\n", getModeDescription(strTemp).c_str()); return 0; } SourceCode/Bond/Servo/CEqStatusStep.cpp
@@ -28,28 +28,28 @@ char szBuffer[64]; int nRet = m_pCclink->ReadData2(m_station, DeviceType::W, m_nStatusDev, 64, szBuffer); if (0 == nRet) { unsigned int unitId = (unsigned int)CToolUnits::toInt16(&szBuffer[0]); if (unitId < STATUS_MAX) { if (unitId == 0) { m_nStatus[unitId] = CToolUnits::toInt16(&szBuffer[2 + unitId * 4]); m_nReasonCode[unitId] = CToolUnits::toInt16(&szBuffer[2 + unitId * 4 + 2]); } else { m_nStatus[unitId] = CToolUnits::toInt16(&szBuffer[2 + 3 * 2 + unitId * 4]); m_nReasonCode[unitId] = CToolUnits::toInt16(&szBuffer[2 + 3 * 2 + unitId * 4 + 2]); } for (int i = 0; i < 64; i++) { TRACE("bbb %d, %x\n", i, szBuffer[i]); } TRACE("cccc %d %d %d\n", unitId, m_nStatus[unitId], m_nReasonCode[unitId]); std::string strTemp; LOGI("<CEqStatusStep> Equipment Status Changed<Unit:%d, %s, ReasonCode=%d>\n", unitId, getStatusDescription(unitId, strTemp).c_str(), m_nReasonCode[unitId]); } if (0 != nRet) { return -1; } unsigned int unitId = (unsigned int)CToolUnits::toInt16(&szBuffer[0]); if (unitId >= STATUS_MAX) { return -2; } if (unitId == 0) { m_nStatus[unitId] = CToolUnits::toInt16(&szBuffer[2 + unitId * 4]); m_nReasonCode[unitId] = CToolUnits::toInt16(&szBuffer[2 + unitId * 4 + 2]); } else { m_nStatus[unitId] = CToolUnits::toInt16(&szBuffer[2 + 3 * 2 + unitId * 4]); m_nReasonCode[unitId] = CToolUnits::toInt16(&szBuffer[2 + 3 * 2 + unitId * 4 + 2]); } std::string strTemp; LOGI("<CEqStatusStep> Equipment Status Changed<Unit:%d, %s, ReasonCode=%d>\n", unitId, getStatusDescription(unitId, strTemp).c_str(), m_nReasonCode[unitId]); return 0; } SourceCode/Bond/Servo/CEquipment.cpp
@@ -60,6 +60,7 @@ { auto iter = m_mapStep.find(addr); if (iter != m_mapStep.end()) return -1; pStep->setEquipment(this); pStep->setCcLink(m_pCclink); m_mapStep[addr] = pStep; return 0; SourceCode/Bond/Servo/CMaster.cpp
@@ -13,7 +13,7 @@ CMaster::CMaster() { m_listener = {nullptr, nullptr}; m_listener = {nullptr, nullptr, nullptr}; } CMaster::~CMaster() @@ -28,11 +28,21 @@ { m_listener.onEqAlive = listener.onEqAlive; m_listener.onEqCimStateChanged = listener.onEqCimStateChanged; m_listener.onEqStepEvent = listener.onEqStepEvent; } int CMaster::init() { LOGI("<Master>正在初始化..."); StepListener listener; listener.onEvent = [&](void* pStep, int code, void* pData) -> void { TRACE("<CEquipment>onEvent<%d, 0x%x>.\n", code, pData); if (m_listener.onEqStepEvent != nullptr) { m_listener.onEqStepEvent(this, (CStep*)pStep, code, pData); } }; // cclink @@ -62,78 +72,8 @@ // 初始化添加各子设备 { CEFEM* pEquipment = new CEFEM(); pEquipment->setID(EQ_ID_EFEM); pEquipment->setName("EFEM(ROBOT)"); pEquipment->setDescription("EFEM(ROBOT)."); pEquipment->setReadBitBlock(0x4000, 0x45ff); pEquipment->setStation(0, 255); addEquipment(pEquipment); addEFEM(listener); // 添加 step { CEqModeStep* pStep = new CEqModeStep(); pStep->setWriteSignalDev(0x30); pStep->setModeDev(0x4a8c); if (pEquipment->addStep(0x360, pStep) != 0) { delete pStep; } } { CEqStatusStep* pStep = new CEqStatusStep(); pStep->setWriteSignalDev(0x31); pStep->setStatusDev(0x4a68); if (pEquipment->addStep(0x361, pStep) != 0) { delete pStep; } } { CEqAlarmStep* pStep = new CEqAlarmStep(); pStep->setWriteSignalDev(0x32); pStep->setAlarmDev(0x4c1d); if (pEquipment->addStep(0x362, pStep) != 0) { delete pStep; } } { CEqAlarmStep* pStep = new CEqAlarmStep(); pStep->setWriteSignalDev(0x33); pStep->setAlarmDev(0x4c4a); if (pEquipment->addStep(0x363, pStep) != 0) { delete pStep; } } { CEqAlarmStep* pStep = new CEqAlarmStep(); pStep->setWriteSignalDev(0x34); pStep->setAlarmDev(0x4c77); if (pEquipment->addStep(0x364, pStep) != 0) { delete pStep; } } { CEqAlarmStep* pStep = new CEqAlarmStep(); pStep->setWriteSignalDev(0x35); pStep->setAlarmDev(0x4ca4); if (pEquipment->addStep(0x365, pStep) != 0) { delete pStep; } } { CEqAlarmStep* pStep = new CEqAlarmStep(); pStep->setWriteSignalDev(0x36); pStep->setAlarmDev(0x4cd1); if (pEquipment->addStep(0x366, pStep) != 0) { delete pStep; } } pEquipment->init(); LOGE("已添加“EFEM(ROBOT)”."); } /* { CBonder* pBonder = new CBonder(); @@ -196,6 +136,95 @@ return nullptr; } int CMaster::addEFEM(StepListener& listener) { CEFEM* pEquipment = new CEFEM(); pEquipment->setID(EQ_ID_EFEM); pEquipment->setName("EFEM(ROBOT)"); pEquipment->setDescription("EFEM(ROBOT)."); pEquipment->setReadBitBlock(0x4000, 0x45ff); pEquipment->setStation(0, 255); addEquipment(pEquipment); // 添加 step { CEqModeStep* pStep = new CEqModeStep(); pStep->setName("EQMode"); pStep->setListener(listener); pStep->setWriteSignalDev(0x30); pStep->setModeDev(0x4a8c); if (pEquipment->addStep(0x360, pStep) != 0) { delete pStep; } } { CEqStatusStep* pStep = new CEqStatusStep(); pStep->setName("EQStatus"); pStep->setListener(listener); pStep->setWriteSignalDev(0x31); pStep->setStatusDev(0x4a68); if (pEquipment->addStep(0x361, pStep) != 0) { delete pStep; } } { CEqAlarmStep* pStep = new CEqAlarmStep(); pStep->setName("EQAlarm1"); pStep->setListener(listener); pStep->setWriteSignalDev(0x32); pStep->setAlarmDev(0x4c1d); if (pEquipment->addStep(0x362, pStep) != 0) { delete pStep; } } { CEqAlarmStep* pStep = new CEqAlarmStep(); pStep->setName("EQAlarm2"); pStep->setListener(listener); pStep->setWriteSignalDev(0x33); pStep->setAlarmDev(0x4c4a); if (pEquipment->addStep(0x363, pStep) != 0) { delete pStep; } } { CEqAlarmStep* pStep = new CEqAlarmStep(); pStep->setName("EQAlarm3"); pStep->setListener(listener); pStep->setWriteSignalDev(0x34); pStep->setAlarmDev(0x4c77); if (pEquipment->addStep(0x364, pStep) != 0) { delete pStep; } } { CEqAlarmStep* pStep = new CEqAlarmStep(); pStep->setName("EQAlarm4"); pStep->setListener(listener); pStep->setWriteSignalDev(0x35); pStep->setAlarmDev(0x4ca4); if (pEquipment->addStep(0x365, pStep) != 0) { delete pStep; } } { CEqAlarmStep* pStep = new CEqAlarmStep(); pStep->setName("EQAlarm5"); pStep->setListener(listener); pStep->setWriteSignalDev(0x36); pStep->setAlarmDev(0x4cd1); if (pEquipment->addStep(0x366, pStep) != 0) { delete pStep; } } pEquipment->init(); LOGE("已添加“EFEM(ROBOT)”."); return 0; } void CMaster::onTimer(UINT nTimerid) { for (auto item : m_listEquipment) { SourceCode/Bond/Servo/CMaster.h
@@ -8,10 +8,12 @@ namespace SERVO { typedef std::function<void(void* pMaster, CEquipment* pEiuipment, BOOL bAlive)> ONEQALIVE; typedef std::function<void(void* pEiuipment, CStep* pStep, int code, void* pData)> ONEQSTEPEVENT; typedef struct _MasterListener { ONEQALIVE onEqAlive; ONEQALIVE onEqCimStateChanged; ONEQSTEPEVENT onEqStepEvent; } MasterListener; class CMaster @@ -30,6 +32,7 @@ private: int addEquipment(CEquipment* pEquipment); int addEFEM(StepListener& listener); private: MasterListener m_listener; SourceCode/Bond/Servo/CStep.cpp
@@ -13,6 +13,7 @@ CStep::CStep() { m_listener = {nullptr}; m_nWordThreadAddr = 0; m_hWorkStop = nullptr; m_hWorkThreadHandle = nullptr; @@ -37,9 +38,34 @@ DeleteCriticalSection(&m_criticalSection); } void CStep::setListener(StepListener listener) { m_listener.onEvent = listener.onEvent; } void CStep::setCcLink(CCCLinkIEControl* pCcLink) { m_pCclink = pCcLink; } void CStep::setEquipment(CEquipment* pEquipment) { m_pEquipment = pEquipment; } CEquipment* CStep::getEquipment() { return m_pEquipment; } void CStep::setName(const char* pszName) { m_strName = pszName; } std::string& CStep::getName() { return m_strName; } void CStep::setWriteSignalDev(int dev) @@ -92,8 +118,11 @@ // 1.读取数据 nextStep(); ASSERT(m_pCclink); onReadData(); if (0 == onReadData()) { if (m_listener.onEvent != nullptr) { m_listener.onEvent(this, STEP_EVENT_READDATA, nullptr); } } // 2.给对方写ON nextStep(); @@ -118,7 +147,11 @@ // 6.完成 nextStep(); onComplete(); if (0 == onComplete()) { if (m_listener.onEvent != nullptr) { m_listener.onEvent(this, STEP_EVENT_COMPLETE, nullptr); } } } } SourceCode/Bond/Servo/CStep.h
@@ -3,6 +3,16 @@ namespace SERVO { #define STEP_EVENT_READDATA 0x01 #define STEP_EVENT_COMPLETE 0x02 typedef std::function<void(void* pStep, int code, void* pData)> ONSTEPEVENT; typedef struct _StepListener { ONSTEPEVENT onEvent; } StepListener; class CEquipment; class CStep { public: @@ -11,7 +21,12 @@ public: unsigned WorkingProc(); void setListener(StepListener listener); void setCcLink(CCCLinkIEControl* pCcLink); void setEquipment(CEquipment* pEquipment); CEquipment* getEquipment(); void setName(const char* pszName); std::string& getName(); virtual void setWriteSignalDev(int dev); virtual void init(); virtual void CStep::term(); @@ -27,7 +42,10 @@ inline void resetStep(); protected: StepListener m_listener; StationIdentifier m_station; std::string m_strName; CEquipment* m_pEquipment; CCCLinkIEControl* m_pCclink; CRITICAL_SECTION m_criticalSection; std::string strName; SourceCode/Bond/Servo/Model.cpp
@@ -101,6 +101,14 @@ bOn ? _T("ON") : _T("OFF")); }; masterListener.onEqStepEvent = [&](void* pEquipment, SERVO::CStep* pStep, int code, void* pData) -> void { SERVO::CEquipment* p = (SERVO::CEquipment*)pEquipment; if (code == STEP_EVENT_READDATA) { LOGI("<CModel>onEqStepEvent,数据变化:%s(%s, 0x%x).\n", pStep->getEquipment()->getName().c_str(), pStep->getName().c_str(), pData); } }; m_master.setListener(masterListener); return 0;