| | |
| | | } |
| | | } |
| | | |
| | | // FAC Data Report |
| | | addFacDataReportStep(0x12589, 0x94d, 1); |
| | | /* |
| | | { |
| | | CEqReadStep* pStep = new CEqReadStep(0x12589, 133 * 2, |
| | | [&](void* pFrom, int code, const char* pszData, size_t size) -> int { |
| | | if (code == ROK && pszData != nullptr && size > 0) { |
| | | decodeFacDataReport((CStep*)pFrom, pszData, size); |
| | | } |
| | | return -1; |
| | | }); |
| | | pStep->setName(STEP_EQ_FAC_DATA_REPORT); |
| | | pStep->setProp("Port", (void*)1); |
| | | pStep->setWriteSignalDev(0x94d); |
| | | if (addStep(STEP_ID_FAC_DATA_REPORT, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | */ |
| | | |
| | | // process start/end report |
| | | { |
| | | CEqReadStep* pStep = new CEqReadStep(0x11D3F, 13 * 2, |
| | |
| | | return (int)params.size(); |
| | | } |
| | | |
| | | int CBakeCooling::parsingProcessData(const char* pszData, size_t size, std::vector<CParam>& params) |
| | | { |
| | | return parsingParams(pszData, size, params); |
| | | } |
| | | |
| | | int CBakeCooling::parsingSVData(const char* pszData, size_t size, std::vector<CParam>& params) |
| | | { |
| | | /* |
| | | 1 Açç¤å·¥èºè¿è¡æ¥éª¤ 1Word 123456 |
| | | 2 Açç¤æ¸©æ§è¡¨1å½åå¼ 2Word 12345.6 |
| | | 3 Açç¤æ¸©æ§è¡¨2å½åå¼ 2Word 12345.6 |
| | | 4 Açç¤æ¸©æ§è¡¨4å½åå¼ 2Word 12345.6 |
| | | 5 Açç¤æ¸©æ§è¡¨5å½åå¼ 2Word 12345.6 |
| | | 6 Açç¤æ¸©æ§è¡¨6å½åå¼ 2Word 12345.6 |
| | | 7 Açç¤æ¸©æ§è¡¨7å½åå¼ 2Word 12345.6 |
| | | 8 Açç¤å©ä½æ¶é´ 1Word 1234.56 |
| | | 9 Aå·å´å·¥èºè¿è¡æ¥éª¤ 1Word 123456 |
| | | 10 Aè
å·å´å©ä½æ¶é´ 1Word 1234.56 |
| | | 11 Bçç¤å·¥èºè¿è¡æ¥éª¤ 1Word 123456 |
| | | 12 Bçç¤æ¸©æ§è¡¨1å½åå¼ 2Word 12345.6 |
| | | 13 Bçç¤æ¸©æ§è¡¨2å½åå¼ 2Word 12345.6 |
| | | 14 Bçç¤æ¸©æ§è¡¨4å½åå¼ 2Word 12345.6 |
| | | 15 Bçç¤æ¸©æ§è¡¨5å½åå¼ 2Word 12345.6 |
| | | 16 Bçç¤æ¸©æ§è¡¨6å½åå¼ 2Word 12345.6 |
| | | 17 Bçç¤æ¸©æ§è¡¨7å½åå¼ 2Word 12345.6 |
| | | 18 Bçç¤å©ä½æ¶é´ 1Word 1234.56 |
| | | 19 Bå·å´å·¥èºè¿è¡æ¥éª¤ 1Word 123456 |
| | | 20 Bè
å·å´å©ä½æ¶é´ 1Word 1234.56 |
| | | */ |
| | | |
| | | ASSERT(pszData); |
| | | if (size < 125) return 0; |
| | | int i = 0, v; |
| | | |
| | | |
| | | // 1.Açç¤å·¥èºè¿è¡æ¥éª¤ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8; |
| | | params.push_back(CParam("Açç¤å·¥èºè¿è¡æ¥éª¤", "", this->getName().c_str(), v)); |
| | | i += 2; |
| | | |
| | | // 2.Açç¤æ¸©æ§è¡¨1å½åå¼ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8 | (pszData[i + 2] & 0xff) << 16 | (pszData[i + 3] & 0xff) << 24; |
| | | params.push_back(CParam("Açç¤æ¸©æ§è¡¨1å½åå¼", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 4; |
| | | |
| | | // 3.Açç¤æ¸©æ§è¡¨2å½åå¼ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8 | (pszData[i + 2] & 0xff) << 16 | (pszData[i + 3] & 0xff) << 24; |
| | | params.push_back(CParam("Açç¤æ¸©æ§è¡¨2å½åå¼", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 4; |
| | | |
| | | // 4.Açç¤æ¸©æ§è¡¨4å½åå¼ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8 | (pszData[i + 2] & 0xff) << 16 | (pszData[i + 3] & 0xff) << 24; |
| | | params.push_back(CParam("Açç¤æ¸©æ§è¡¨4å½åå¼", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 4; |
| | | |
| | | // 5.Açç¤æ¸©æ§è¡¨5å½åå¼ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8 | (pszData[i + 2] & 0xff) << 16 | (pszData[i + 3] & 0xff) << 24; |
| | | params.push_back(CParam("Açç¤æ¸©æ§è¡¨5å½åå¼", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 4; |
| | | |
| | | // 6.Açç¤æ¸©æ§è¡¨6å½åå¼ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8 | (pszData[i + 2] & 0xff) << 16 | (pszData[i + 3] & 0xff) << 24; |
| | | params.push_back(CParam("Açç¤æ¸©æ§è¡¨6å½åå¼", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 4; |
| | | |
| | | // 7.Açç¤æ¸©æ§è¡¨7å½åå¼ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8 | (pszData[i + 2] & 0xff) << 16 | (pszData[i + 3] & 0xff) << 24; |
| | | params.push_back(CParam("Açç¤æ¸©æ§è¡¨7å½åå¼", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 4; |
| | | |
| | | // 8.Açç¤å©ä½æ¶é´ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8; |
| | | params.push_back(CParam("Açç¤å©ä½æ¶é´", "", this->getName().c_str(), v * 0.01f)); |
| | | i += 2; |
| | | |
| | | // 9.Aå·å´å·¥èºè¿è¡æ¥éª¤ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8; |
| | | params.push_back(CParam("Aå·å´å·¥èºè¿è¡æ¥éª¤", "", this->getName().c_str(), v)); |
| | | i += 2; |
| | | |
| | | // 10.Aè
å·å´å©ä½æ¶é´ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8; |
| | | params.push_back(CParam("Aè
å·å´å©ä½æ¶é´", "", this->getName().c_str(), v * 0.01f)); |
| | | i += 2; |
| | | |
| | | // 11.Bçç¤å·¥èºè¿è¡æ¥éª¤ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8; |
| | | params.push_back(CParam("Bçç¤å·¥èºè¿è¡æ¥éª¤", "", this->getName().c_str(), v)); |
| | | i += 2; |
| | | |
| | | // 12.Bçç¤æ¸©æ§è¡¨1å½åå¼ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8 | (pszData[i + 2] & 0xff) << 16 | (pszData[i + 3] & 0xff) << 24; |
| | | params.push_back(CParam("Bçç¤æ¸©æ§è¡¨1å½åå¼", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 4; |
| | | |
| | | // 13.Bçç¤æ¸©æ§è¡¨2å½åå¼ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8 | (pszData[i + 2] & 0xff) << 16 | (pszData[i + 3] & 0xff) << 24; |
| | | params.push_back(CParam("Bçç¤æ¸©æ§è¡¨2å½åå¼", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 4; |
| | | |
| | | // 14.Bçç¤æ¸©æ§è¡¨4å½åå¼ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8 | (pszData[i + 2] & 0xff) << 16 | (pszData[i + 3] & 0xff) << 24; |
| | | params.push_back(CParam("Bçç¤æ¸©æ§è¡¨4å½åå¼", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 4; |
| | | |
| | | // 15.Bçç¤æ¸©æ§è¡¨5å½åå¼ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8 | (pszData[i + 2] & 0xff) << 16 | (pszData[i + 3] & 0xff) << 24; |
| | | params.push_back(CParam("Bçç¤æ¸©æ§è¡¨5å½åå¼", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 4; |
| | | |
| | | // 16.Bçç¤æ¸©æ§è¡¨6å½åå¼ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8 | (pszData[i + 2] & 0xff) << 16 | (pszData[i + 3] & 0xff) << 24; |
| | | params.push_back(CParam("Bçç¤æ¸©æ§è¡¨6å½åå¼", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 4; |
| | | |
| | | // 17.Bçç¤æ¸©æ§è¡¨7å½åå¼ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8 | (pszData[i + 2] & 0xff) << 16 | (pszData[i + 3] & 0xff) << 24; |
| | | params.push_back(CParam("Bçç¤æ¸©æ§è¡¨7å½åå¼", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 4; |
| | | |
| | | // 18.Bçç¤å©ä½æ¶é´ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8; |
| | | params.push_back(CParam("Bçç¤å©ä½æ¶é´", "", this->getName().c_str(), v * 0.01f)); |
| | | i += 2; |
| | | |
| | | // 19.Bå·å´å·¥èºè¿è¡æ¥éª¤ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8; |
| | | params.push_back(CParam("Bå·å´å·¥èºè¿è¡æ¥éª¤", "", this->getName().c_str(), v)); |
| | | i += 2; |
| | | |
| | | // 20.Bè
å·å´å©ä½æ¶é´ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8; |
| | | params.push_back(CParam("Bè
å·å´å©ä½æ¶é´", "", this->getName().c_str(), v * 0.01f)); |
| | | i += 2; |
| | | |
| | | return (int)params.size(); |
| | | } |
| | | } |
| | |
| | | virtual short getSlotUnit(short slotNo) { return slotNo % 2 == 1 ? 0 : 1; }; |
| | | virtual bool isSlotProcessed(int slot); |
| | | virtual int parsingParams(const char* pszData, size_t size, std::vector<CParam>& parsms); |
| | | virtual int parsingProcessData(const char* pszData, size_t size, std::vector<CParam>& parsms); |
| | | virtual int parsingSVData(const char* pszData, size_t size, std::vector<CParam>& parsms); |
| | | }; |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | { |
| | | CEqDateTimeSetCmdStep* pStep = new CEqDateTimeSetCmdStep(); |
| | | pStep->setName(STEP_DATETIME_SET_CMD); |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | { |
| | | // Sent Out Job Report Downstream #1~9 |
| | | char szBuffer[256]; |
| | |
| | | } |
| | | } |
| | | |
| | | // FAC Data Report |
| | | addFacDataReportStep(m_nIndex == 0 ? 0xA589 : 0xE589, |
| | | m_nIndex == 0 ? 0x34d : 0x64d, 1); |
| | | /* |
| | | { |
| | | // FAC Data Report |
| | | CEqReadStep* pStep = new CEqReadStep(m_nIndex == 0 ? 0xA60E : 0xE60E, 108 * 2, |
| | | CEqReadStep* pStep = new CEqReadStep(m_nIndex == 0 ? 0xA589 : 0xE589, 133 * 2, |
| | | [&](void* pFrom, int code, const char* pszData, size_t size) -> int { |
| | | if (code == ROK && pszData != nullptr && size > 0) { |
| | | decodeFacDataReport((CStep*)pFrom, pszData, size); |
| | |
| | | delete pStep; |
| | | } |
| | | } |
| | | */ |
| | | |
| | | // process start/end report |
| | | { |
| | |
| | | |
| | | return (int)params.size(); |
| | | } |
| | | |
| | | int CBonder::parsingProcessData(const char* pszData, size_t size, std::vector<CParam>& params) |
| | | { |
| | | return parsingParams(pszData, size, params); |
| | | } |
| | | |
| | | int CBonder::parsingSVData(const char* pszData, size_t size, std::vector<CParam>& params) |
| | | { |
| | | /* |
| | | 1 å·¥èºè¿è¡æ¥éª¤ 1Word 123456 |
| | | 2 æ°åååå½å 2Word 12345.6 |
| | | 3 ä¸è
ååå计 1Word 1234.56 |
| | | 4 管éç空è§å¼ FLOAT 123.456 |
| | | 5 è
ä½ç空è§å¼ FLOAT 123.456 |
| | | 6 ä¸è
温度1 1Word 12345.6 |
| | | 7 ä¸è
温度2 1Word 12345.6 |
| | | 8 ä¸è
温度3 1Word 12345.6 |
| | | 9 ä¸è
温度4 1Word 12345.6 |
| | | 10 ä¸è
温度5 1Word 12345.6 |
| | | 11 ä¸è
温度6 1Word 12345.6 |
| | | 12 ä¸è
温度1 1Word 12345.6 |
| | | 13 ä¸è
温度2 1Word 12345.6 |
| | | 14 ä¸è
温度3 1Word 12345.6 |
| | | 15 ä¸è
温度4 1Word 12345.6 |
| | | 16 ä¸è
温度5 1Word 12345.6 |
| | | 17 ä¸è
温度6 1Word 12345.6 |
| | | 18 ååå©ä½æ¶é´ 1Word 1234.56 |
| | | */ |
| | | |
| | | ASSERT(pszData); |
| | | if (size < 125) return 0; |
| | | int i = 0, v; |
| | | |
| | | |
| | | // 1.å·¥èºè¿è¡æ¥éª¤ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8; |
| | | params.push_back(CParam("å·¥èºè¿è¡æ¥éª¤", "", this->getName().c_str(), v)); |
| | | i += 2; |
| | | |
| | | // 2.æ°åååå½å |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8 | (pszData[i + 2] & 0xff) << 16 | (pszData[i + 3] & 0xff) << 24; |
| | | params.push_back(CParam("æ°åååå½å", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 4; |
| | | |
| | | // 3.ä¸è
ååå计 |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8; |
| | | params.push_back(CParam("ä¸è
ååå计", "", this->getName().c_str(), v * 0.01f)); |
| | | i += 2; |
| | | |
| | | // 4.管éç空è§å¼ |
| | | params.push_back(CParam("管éç空è§å¼", "", this->getName().c_str(), (double)toFloat(&pszData[i]))); |
| | | i += 4; |
| | | |
| | | // 5.è
ä½ç空è§å¼ |
| | | params.push_back(CParam("è
ä½ç空è§å¼", "", this->getName().c_str(), (double)toFloat(&pszData[i]))); |
| | | i += 4; |
| | | |
| | | // 6.ä¸è
温度1 |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8; |
| | | params.push_back(CParam("ä¸è
温度1", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 2; |
| | | |
| | | // 7.ä¸è
温度2 |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8; |
| | | params.push_back(CParam("ä¸è
温度2", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 2; |
| | | |
| | | // 8.ä¸è
温度3 |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8; |
| | | params.push_back(CParam("ä¸è
温度3", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 2; |
| | | |
| | | // 9.ä¸è
温度4 |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8; |
| | | params.push_back(CParam("ä¸è
温度4", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 2; |
| | | |
| | | // 10.ä¸è
温度5 |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8; |
| | | params.push_back(CParam("ä¸è
温度5", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 2; |
| | | |
| | | // 11.ä¸è
温度6 |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8; |
| | | params.push_back(CParam("ä¸è
温度6", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 2; |
| | | |
| | | // 12.ä¸è
温度1 |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8; |
| | | params.push_back(CParam("ä¸è
温度1", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 2; |
| | | |
| | | // 13.ä¸è
温度2 |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8; |
| | | params.push_back(CParam("ä¸è
温度2", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 2; |
| | | |
| | | // 14.ä¸è
温度3 |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8; |
| | | params.push_back(CParam("ä¸è
温度3", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 2; |
| | | |
| | | // 15.ä¸è
温度4 |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8; |
| | | params.push_back(CParam("ä¸è
温度4", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 2; |
| | | |
| | | // 16.ä¸è
温度5 |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8; |
| | | params.push_back(CParam("ä¸è
温度5", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 2; |
| | | |
| | | // 17.ä¸è
温度6 |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8; |
| | | params.push_back(CParam("ä¸è
温度6", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 2; |
| | | |
| | | // 18.ååå©ä½æ¶é´ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8; |
| | | params.push_back(CParam("ååå©ä½æ¶é´", "", this->getName().c_str(), v * 0.01f)); |
| | | i += 2; |
| | | |
| | | return (int)params.size(); |
| | | } |
| | | |
| | | } |
| | |
| | | virtual int onProcessStateChanged(PROCESS_STATE state); |
| | | virtual int getIndexerOperationModeBaseValue(); |
| | | virtual int parsingParams(const char* pszData, size_t size, std::vector<CParam>& parsms); |
| | | virtual int parsingProcessData(const char* pszData, size_t size, std::vector<CParam>& parsms); |
| | | virtual int parsingSVData(const char* pszData, size_t size, std::vector<CParam>& parsms); |
| | | |
| | | public: |
| | | void setIndex(unsigned int index); |
| | |
| | | } |
| | | } |
| | | |
| | | // FAC Data Report |
| | | addFacDataReportStep(0x6589, 0x04d, 1); |
| | | /* |
| | | { |
| | | // FAC Data Report |
| | | CEqReadStep* pStep = new CEqReadStep(0x6301, 108 * 2, |
| | | CEqReadStep* pStep = new CEqReadStep(0x6589, 133 * 2, |
| | | [&](void* pFrom, int code, const char* pszData, size_t size) -> int { |
| | | if (code == ROK && pszData != nullptr && size > 0) { |
| | | decodeFacDataReport((CStep*)pFrom, pszData, size); |
| | |
| | | delete pStep; |
| | | } |
| | | } |
| | | */ |
| | | |
| | | { |
| | | // JOB Data Request |
| | |
| | | // process data report |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_PROCESS_DATA_REPORT, pszData, size); |
| | | |
| | | // FAC Data report |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_FAC_DATA_REPORT, pszData, size); |
| | | |
| | | // é
æ¹æ¹å |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_CURRENT_RECIPE_CHANGE_REPORT, pszData, size); |
| | | |
| | |
| | | |
| | | int CEquipment::decodeFacDataReport(CStep* pStep, const char* pszData, size_t size) |
| | | { |
| | | int index = 0; |
| | | std::string strSvTimeRecord, strSvData; |
| | | CToolUnits::convertString(&pszData[index], 8 * 2, strSvTimeRecord); |
| | | index += 128 * 2; |
| | | CToolUnits::convertString(&pszData[index], 100 * 2, strSvData); |
| | | index += 256 * 2; |
| | | CSVData svData; |
| | | int nRet = svData.unserialize(&pszData[0], (int)size); |
| | | if (nRet < 0) return nRet; |
| | | m_svDatas.push_back(svData); |
| | | |
| | | |
| | | // ç¼åAttributeï¼ç¨äºè°è¯æ¶æ¾ç¤ºä¿¡æ¯ |
| | | unsigned int weight = 201; |
| | | pStep->addAttribute(new CAttribute("SV Time Record", |
| | | strSvTimeRecord.c_str(), "", weight++)); |
| | | pStep->addAttribute(new CAttribute("SV Data", |
| | | strSvData.c_str(), "", weight++)); |
| | | |
| | | if (m_listener.onSVDataReport != nullptr) { |
| | | m_listener.onSVDataReport(this, &svData); |
| | | } |
| | | |
| | | return 0; |
| | | } |
| | |
| | | |
| | | |
| | | if (m_processState != PROCESS_STATE::Processing) { |
| | | Lock(); |
| | | m_svDatas.clear(); |
| | | Unlock(); |
| | | setProcessState(PROCESS_STATE::Processing); |
| | | } |
| | | |
| | |
| | | |
| | | return 0; |
| | | }; |
| | | |
| | | void CEquipment::addFacDataReportStep(int dataDev, int writeSignalDev, int port) |
| | | { |
| | | CEqReadStep* pStep = new CEqReadStep(dataDev, 133 * 2, |
| | | [&](void* pFrom, int code, const char* pszData, size_t size) -> int { |
| | | if (code == ROK && pszData != nullptr && size > 0) { |
| | | decodeFacDataReport((CStep*)pFrom, pszData, size); |
| | | } |
| | | return -1; |
| | | }); |
| | | pStep->setName(STEP_EQ_FAC_DATA_REPORT); |
| | | pStep->setProp("Port", (void*)port); |
| | | pStep->setWriteSignalDev(writeSignalDev); |
| | | if (addStep(STEP_ID_FAC_DATA_REPORT, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | |
| | | std::vector<SERVO::CSVData>& CEquipment::getSVDatas() |
| | | { |
| | | return m_svDatas; |
| | | } |
| | | } |
| | |
| | | #include "CPortStatusReport.h" |
| | | #include "CSlot.h" |
| | | #include "CParam.h" |
| | | #include "CSVData.h" |
| | | |
| | | |
| | | namespace SERVO { |
| | |
| | | typedef std::function<void(void* pEiuipment, PROCESS_STATE state)> ONPROCESSSTATE; |
| | | typedef std::function<void(void* pEiuipment, short scanMap, short downMap)> ONMAPMISMATCH; |
| | | typedef std::function<void(void* pEiuipment, short status, __int64 data)> ONPORTSTATUSCHANGED; |
| | | |
| | | typedef struct _EquipmentListener |
| | | { |
| | | ONALIVE onAlive; |
| | |
| | | ONPROCESSSTATE onProcessStateChanged; |
| | | ONMAPMISMATCH onMapMismatch; |
| | | ONPORTSTATUSCHANGED onPortStatusChanged; |
| | | |
| | | ONVCREVENTREPORT onSVDataReport; |
| | | } EquipmentListener; |
| | | |
| | | |
| | |
| | | int setDispatchingMode(DISPATCHING_MODE mode, ONWRITED onWritedBlock = nullptr); |
| | | int indexerOperationModeChange(IDNEXER_OPERATION_MODE mode, ONWRITEDRET onWritedRetBlock); |
| | | void printDebugString001(); |
| | | |
| | | std::vector<SERVO::CSVData>& getSVDatas(); |
| | | |
| | | // 请æ±ä¸»é
æ¹å表 |
| | | // unitNo: 0:local; Others:unit No |
| | |
| | | // è§£æé
æ¹åæ°å表 |
| | | virtual int parsingParams(const char* pszData, size_t size, std::vector<CParam>& params) { return 0; }; |
| | | virtual int parsingParams(const char* pszData, size_t size, std::string& strOut); |
| | | virtual int parsingProcessData(const char* pszData, size_t size, std::vector<CParam>& params) { return 0; }; |
| | | virtual int parsingSVData(const char* pszData, size_t size, std::vector<CParam>& params) { return 0; }; |
| | | |
| | | // è·åæå®çSlot |
| | | CSlot* getSlot(int index); |
| | |
| | | float toFloat(const char* pszAddr); |
| | | |
| | | protected: |
| | | // é¨åä¼å/ç®å代ç ãæå®ç°é¨åï¼å°æ¶å¹³éºå¼ |
| | | void addFacDataReportStep(int dataDev, int writeSignalDev, int port); |
| | | |
| | | |
| | | protected: |
| | | BOOL m_bEnable; |
| | | EquipmentListener m_listener; |
| | | int m_nID; |
| | |
| | | CRecipesManager m_recipesManager; |
| | | CSlot m_slot[SLOT_MAX]; |
| | | PROCESS_STATE m_processState; |
| | | std::vector<SERVO::CSVData> m_svDatas; |
| | | |
| | | private: |
| | | CEquipment* m_pArm; |
| | |
| | | m_listener.onLoadPortStatusChanged(this, (CEquipment*)pEquipment, status, data); |
| | | } |
| | | }; |
| | | listener.onSVDataReport = [&](void* pEquipment, void* pData) { |
| | | CSVData* pSVData = (CSVData*)pData; |
| | | auto rawData = pSVData->getSVRawData(); |
| | | std::vector<CParam> params; |
| | | ((CEquipment*)pEquipment)->parsingSVData((const char*)rawData.data(), rawData.size(), params); |
| | | |
| | | std::string strOut; |
| | | char szBuffer[256]; |
| | | for (auto p : params) { |
| | | if (!strOut.empty()) strOut.append(","); |
| | | if (p.getValueType() == PVT_INT) { |
| | | sprintf_s(szBuffer, 256, "%s:%d", p.getName().c_str(), p.getIntValue()); |
| | | } |
| | | else if (p.getValueType() == PVT_DOUBLE) { |
| | | sprintf_s(szBuffer, 256, "%s:%f", p.getName().c_str(), p.getDoubleValue()); |
| | | } |
| | | strOut.append(szBuffer); |
| | | } |
| | | LOGI("<CMaster-%s>SVDataReport:%s", ((CEquipment*)pEquipment)->getName().c_str(), strOut.c_str()); |
| | | }; |
| | | pEquipment->setListener(listener); |
| | | pEquipment->setCcLink(&m_cclink); |
| | | m_listEquipment.push_back(pEquipment); |
| | |
| | | } |
| | | } |
| | | |
| | | // FAC Data Report |
| | | addFacDataReportStep(0x1a589, 0xf4d, 1); |
| | | /* |
| | | { |
| | | CEqReadStep* pStep = new CEqReadStep(0x1a589, 133 * 2, |
| | | [&](void* pFrom, int code, const char* pszData, size_t size) -> int { |
| | | if (code == ROK && pszData != nullptr && size > 0) { |
| | | decodeFacDataReport((CStep*)pFrom, pszData, size); |
| | | } |
| | | return -1; |
| | | }); |
| | | pStep->setName(STEP_EQ_FAC_DATA_REPORT); |
| | | pStep->setProp("Port", (void*)1); |
| | | pStep->setWriteSignalDev(0xf4d); |
| | | if (addStep(STEP_ID_FAC_DATA_REPORT, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | */ |
| | | |
| | | // process start/end report |
| | | { |
| | | CEqReadStep* pStep = new CEqReadStep(0x19D3F, 13 * 2, |
| | |
| | | |
| | | return (int)params.size(); |
| | | } |
| | | |
| | | int CMeasurement::parsingProcessData(const char* pszData, size_t size, std::vector<CParam>& params) |
| | | { |
| | | return parsingParams(pszData, size, params); |
| | | } |
| | | |
| | | int CMeasurement::parsingSVData(const char* pszData, size_t size, std::vector<CParam>& params) |
| | | { |
| | | /*/ |
| | | 1 å·¥èºè¿è¡æ¥éª¤ 1Word 123456 |
| | | 2 AOIæ£æµé度 2Word 123.456 |
| | | */ |
| | | |
| | | ASSERT(pszData); |
| | | if (size < 125) return 0; |
| | | int i = 0, v; |
| | | |
| | | |
| | | // 1.å·¥èºè¿è¡æ¥éª¤ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8; |
| | | params.push_back(CParam("å·¥èºè¿è¡æ¥éª¤", "", this->getName().c_str(), v)); |
| | | i += 2; |
| | | |
| | | // 2.æ£æµé度 |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8 | (pszData[i + 2] & 0xff) << 16 | (pszData[i + 3] & 0xff) << 24; |
| | | params.push_back(CParam("Aè
温æ§è¡¨1å½åå¼", "", this->getName().c_str(), v * 0.001f)); |
| | | i += 4; |
| | | |
| | | return (int)params.size(); |
| | | } |
| | | |
| | | } |
| | |
| | | virtual int recvIntent(CPin* pPin, CIntent* pIntent); |
| | | virtual int getIndexerOperationModeBaseValue(); |
| | | virtual int parsingParams(const char* pszData, size_t size, std::vector<CParam>& parsms); |
| | | }; |
| | | virtual int parsingProcessData(const char* pszData, size_t size, std::vector<CParam>& parsms); |
| | | virtual int parsingSVData(const char* pszData, size_t size, std::vector<CParam>& parsms); |
| | | }; |
| | | } |
| | | |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | #include "stdafx.h" |
| | | #include "CSVData.h" |
| | | #include "ToolUnits.h" |
| | | |
| | | |
| | | namespace SERVO { |
| | | CSVData::CSVData() |
| | | { |
| | | |
| | | } |
| | | |
| | | CSVData::~CSVData() |
| | | { |
| | | |
| | | } |
| | | |
| | | std::string& CSVData::getTime() |
| | | { |
| | | return m_strTime; |
| | | } |
| | | |
| | | std::vector<uint8_t>& CSVData::getSVRawData() |
| | | { |
| | | return m_svRawData; |
| | | } |
| | | |
| | | int CSVData::serialize(char* pszBuffer, int nBufferSize) |
| | | { |
| | | if (nBufferSize < 133) return -1; |
| | | |
| | | int index = 0; |
| | | CToolUnits::convertString(&pszBuffer[index], 8, m_strTime); |
| | | index += 8; |
| | | |
| | | memcpy(&pszBuffer[index], m_svRawData.data(), 125); |
| | | index += 125; |
| | | |
| | | return 133; |
| | | } |
| | | |
| | | int CSVData::unserialize(const char* pszBuffer, int nBufferSize) |
| | | { |
| | | if (nBufferSize < 133) return -1; |
| | | |
| | | int index = 0; |
| | | CSVData svData; |
| | | CToolUnits::convertString(&pszBuffer[index], 8, m_strTime); |
| | | index += 8; |
| | | |
| | | m_svRawData.clear(); |
| | | m_svRawData.insert(m_svRawData.end(), (uint8_t*)(pszBuffer), (uint8_t*)(pszBuffer)+125); |
| | | index += 125; |
| | | |
| | | return 133; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | #pragma once |
| | | |
| | | |
| | | namespace SERVO { |
| | | class CSVData |
| | | { |
| | | public: |
| | | CSVData(); |
| | | virtual ~CSVData(); |
| | | |
| | | public: |
| | | std::string& getTime(); |
| | | std::vector<uint8_t>& getSVRawData(); |
| | | int serialize(char* pszBuffer, int nBufferSize); |
| | | int unserialize(const char* pszBuffer, int nBufferSize); |
| | | |
| | | private: |
| | | std::string m_strTime; |
| | | std::vector<uint8_t> m_svRawData; |
| | | }; |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | // FAC Data Report |
| | | addFacDataReportStep(0x16589, 0xc4d, 1); |
| | | /* |
| | | { |
| | | CEqReadStep* pStep = new CEqReadStep(0x16589, 133 * 2, |
| | | [&](void* pFrom, int code, const char* pszData, size_t size) -> int { |
| | | if (code == ROK && pszData != nullptr && size > 0) { |
| | | decodeFacDataReport((CStep*)pFrom, pszData, size); |
| | | } |
| | | return -1; |
| | | }); |
| | | pStep->setName(STEP_EQ_FAC_DATA_REPORT); |
| | | pStep->setProp("Port", (void*)1); |
| | | pStep->setWriteSignalDev(0xc4d); |
| | | if (addStep(STEP_ID_FAC_DATA_REPORT, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | */ |
| | | |
| | | // process start/end report |
| | | { |
| | | CEqReadStep* pStep = new CEqReadStep(0x15D3F, 13 * 2, |
| | |
| | | |
| | | return (int)params.size(); |
| | | } |
| | | |
| | | int CVacuumBake::parsingProcessData(const char* pszData, size_t size, std::vector<CParam>& params) |
| | | { |
| | | return parsingParams(pszData, size, params); |
| | | } |
| | | |
| | | int CVacuumBake::parsingSVData(const char* pszData, size_t size, std::vector<CParam>& params) |
| | | { |
| | | /* |
| | | 1 Aè
å·¥èºè¿è¡æ¥éª¤ 1Word 123456 |
| | | 2 Aè
ä½ç空è§å¼ FLOAT 123.456 |
| | | 3 Aè
温æ§è¡¨1å½åå¼ 2Word 12345.6 |
| | | 4 Aè
温æ§è¡¨2å½åå¼ 2Word 12345.6 |
| | | 5 Aè
温æ§è¡¨4å½åå¼ 2Word 12345.6 |
| | | 6 Aè
温æ§è¡¨5å½åå¼ 2Word 12345.6 |
| | | 7 Aè
温æ§è¡¨6å½åå¼ 2Word 12345.6 |
| | | 8 Aè
温æ§è¡¨7å½åå¼ 2Word 12345.6 |
| | | 9 Aè
çç¤å©ä½æ¶é´ 1Word 12345.6 |
| | | 10 Bè
å·¥èºè¿è¡æ¥éª¤ 1Word 123456 |
| | | 11 Bè
ä½ç空è§å¼ FLOBT 123.456 |
| | | 12 Bè
温æ§è¡¨1å½åå¼ 2Word 12345.6 |
| | | 13 Bè
温æ§è¡¨2å½åå¼ 2Word 12345.6 |
| | | 14 Bè
温æ§è¡¨4å½åå¼ 2Word 12345.6 |
| | | 15 Bè
温æ§è¡¨5å½åå¼ 2Word 12345.6 |
| | | 16 Bè
温æ§è¡¨6å½åå¼ 2Word 12345.6 |
| | | 17 Bè
温æ§è¡¨7å½åå¼ 2Word 12345.6 |
| | | 18 Bè
çç¤å©ä½æ¶é´ 1Word 12345.6 |
| | | */ |
| | | |
| | | ASSERT(pszData); |
| | | if (size < 125) return 0; |
| | | int i = 0, v; |
| | | |
| | | |
| | | // 1.Aè
å·¥èºè¿è¡æ¥éª¤ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8; |
| | | params.push_back(CParam("Aè
å·¥èºè¿è¡æ¥éª¤", "", this->getName().c_str(), v)); |
| | | i += 2; |
| | | |
| | | // 2.Aè
ä½ç空è§å¼ |
| | | params.push_back(CParam("Aè
ä½ç空è§å¼", "", this->getName().c_str(), (double)toFloat(&pszData[i]))); |
| | | i += 4; |
| | | |
| | | // 3.Aè
温æ§è¡¨1å½åå¼ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8 | (pszData[i + 2] & 0xff) << 16 | (pszData[i + 3] & 0xff) << 24; |
| | | params.push_back(CParam("Aè
温æ§è¡¨1å½åå¼", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 4; |
| | | |
| | | // 4.Aè
温æ§è¡¨2å½åå¼ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8 | (pszData[i + 2] & 0xff) << 16 | (pszData[i + 3] & 0xff) << 24; |
| | | params.push_back(CParam("Aè
温æ§è¡¨2å½åå¼", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 4; |
| | | |
| | | // 5.Aè
温æ§è¡¨4å½åå¼ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8 | (pszData[i + 2] & 0xff) << 16 | (pszData[i + 3] & 0xff) << 24; |
| | | params.push_back(CParam("Aè
温æ§è¡¨4å½åå¼", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 4; |
| | | |
| | | // 6.Aè
温æ§è¡¨5å½åå¼ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8 | (pszData[i + 2] & 0xff) << 16 | (pszData[i + 3] & 0xff) << 24; |
| | | params.push_back(CParam("Aè
温æ§è¡¨5å½åå¼", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 4; |
| | | |
| | | // 7.Aè
温æ§è¡¨6å½åå¼ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8 | (pszData[i + 2] & 0xff) << 16 | (pszData[i + 3] & 0xff) << 24; |
| | | params.push_back(CParam("Aè
温æ§è¡¨6å½åå¼", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 4; |
| | | |
| | | // 8.Aè
温æ§è¡¨7å½åå¼ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8 | (pszData[i + 2] & 0xff) << 16 | (pszData[i + 3] & 0xff) << 24; |
| | | params.push_back(CParam("Aè
温æ§è¡¨7å½åå¼", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 4; |
| | | |
| | | // 9.Aè
çç¤å©ä½æ¶é´ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8; |
| | | params.push_back(CParam("Aè
çç¤å©ä½æ¶é´", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 2; |
| | | |
| | | // 10.Bè
å·¥èºè¿è¡æ¥éª¤ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8; |
| | | params.push_back(CParam("Bè
å·¥èºè¿è¡æ¥éª¤", "", this->getName().c_str(), v)); |
| | | i += 2; |
| | | |
| | | // 11.Aè
ä½ç空è§å¼ |
| | | params.push_back(CParam("Bè
ä½ç空è§å¼", "", this->getName().c_str(), (double)toFloat(&pszData[i]))); |
| | | i += 4; |
| | | |
| | | // 12.Bè
温æ§è¡¨1å½åå¼ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8 | (pszData[i + 2] & 0xff) << 16 | (pszData[i + 3] & 0xff) << 24; |
| | | params.push_back(CParam("Bè
温æ§è¡¨1å½åå¼", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 4; |
| | | |
| | | // 13.Bè
温æ§è¡¨2å½åå¼ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8 | (pszData[i + 2] & 0xff) << 16 | (pszData[i + 3] & 0xff) << 24; |
| | | params.push_back(CParam("Bè
温æ§è¡¨2å½åå¼", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 4; |
| | | |
| | | // 14.Bè
温æ§è¡¨4å½åå¼ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8 | (pszData[i + 2] & 0xff) << 16 | (pszData[i + 3] & 0xff) << 24; |
| | | params.push_back(CParam("Bè
温æ§è¡¨4å½åå¼", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 4; |
| | | |
| | | // 15.Bè
温æ§è¡¨5å½åå¼ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8 | (pszData[i + 2] & 0xff) << 16 | (pszData[i + 3] & 0xff) << 24; |
| | | params.push_back(CParam("Bè
温æ§è¡¨5å½åå¼", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 4; |
| | | |
| | | // 16.Bè
温æ§è¡¨6å½åå¼ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8 | (pszData[i + 2] & 0xff) << 16 | (pszData[i + 3] & 0xff) << 24; |
| | | params.push_back(CParam("Bè
温æ§è¡¨6å½åå¼", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 4; |
| | | |
| | | // 17.Bè
温æ§è¡¨7å½åå¼ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8 | (pszData[i + 2] & 0xff) << 16 | (pszData[i + 3] & 0xff) << 24; |
| | | params.push_back(CParam("Bè
温æ§è¡¨7å½åå¼", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 4; |
| | | |
| | | // 18.Bè
çç¤å©ä½æ¶é´ |
| | | v = (pszData[i] & 0xff) | (pszData[i + 1] & 0xff) << 8; |
| | | params.push_back(CParam("Bè
çç¤å©ä½æ¶é´", "", this->getName().c_str(), v * 0.1f)); |
| | | i += 2; |
| | | |
| | | return (int)params.size(); |
| | | } |
| | | } |
| | |
| | | virtual int recvIntent(CPin* pPin, CIntent* pIntent); |
| | | virtual int getIndexerOperationModeBaseValue(); |
| | | virtual int parsingParams(const char* pszData, size_t size, std::vector<CParam>& parsms); |
| | | }; |
| | | virtual int parsingProcessData(const char* pszData, size_t size, std::vector<CParam>& parsms); |
| | | virtual int parsingSVData(const char* pszData, size_t size, std::vector<CParam>& parsms); |
| | | }; |
| | | } |
| | | |
| | |
| | | <ClInclude Include="CPagePortStatus.h" /> |
| | | <ClInclude Include="CPortStatusReport.h" /> |
| | | <ClInclude Include="CRobotTaskDlg.h" /> |
| | | <ClInclude Include="CSVData.h" /> |
| | | <ClInclude Include="CVariable.h" /> |
| | | <ClInclude Include="GlassJson.h" /> |
| | | <ClInclude Include="GridControl\CellRange.h" /> |
| | |
| | | <ClCompile Include="CPagePortStatus.cpp" /> |
| | | <ClCompile Include="CPortStatusReport.cpp" /> |
| | | <ClCompile Include="CRobotTaskDlg.cpp" /> |
| | | <ClCompile Include="CSVData.cpp" /> |
| | | <ClCompile Include="CVariable.cpp" /> |
| | | <ClCompile Include="GlassJson.cpp" /> |
| | | <ClCompile Include="GridControl\GridCell.cpp" /> |
| | |
| | | <ClCompile Include="..\jsoncpp\lib_json\json_writer.cpp"> |
| | | <Filter>JsonCpp</Filter> |
| | | </ClCompile> |
| | | <ClCompile Include="CSVData.cpp" /> |
| | | </ItemGroup> |
| | | <ItemGroup> |
| | | <ClInclude Include="AlarmManager.h" /> |
| | |
| | | <ClInclude Include="..\jsoncpp\lib_json\json_batchallocator.h"> |
| | | <Filter>JsonCpp</Filter> |
| | | </ClInclude> |
| | | <ClInclude Include="CSVData.h" /> |
| | | </ItemGroup> |
| | | <ItemGroup> |
| | | <ResourceCompile Include="Servo.rc" /> |