| | |
| | | CEqStatusStep::CEqStatusStep() : CReadStep() |
| | | { |
| | | m_nStatusDev = 0; |
| | | m_nUnitId = 0; |
| | | for (int i = 0; i < STATUS_MAX; i++) { |
| | | m_nStatus[i] = 0; |
| | | m_nReasonCode[i] = 0; |
| | |
| | | |
| | | return -1; |
| | | } |
| | | |
| | | int CEqStatusStep::getReasonCode(unsigned int uint) const |
| | | { |
| | | if (uint < STATUS_MAX) { |
| | | return m_nReasonCode[uint]; |
| | | } |
| | | |
| | | return -1; |
| | | } |
| | | |
| | | unsigned int CEqStatusStep::getUnitId() const |
| | | { |
| | | return m_nUnitId; |
| | | } |
| | | int CEqStatusStep::onReadData() |
| | | { |
| | | CReadStep::onReadData(); |
| | |
| | | return -1; |
| | | } |
| | | |
| | | unsigned int unitId = (unsigned int)CToolUnits::toInt16(&szBuffer[0]); |
| | | const unsigned int unitId = (unsigned int)CToolUnits::toInt16(&szBuffer[0]); |
| | | if (unitId >= STATUS_MAX) { |
| | | return -2; |
| | | } |
| | | m_nUnitId = unitId; |
| | | |
| | | if (unitId == 0) { |
| | | m_nStatus[unitId] = CToolUnits::toInt16(&szBuffer[2 + unitId * 4]); |
| | |
| | | virtual int onComplete(); |
| | | virtual int onTimeout(); |
| | | void setStatusDev(int nDev); |
| | | unsigned int getUnitId() const; |
| | | int getStatus(unsigned int uint); |
| | | int getReasonCode(unsigned int uint) const; |
| | | std::string& getStatusDescription(unsigned int unid, std::string& strDescription); |
| | | |
| | | private: |
| | | int m_nStatusDev; |
| | | unsigned int m_nUnitId; |
| | | int m_nStatus[STATUS_MAX]; |
| | | int m_nReasonCode[STATUS_MAX]; |
| | | }; |
| | |
| | | |
| | | return 1; |
| | | } |
| | | else if (pStep->getName().compare(STEP_STATUS) == 0) { |
| | | SERVO::CEqStatusStep* pEqStatusStep = (SERVO::CEqStatusStep*)pStep; |
| | | if (m_listener.onEqStatusChanged != nullptr) { |
| | | const unsigned int unitId = pEqStatusStep->getUnitId(); |
| | | const int status = pEqStatusStep->getStatus(unitId); |
| | | const int reason = pEqStatusStep->getReasonCode(unitId); |
| | | m_listener.onEqStatusChanged(this, (int)unitId, status, reason); |
| | | } |
| | | return 1; |
| | | } |
| | | else if (isCimMessageConfirmStep(pStep)) { |
| | | SERVO::CEqReadIntStep* pEqReadIntStep = (SERVO::CEqReadIntStep*)pStep; |
| | | int value = pEqReadIntStep->getValue(); |
| | |
| | | typedef std::function<void(void* pEiuipment, const std::vector<CParam>& params)> ONPROCESSDATAREPORT; |
| | | typedef std::function<void(void* pEiuipment, int port, CJobDataS* pJobDataS)> ONRECEIVEDJOB; |
| | | typedef std::function<void(void* pEiuipment, int port, CJobDataS* pJobDataS)> ONSENTOUTJOB; |
| | | typedef std::function<void(void* pEiuipment, int unitId, int status, int reason)> ONEQSTATUSCHANGED; |
| | | |
| | | typedef struct _EquipmentListener |
| | | { |
| | |
| | | ONPROCESSDATAREPORT onProcessDataReport; |
| | | ONRECEIVEDJOB onReceivedJob; |
| | | ONSENTOUTJOB onSentOutJob; |
| | | ONEQSTATUSCHANGED onEqStatusChanged; |
| | | } EquipmentListener; |
| | | |
| | | |
| | |
| | | m_listener.onJobSentOut(this, (CEquipment*)pEquipment, port, pJobDataS); |
| | | } |
| | | }; |
| | | listener.onEqStatusChanged = [&](void* pEquipment, int unitId, int status, int reason) { |
| | | if (m_listener.onEqStatusChanged != nullptr) { |
| | | m_listener.onEqStatusChanged(this, (CEquipment*)pEquipment, unitId, status, reason); |
| | | } |
| | | }; |
| | | pEquipment->setListener(listener); |
| | | pEquipment->setCcLink(&m_cclink); |
| | | m_listEquipment.push_back(pEquipment); |
| | |
| | | typedef std::function<void(void* pMaster, CEquipment* pEquipment, const std::vector<CParam>& params)> ONSVDATAREPORT; |
| | | typedef std::function<void(void* pMaster, CEquipment* pEquipment, int port, CJobDataS* pJobDataS)> ONJOBRECEIVED; |
| | | typedef std::function<void(void* pMaster, CEquipment* pEquipment, int port, CJobDataS* pJobDataS)> ONJOBSENTOUT; |
| | | typedef std::function<void(void* pMaster, CEquipment* pEquipment, int unitId, int status, int reason)> ONEQSTATUSCHANGED; |
| | | typedef std::function<void(void* pMaster, int round)> ONCTROUNDEND; |
| | | typedef std::function<void(void* pMaster, void* pj)> ONPJSTART; |
| | | typedef std::function<void(void* pMaster)> ONCONTROLJOBCHANGED; |
| | |
| | | ONPROCESSDATAREPORTEX onProcessDataReport; |
| | | ONJOBRECEIVED onJobReceived; |
| | | ONJOBSENTOUT onJobSentOut; |
| | | ONEQSTATUSCHANGED onEqStatusChanged; |
| | | ONCTROUNDEND onCTRoundEnd; |
| | | ONPJSTART onCjStart; |
| | | ONPJSTART onCjEnd; |
| | |
| | | |
| | | // SubEqp events (per equipment, ignore slot distinction except payload) |
| | | static std::map<int, SERVO::PROCESS_STATE> s_prevSubEqpState; |
| | | const auto prevEqState = s_prevSubEqpState[eqId]; |
| | | if (prevEqState != state) { |
| | | // state change |
| | | m_hsmsPassive.requestEventReportSend("SubEqpStateChange"); |
| | | } |
| | | if (state == SERVO::PROCESS_STATE::Processing) { |
| | | m_hsmsPassive.requestEventReportSend_SubEqpStart(); |
| | | } |
| | |
| | | } |
| | | }); |
| | | }; |
| | | masterListener.onEqStatusChanged = [&](void* pMaster, SERVO::CEquipment* pEquipment, int unitId, int status, int reason) { |
| | | (void)pMaster; |
| | | if (pEquipment == nullptr) return; |
| | | m_hsmsPassive.withVariableLock([&] { |
| | | m_hsmsPassive.setVariableValue("SubEqpName", pEquipment->getName().c_str()); |
| | | m_hsmsPassive.setVariableValue("SubEqpSlot", unitId); |
| | | m_hsmsPassive.setVariableValue("EquipmentStatus", (__int64)status); |
| | | m_hsmsPassive.requestEventReportSend("SubEqpStateChange"); |
| | | }); |
| | | }; |
| | | masterListener.onSVDataReport = [&](void* pMaster, SERVO::CEquipment* pEquipment, const std::vector<CParam>& params) { |
| | | (void)pMaster; |
| | | const int eqId = pEquipment ? pEquipment->getID() : 0; |
| | |
| | | 67000,(500,5018,5019,6700,6701,6702,6703) |
| | | 10015,(5018,5019) |
| | | 10016,(5018,5019) |
| | | 10017,(500,5018,5019) |
| | | 10017,(500,5018,5019,5024) |
| | | 12000,(500,5018,5019) |
| | | 12001,(500,5018,5019) |
| | | 12002,(500,5018,5019) |
| | |
| | | 5021,PortState,U1,Port transfer/state code for PortStateChange |
| | | 5022,PortId,U1,Unified port ID for all Port events |
| | | 5023,MaterialId,A50,Material/Glass ID for Received/SentOut events |
| | | 5024,EquipmentStatus,U1,Equipment status (SubEqpStateChange): 1=PM;2=Down(BM);3=Pause;4=Idle;5=Run;6=Job Change;7=ETC |
| | | |