1.EV_SubEqpStart和EV_SubEqpEnd事件上报
| | |
| | | m_pCollector->batchStop(SlotToMid(eqid, slotNo)); |
| | | } |
| | | } |
| | | |
| | | if (m_listener.onProcessStateChanged != nullptr) { |
| | | m_listener.onProcessStateChanged(this, (CEquipment*)pEquipment, slotNo, state); |
| | | } |
| | | }; |
| | | listener.onMapMismatch = [&](void* pEquipment, short scanMap, short downMap) { |
| | | LOGE("<Master-%s>Port InUse, map(%d!=%d)不一致,请检查。", |
| | |
| | | typedef std::function<void(void* pMaster, CEquipment* pEquipment, int code)> ONEQDATACHANGED; |
| | | typedef std::function<void(void* pMaster, CRobotTask* pTask, int code)> ONROBOTTASKEVENT; |
| | | typedef std::function<void(void* pMaster, CEquipment* pEquipment, short status, __int64 data)> ONLOADPORTSTATUSCHANGED; |
| | | typedef std::function<void(void* pMaster, CEquipment* pEquipment, int slotNo, PROCESS_STATE state)> ONPROCESSSTATECHANGED; |
| | | typedef std::function<void(void* pMaster, int round)> ONCTROUNDEND; |
| | | typedef std::function<void(void* pMaster, void* pj)> ONPJSTART; |
| | | typedef struct _MasterListener |
| | |
| | | ONEQDATACHANGED onEqDataChanged; |
| | | ONROBOTTASKEVENT onRobotTaskEvent; |
| | | ONLOADPORTSTATUSCHANGED onLoadPortStatusChanged; |
| | | ONPROCESSSTATECHANGED onProcessStateChanged; |
| | | ONCTROUNDEND onCTRoundEnd; |
| | | ONPJSTART onCjStart; |
| | | ONPJSTART onCjEnd; |
| | |
| | | void CreateDAQBridgeServer(); |
| | | }; |
| | | } |
| | | |
| | |
| | | return -1; |
| | | } |
| | | |
| | | std::wregex pattern(L"^\\d+,[^,]*,[^,]*,\\(\\d+(,\\d+)*\\).*"); // 匹配以数字+逗号开头的字符串 |
| | | // 允许 Attached RPTID 为空:() |
| | | std::wregex pattern(L"^\\d+,[^,]*,[^,]*,\\(\\d*(,\\d+)*\\).*"); // 匹配以数字+逗号开头的字符串 |
| | | std::vector<SERVO::CCollectionEvent*> events; |
| | | int index, last; |
| | | CStringW strLine, strRPTIDs; |
| | |
| | | } |
| | | |
| | | SERVO::CReport* pReport = pEvent->getFirstReport(); |
| | | if (pReport == nullptr) { |
| | | return ER_UNLINK_EVENT_REPORT; |
| | | } |
| | | |
| | | |
| | | Lock(); |
| | |
| | | // pItem->addU2Item(++DATAID, "DATAID"); // 根据别的日志显示DATAID恒为0,所以我们先照使用0 |
| | | pItem->addU2Item(0, "DATAID"); |
| | | pItem->addU4Item(CEID, "CEID"); |
| | | ISECS2Item* pItemList1 = pItem->addItem(); |
| | | ISECS2Item* pItemList1 = pItem->addItem(); // L[n] reports |
| | | if (pReport != nullptr) { |
| | | ISECS2Item* pItemList2 = pItemList1->addItem(); |
| | | pItemList2->addU4Item(pReport->getReportId(), "RPTID"); |
| | | ISECS2Item* pItemList3 = pItemList2->addItem(); |
| | |
| | | auto vars = pReport->getVariables(); |
| | | for (auto var : vars) { |
| | | addVariableValueToItem(pItemList3, var); |
| | | } |
| | | } |
| | | pAction->setSendMessage(pMessage); |
| | | if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) { |
| | |
| | | return requestEventReportSend("ProcessDataReport"); |
| | | } |
| | | |
| | | int CHsmsPassive::requestEventReportSend_SubEqpStart() |
| | | { |
| | | return requestEventReportSend("SubEqpStart"); |
| | | } |
| | | |
| | | int CHsmsPassive::requestEventReportSend_SubEqpEnd() |
| | | { |
| | | return requestEventReportSend("SubEqpEnd"); |
| | | } |
| | | |
| | | |
| | |
| | | int requestEventReportSend_OCR_PanelID_Read_OK(); |
| | | int requestEventReportSend_LoadPortNotAssoc(); |
| | | int requestEventReportSend_ProcessDataReport(); |
| | | int requestEventReportSend_SubEqpStart(); |
| | | int requestEventReportSend_SubEqpEnd(); |
| | | |
| | | private: |
| | | void replyAck(int s, int f, unsigned int systemBytes, BYTE ack, const char* pszAckName); |
| | |
| | | } |
| | | notifyPtr(RX_CODE_LOADPORT_STATUS_CHANGED, pEquipment); |
| | | }; |
| | | masterListener.onProcessStateChanged = [&](void* pMaster, SERVO::CEquipment* pEquipment, int slotNo, SERVO::PROCESS_STATE state) { |
| | | // SubEqpStart/SubEqpEnd: align to log's EV_SubEqpStart/EV_SubEqpEnd stage (no report payload required). |
| | | (void)pMaster; |
| | | if (pEquipment != nullptr) { |
| | | m_hsmsPassive.setVariableValue("SubEqpName", pEquipment->getName().c_str()); |
| | | } |
| | | m_hsmsPassive.setVariableValue("SubEqpSlot", slotNo); |
| | | if (state == SERVO::PROCESS_STATE::Processing) { |
| | | m_hsmsPassive.requestEventReportSend_SubEqpStart(); |
| | | } |
| | | else if (state == SERVO::PROCESS_STATE::Complete) { |
| | | m_hsmsPassive.requestEventReportSend_SubEqpEnd(); |
| | | } |
| | | }; |
| | | masterListener.onCTRoundEnd = [&](void* pMaster, int round) { |
| | | m_configuration.setContinuousTransferCount(round); |
| | | }; |
| | |
| | | 600,ControlStateChanged,,(600) |
| | | 700,ProcessStateChanged,,(700) |
| | | 10018,ProcessDataReport,,(33) |
| | | 10015,SubEqpStart,,(10015) |
| | | 10016,SubEqpEnd,,(10016) |
| | | 10000,RecipeChanged,,(10000) |
| | | 10030,CarrierArrived,,(10300) |
| | | 10031,CarrierRemoved,,(10300) |
| | |
| | | 50012,(5014) |
| | | 50013,(5015) |
| | | 50014,(5016) |
| | | 10015,(5018,5019) |
| | | 10016,(5018,5019) |
| | |
| | | 5015,ReadyToReleasePortId,U1,"Port ID" |
| | | 5016,LoadPortNotAssocPortId,U1,"Port ID" |
| | | 5017,ProcessDataReportText,A50,EV_PROCESS_DATA_REPORT payload string (placeholder) |
| | | 5018,SubEqpName,A20,Equipment name for EV_SubEqpStart/EV_SubEqpEnd |
| | | 5019,SubEqpSlot,U1,Slot number for EV_SubEqpStart/EV_SubEqpEnd |
| | | 10200,SlotMap,U2,SlotMap(Scan) |
| | | 10201,SlotMapScan,U2,SlotMap(Scan) |
| | | 10202,SlotMapDownload,U2,SlotMap(Download) |