#include "stdafx.h" #include "CEqStatusStep.h" #include "Log.h" #include "ToolUnits.h" namespace SERVO { CEqStatusStep::CEqStatusStep() : CReadStep() { m_nStatusDev = 0; for (int i = 0; i < STATUS_MAX; i++) { m_nStatus[i] = 7; m_nReasonCode[i] = 0; } } CEqStatusStep::~CEqStatusStep() { } void CEqStatusStep::getAttributeVector(CAttributeVector& attrubutes) { CReadStep::getAttributeVector(attrubutes); char szName[256]; for (int i = 0; i < STATUS_MAX; i++) { sprintf_s(szName, 256, "Status %d", i + 1); attrubutes.addAttribute(new CAttribute(szName, std::to_string(m_nStatus[i]).c_str(), "")); sprintf_s(szName, 256, "Reason Code %d", i + 1); attrubutes.addAttribute(new CAttribute(szName, std::to_string(m_nReasonCode[i]).c_str(), "")); } attrubutes.addAttribute(new CAttribute("Status Dev", std::to_string(m_nStatusDev).c_str(), "")); } int CEqStatusStep::getStatus(unsigned int uint) { if (uint < STATUS_MAX) { return m_nStatus[uint]; } return -1; } int CEqStatusStep::onReadData() { CReadStep::onReadData(); char szBuffer[64]; int nRet = m_pCclink->ReadData2(m_station, DeviceType::W, m_nStatusDev, 64, szBuffer); 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(" Equipment Status Changed\n", unitId, getStatusDescription(unitId, strTemp).c_str(), m_nReasonCode[unitId]); return 0; } int CEqStatusStep::onComplete() { CReadStep::onComplete(); LOGI(" onComplete."); return 0; } int CEqStatusStep::onTimeout() { CReadStep::onTimeout(); LOGI(" onTimeout."); return 0; } void CEqStatusStep::setStatusDev(int nDev) { m_nStatusDev = nDev; } /* Lower (1byte, 0~7) : Status 1 : PM 2 : Down(BM) 3 : Pause 4 : Idle 5: Run 6: Job Change 7 : ETC */ std::string& CEqStatusStep::getStatusDescription(unsigned int unid, std::string& strDescription) { if (unid < STATUS_MAX) { switch (m_nStatus[unid]) { case 1: strDescription = _T("PM"); break; case 2: strDescription = _T("Down(BM)"); break; case 3: strDescription = _T("Pause"); break; case 4: strDescription = _T("Idle"); break; case 5: strDescription = _T("Run"); break; case 6: strDescription = _T("Job Change"); break; case 7: strDescription = _T("ETC"); break; default: strDescription = _T(""); break; } } return strDescription; } }