| | |
| | | #pragma once |
| | | #pragma once |
| | | #include <string> |
| | | #include <list> |
| | | #include "HsmsAction.h" |
| | |
| | | #include <map> |
| | | #include <set> |
| | | #include "CCollectionEvent.h" |
| | | #include "ProcessJob.h" |
| | | #include "CControlJob.h" |
| | | |
| | | |
| | | #define EQCONSTANT_VALUE_MAX 64 |
| | |
| | | #define CAACK_6 6 /* command performed with errors */ |
| | | |
| | | /* |
| | | * 常量数据结构 |
| | | * 常量数据结构 |
| | | */ |
| | | typedef struct _EQConstant |
| | | { |
| | |
| | | } EQConstant; |
| | | |
| | | /* |
| | | * Command 数据结构 |
| | | * Command 数据结构 |
| | | */ |
| | | typedef struct _CommandParameter |
| | | { |
| | |
| | | } CommandParameter; |
| | | |
| | | /* |
| | | * Report 数据结构 |
| | | * Report 数据结构 |
| | | */ |
| | | typedef struct _REPORT |
| | | { |
| | |
| | | } REPORT; |
| | | |
| | | /* |
| | | * Value 数据结构 |
| | | * Value 数据结构 |
| | | */ |
| | | typedef struct _VALUE |
| | | { |
| | |
| | | const char* pszCarrierId, |
| | | unsigned char PTN, |
| | | std::string& strErrorTxt)> CARRIERACTION; |
| | | typedef std::function<int(void* pFrom, std::vector<SERVO::CProcessJob*>& pjs)> PRJOBMULTICREATE; |
| | | typedef std::function<int(void* pFrom, SERVO::CControlJob& controlJob)> CONTROLJOBCREATE; |
| | | typedef struct _SECSListener |
| | | { |
| | | SECSEQOFFLINE onEQOffLine; |
| | |
| | | EDALARMREPORT onEnableDisableAlarmReport; |
| | | QUERYPPIDLIST onQueryPPIDList; |
| | | CARRIERACTION onCarrierAction; |
| | | PRJOBMULTICREATE onPRJobMultiCreate; |
| | | CONTROLJOBCREATE onControlJobCreate; |
| | | } SECSListener; |
| | | |
| | | |
| | |
| | | ~CHsmsPassive(); |
| | | |
| | | public: |
| | | /* 设置机器型号 最大长度 20 bytes */ |
| | | /* 设置机器型号 最大长度 20 bytes */ |
| | | void setEquipmentModelType(const char* pszMode); |
| | | |
| | | /* 设置软件版本号 最大长度 20 bytes */ |
| | | /* 设置软件版本号 最大长度 20 bytes */ |
| | | void setSoftRev(const char* pszRev); |
| | | |
| | | /* 添加变量值到ISECS2Item */ |
| | | /* 添加变量值到ISECS2Item */ |
| | | void addVariableValueToItem(ISECS2Item* pParent, SERVO::CVariable* pVariable); |
| | | |
| | | // 连接Report |
| | | // 连接Report |
| | | void linkEventReport(unsigned int CEID, unsigned int RPTID); |
| | | |
| | | // 取消连接report |
| | | // 取消连接report |
| | | void unlinkEventReport(unsigned int CEID); |
| | | |
| | | // define Report |
| | | SERVO::CReport* defineReport(unsigned int RPTID, std::vector<unsigned int>& vids); |
| | | |
| | | // 取消 define report |
| | | // 取消 define report |
| | | bool removeReport(int rptid); |
| | | void clearAllReport(); |
| | | int deleteReport(int rptid); |
| | | int addReport(int rptid, const std::vector<unsigned int>& vids); |
| | | int updateReport(int rptid, const std::vector<unsigned int>& vids); |
| | | void clearAllReport(BOOL bSave = FALSE); |
| | | |
| | | // 从文件中加载CVariable列表 |
| | | // 从文件中加载CVariable列表 |
| | | int loadVarialbles(const char* pszFilepath); |
| | | |
| | | // 取得CVariable列表 |
| | | // 取得CVariable列表 |
| | | std::vector<SERVO::CVariable*>& getVariables(); |
| | | unsigned int getMaxVariableId() const; |
| | | |
| | | // 取得指定Variable |
| | | // 取得指定Variable |
| | | SERVO::CVariable* getVariable(int variableId); |
| | | SERVO::CVariable* getVariable(const char* pszName); |
| | | int getCurrentControlState(); |
| | | bool isHostCommandAllowed(); |
| | | int deleteVariable(int variableId); |
| | | int addVariable(const char* pszName, const char* pszFormat, const char* pszRemark, int& outId); |
| | | int updateVariable(int variableId, const char* pszName, const char* pszFormat, const char* pszRemark); |
| | | |
| | | // 设置变量值 |
| | | // 设置变量值 |
| | | void setVariableValue(const char* pszName, __int64 value); |
| | | void setVariableValue(const char* pszName, const char* value); |
| | | void setVariableValue(const char* pszName, std::vector<SERVO::CVariable>& vars); |
| | | // 执行一段持锁的代码块,用于保证 set+send 的原子性 |
| | | void withVariableLock(const std::function<void()>& fn); |
| | | |
| | | // 从文件中加载CReport列表 |
| | | // 从文件中加载CReport列表 |
| | | int loadReports(const char* pszFilepath); |
| | | |
| | | // 取得Report列表 |
| | | // 取得Report列表 |
| | | std::vector<SERVO::CReport*>& getReports(); |
| | | unsigned int getMaxReportId() const; |
| | | |
| | | // 从文件中加载CCollectionEvent列表 |
| | | // 从文件中加载CCollectionEvent列表 |
| | | int loadCollectionEvents(const char* pszFilepath); |
| | | |
| | | // 取得CCollectionEvent列表 |
| | | // 取得CCollectionEvent列表 |
| | | std::vector<SERVO::CCollectionEvent*>& getCollectionEvents(); |
| | | unsigned int getMaxCollectionEventId() const; |
| | | |
| | | // 取消/删除所有CollectionEvent |
| | | // 取消/删除所有CollectionEvent |
| | | void clearAllCollectionEvent(); |
| | | int deleteCollectionEvent(unsigned short CEID); |
| | | int addCollectionEvent(unsigned int CEID, const char* name, const char* desc, const std::vector<unsigned int>& rptids); |
| | | int updateCollectionEvent(unsigned int CEID, const char* name, const char* desc, const std::vector<unsigned int>& rptids); |
| | | |
| | | // 取得CCollectionEvent |
| | | // 取得CCollectionEvent |
| | | SERVO::CCollectionEvent* getEvent(unsigned short CEID); |
| | | |
| | | // 取得Report |
| | | // 取得Report |
| | | SERVO::CReport* getReport(int rptid); |
| | | |
| | | void setListener(SECSListener listener); |
| | |
| | | int unserialize(const char* pszBuffer, int nBufferSize); |
| | | |
| | | public: |
| | | /* request开头的函数为主动发送数据的函数 */ |
| | | /* request开头的函数为主动发送数据的函数 */ |
| | | int requestAreYouThere(); |
| | | int requestAlarmReport(int ALCD, int ALID, const char* ALTX); |
| | | int requestEventReportSend(unsigned int CEID); |
| | | int requestEventReportSend(const char* pszEventName); |
| | | int requestEventReportSend_CarrierID_Readed(); |
| | | int requestEventReportSend_CheckSlotMap(); |
| | | int requestEventReportSend_SlotMapVerificationOK(); |
| | | int requestEventReportSend_SlotMapVerificationNG(); |
| | | int requestEventReportSend_Port_Unload_Ready(); |
| | | int requestEventReportSend_Port_Load_Ready(); |
| | | int requestEventReportSend_Port_Ready_To_Release(); |
| | | int requestEventReportSend_Port_Blocked(); |
| | | int requestEventReportSend_PJ_Queued(); |
| | | int requestEventReportSend_PJ_Start(); |
| | | int requestEventReportSend_PJ_End(); |
| | | int requestEventReportSend_CJ_Start(); |
| | | int requestEventReportSend_CJ_End(); |
| | | int requestEventReportSend_Panel_Start(); |
| | | int requestEventReportSend_Panel_End(); |
| | | 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); |
| | | |
| | | /* reply开头的函数为回复函数 */ |
| | | /* reply开头的函数为回复函数 */ |
| | | int replyAreYouThere(IMessage* pRecv); |
| | | int replyEstablishCommunications(IMessage* pRecv); |
| | | int replySelectedEquipmentStatusData(IMessage* pRecv); |
| | | int replyStatusVariableNamelistRequest(IMessage* pRecv); // S1F11/S1F12 |
| | | int replyCollectionEventNamelistRequest(IMessage* pRecv); // S1F23/S1F24 |
| | | int replyOnLine(IMessage* pRecv); |
| | | int replyOffLine(IMessage* pRecv); |
| | | int replyEquipmentConstantRequest(IMessage* pRecv); |
| | |
| | | int replyPurgeSpooledData(IMessage* pRecv); |
| | | int replyQueryPPIDList(IMessage* pRecv); |
| | | int replyTerminalDisplay(IMessage* pRecv); |
| | | int replyCreateObj(IMessage* pRecv); |
| | | int replyPRJobMultiCreate(IMessage* pRecv); |
| | | |
| | | private: |
| | | inline void Lock() { EnterCriticalSection(&m_criticalSection); } |
| | |
| | | int onRecvMsg(IMessage* pMessage); |
| | | void clearAllVariabel(); |
| | | std::vector<unsigned int> parseVidList(CString& strNums); |
| | | int writeVariablesToFile(const std::string& filepath); |
| | | int writeReportsToFile(const std::string& filepath); |
| | | int writeCollectionEventsToFile(const std::string& filepath); |
| | | |
| | | private: |
| | | CModel* m_pModel; |
| | |
| | | |
| | | private: |
| | | SECSListener m_listener; |
| | | std::string m_strVariableFilepath; |
| | | bool m_bVariableUtf8{ false }; |
| | | bool m_bVariableUtf8Bom{ false }; |
| | | std::string m_strReportFilepath; |
| | | bool m_bReportUtf8{ false }; |
| | | bool m_bReportUtf8Bom{ false }; |
| | | std::string m_strCollectionEventFilepath; |
| | | bool m_bCollectionUtf8{ false }; |
| | | bool m_bCollectionUtf8Bom{ false }; |
| | | BOOL m_bCimWorking; |
| | | HANDLE m_hCimWorkEvent; |
| | | HANDLE m_hCimWorkThreadHandle; |
| | |
| | | // CollectionEvent vector |
| | | std::vector<SERVO::CCollectionEvent*> m_collectionEvents; |
| | | |
| | | // Spooling Config |
| | | std::map<uint16_t, std::set<uint16_t>> m_spoolingConfig; |
| | | }; |
| | | // Spooling blacklist: StreamId -> {FunctionId...} |
| | | // In this map means DO NOT spool/cache. |
| | | // Special case: stream 1 is not spooled regardless of config. |
| | | // If a stream key exists with empty set => blacklist ALL functions in that stream. |
| | | std::map<uint16_t, std::set<uint16_t>> m_spoolBlacklistByStream; |
| | | bool m_spoolingEnabled{ true }; |
| | | |
| | | private: |
| | | bool shouldSpool(uint8_t streamId, uint8_t functionId) const; |
| | | }; |