Merge branch 'clh'
# Conflicts:
# SourceCode/Bond/Servo/Servo.vcxproj.filters
| | |
| | | // èªå®ä¹æé 彿°ï¼è¦çé»è®¤å¼ |
| | | explicit StationIdentifier(const short net, const short st) : nNetNo(net), nStNo(st) {} |
| | | |
| | | StationIdentifier() |
| | | { |
| | | nNetNo = 0; |
| | | nStNo = 255; |
| | | } |
| | | |
| | | // å°âç½ç»å·âåâç«ç¹å·âç»åæä¸ä¸ªæç»ç¼ç |
| | | short StationIdentifier::toNetworkStationCode() const { |
| | | return static_cast<short>(nStNo | ((nNetNo << 8) & 0xFF00)); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | #include "stdafx.h" |
| | | #include "CEqAlarmStep.h" |
| | | #include "Log.h" |
| | | #include "ToolUnits.h" |
| | | |
| | | |
| | | namespace SERVO { |
| | | CEqAlarmStep::CEqAlarmStep() : CStep() |
| | | { |
| | | m_nAlarmDev = 0; |
| | | m_nAlarmState = 0; |
| | | m_nUnitId = 0; |
| | | m_nAlarmLevel = 0; |
| | | m_nAlarmCode = 0; |
| | | m_nAlarmId = 0; |
| | | } |
| | | |
| | | CEqAlarmStep::~CEqAlarmStep() |
| | | { |
| | | |
| | | } |
| | | int CEqAlarmStep::onReadData() |
| | | { |
| | | CStep::onReadData(); |
| | | |
| | | char szBuffer[64]; |
| | | int nRet = m_pCclink->ReadData2(m_station, DeviceType::W, |
| | | m_nAlarmDev, 64, szBuffer); |
| | | if (0 == nRet) { |
| | | m_nAlarmState = (unsigned int)CToolUnits::toInt16(&szBuffer[0]); |
| | | m_nUnitId = (unsigned int)CToolUnits::toInt16(&szBuffer[2]); |
| | | m_nAlarmId = (unsigned int)CToolUnits::toInt16(&szBuffer[4]); |
| | | m_nAlarmCode = (unsigned int)CToolUnits::toInt16(&szBuffer[6]); |
| | | m_nAlarmLevel = (unsigned int)CToolUnits::toInt16(&szBuffer[8]); |
| | | |
| | | LOGI("<CEqAlarmStep> Equipment Alarm state Changed<State:%d, Unit:%d, Level:%d, Code:%d, ID:%d>\n", |
| | | m_nAlarmState, m_nUnitId, m_nAlarmLevel, m_nAlarmCode, m_nAlarmId, |
| | | m_strText.c_str(), m_strDescription.c_str()); |
| | | } |
| | | |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CEqAlarmStep::onComplete() |
| | | { |
| | | CStep::onComplete(); |
| | | LOGI("<CEqAlarmStep> onComplete."); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CEqAlarmStep::onTimeout() |
| | | { |
| | | CStep::onTimeout(); |
| | | LOGI("<CEqAlarmStep> onTimeout."); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | void CEqAlarmStep::setAlarmDev(int nDev) |
| | | { |
| | | m_nAlarmDev = nDev; |
| | | } |
| | | |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | #pragma once |
| | | #include "CStep.h" |
| | | |
| | | |
| | | namespace SERVO { |
| | | class CEqAlarmStep : public CStep |
| | | { |
| | | public: |
| | | CEqAlarmStep(); |
| | | ~CEqAlarmStep(); |
| | | |
| | | public: |
| | | virtual int onReadData(); |
| | | virtual int onComplete(); |
| | | virtual int onTimeout(); |
| | | void setAlarmDev(int nDev); |
| | | |
| | | private: |
| | | int m_nAlarmDev; |
| | | int m_nAlarmState; |
| | | int m_nUnitId; |
| | | int m_nAlarmLevel; |
| | | int m_nAlarmCode; |
| | | int m_nAlarmId; |
| | | std::string m_strText; |
| | | std::string m_strDescription; |
| | | }; |
| | | } |
| | | |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | #include "stdafx.h" |
| | | #include "CEqModeStep.h" |
| | | #include "Log.h" |
| | | |
| | | |
| | | namespace SERVO { |
| | | CEqModeStep::CEqModeStep() : CStep() |
| | | { |
| | | m_nModeDev = 0; |
| | | m_nMode = 0; |
| | | } |
| | | |
| | | CEqModeStep::~CEqModeStep() |
| | | { |
| | | |
| | | } |
| | | |
| | | int CEqModeStep::onReadData() |
| | | { |
| | | CStep::onReadData(); |
| | | |
| | | DWordContainer dc; |
| | | if (0 == m_pCclink->ReadDWordData(m_station, DeviceType::W, m_nModeDev, 1, dc) |
| | | && dc.size() >= 1) { |
| | | m_nMode = dc.at(0); |
| | | std::string strTemp; |
| | | LOGI("<CEqModeStep> Equipment Mode Changed<%s>\n", |
| | | getModeDescription(strTemp).c_str()); |
| | | } |
| | | |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CEqModeStep::onComplete() |
| | | { |
| | | CStep::onComplete(); |
| | | LOGI("<CEqModeStep> onComplete."); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CEqModeStep::onTimeout() |
| | | { |
| | | CStep::onTimeout(); |
| | | LOGI("<CEqModeStep> onTimeout."); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | void CEqModeStep::setModeDev(int nDev) |
| | | { |
| | | m_nModeDev = nDev; |
| | | } |
| | | |
| | | /* |
| | | 0: No Equipment Mode exist |
| | | 1: Normal Mode |
| | | 2 : Recovery(Force Clean Out) Mode |
| | | 3 : Skip Mode |
| | | 4 : Cold Run Mode |
| | | 5 : ETC." |
| | | */ |
| | | std::string& CEqModeStep::getModeDescription(std::string& strDescription) |
| | | { |
| | | switch (m_nMode) { |
| | | case 0: |
| | | strDescription = _T("No Equipment Mode exist"); |
| | | break; |
| | | case 1: |
| | | strDescription = _T("Normal Mode"); |
| | | break; |
| | | case 2: |
| | | strDescription = _T("Recovery(Force Clean Out) Mode"); |
| | | break; |
| | | case 3: |
| | | strDescription = _T("Skip Mode"); |
| | | break; |
| | | case 4: |
| | | strDescription = _T("Cold Run Mode"); |
| | | break; |
| | | case 5: |
| | | strDescription = _T("ETC."); |
| | | break; |
| | | default: |
| | | strDescription = _T(""); |
| | | break; |
| | | } |
| | | |
| | | return strDescription; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | #pragma once |
| | | #include "CStep.h" |
| | | |
| | | |
| | | namespace SERVO { |
| | | class CEqModeStep : public CStep |
| | | { |
| | | public: |
| | | CEqModeStep(); |
| | | ~CEqModeStep(); |
| | | |
| | | public: |
| | | virtual int onReadData(); |
| | | virtual int onComplete(); |
| | | virtual int onTimeout(); |
| | | void setModeDev(int nDev); |
| | | std::string& getModeDescription(std::string& strDescription); |
| | | |
| | | private: |
| | | int m_nModeDev; |
| | | int m_nMode; |
| | | }; |
| | | } |
| | | |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | #include "stdafx.h" |
| | | #include "CEqStatusStep.h" |
| | | #include "Log.h" |
| | | #include "ToolUnits.h" |
| | | |
| | | |
| | | namespace SERVO { |
| | | CEqStatusStep::CEqStatusStep() : CStep() |
| | | { |
| | | m_nStatusDev = 0; |
| | | for (int i = 0; i < STATUS_MAX; i++) { |
| | | m_nStatus[i] = 7; |
| | | m_nReasonCode[i] = 0; |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | CEqStatusStep::~CEqStatusStep() |
| | | { |
| | | |
| | | } |
| | | |
| | | int CEqStatusStep::onReadData() |
| | | { |
| | | CStep::onReadData(); |
| | | |
| | | char szBuffer[64]; |
| | | int nRet = m_pCclink->ReadData2(m_station, DeviceType::W, |
| | | m_nStatusDev, 64, szBuffer); |
| | | if (0 == nRet) { |
| | | unsigned int unitId = (unsigned int)CToolUnits::toInt16(&szBuffer[0]); |
| | | if (unitId < STATUS_MAX) { |
| | | 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]); |
| | | } |
| | | |
| | | for (int i = 0; i < 64; i++) { |
| | | TRACE("bbb %d, %x\n", i, szBuffer[i]); |
| | | } |
| | | TRACE("cccc %d %d %d\n", unitId, m_nStatus[unitId], m_nReasonCode[unitId]); |
| | | std::string strTemp; |
| | | LOGI("<CEqStatusStep> Equipment Status Changed<Unit:%d, %s, ReasonCode=%d>\n", |
| | | unitId, getStatusDescription(unitId, strTemp).c_str(), m_nReasonCode[unitId]); |
| | | } |
| | | } |
| | | |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CEqStatusStep::onComplete() |
| | | { |
| | | CStep::onComplete(); |
| | | LOGI("<CEqStatusStep> onComplete."); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CEqStatusStep::onTimeout() |
| | | { |
| | | CStep::onTimeout(); |
| | | LOGI("<CEqStatusStep> 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; |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | #pragma once |
| | | #include "CStep.h" |
| | | |
| | | |
| | | namespace SERVO { |
| | | #define UNIT_MAX 6 |
| | | #define STATUS_MAX (UNIT_MAX + 1) |
| | | |
| | | class CEqStatusStep : public CStep |
| | | { |
| | | public: |
| | | CEqStatusStep(); |
| | | ~CEqStatusStep(); |
| | | |
| | | public: |
| | | virtual int onReadData(); |
| | | virtual int onComplete(); |
| | | virtual int onTimeout(); |
| | | void setStatusDev(int nDev); |
| | | std::string& getStatusDescription(unsigned int unid, std::string& strDescription); |
| | | |
| | | private: |
| | | int m_nStatusDev; |
| | | int m_nStatus[STATUS_MAX]; |
| | | int m_nReasonCode[STATUS_MAX]; |
| | | }; |
| | | } |
| | | |
| | |
| | | |
| | | void CEquipment::init() |
| | | { |
| | | CStep* pStep = new CStep(); |
| | | if (addStep(0x360, pStep) == 0) { |
| | | pStep->init(); |
| | | } |
| | | else { |
| | | delete pStep; |
| | | for (auto item : m_mapStep) { |
| | | item.second->init(); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | |
| | | // 以䏿 ¹æ®ä¿¡å·åæµç¨å¤ç |
| | | CStep* pStep; |
| | | |
| | | // Equipment Mode Change Report |
| | | index = 0x360; |
| | | bFlag = isBitOn(pszData, size, index); |
| | | CStep* pStep = getStep(0x360); |
| | | if (pStep != nullptr) { |
| | | pStep->onSignal(bFlag); |
| | | // Equipment Mode Change Report(0x360) |
| | | // Equipment Status Change Report(0x361) |
| | | // Equipment Alarm Change Report(0x362 ~ 0x366) |
| | | for (int i = 0; i < 7; i++) { |
| | | index = 0x360 + i;; |
| | | bFlag = isBitOn(pszData, size, index); |
| | | pStep = getStep(index); |
| | | if (pStep != nullptr) { |
| | | pStep->onSignal(bFlag); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | #pragma once |
| | | #include "Log.h" |
| | | #include "CCLinkIEControl.h" |
| | | #include "CStep.h" |
| | | #include "CEqModeStep.h" |
| | | #include "CEqStatusStep.h" |
| | | #include "CEqAlarmStep.h" |
| | | #include <map> |
| | | |
| | | |
| | |
| | | pEquipment->setStation(0, 255); |
| | | addEquipment(pEquipment); |
| | | |
| | | |
| | | // æ·»å step |
| | | { |
| | | CEqModeStep* pStep = new CEqModeStep(); |
| | | pStep->setWriteSignalDev(0x30); |
| | | pStep->setModeDev(0x4a8c); |
| | | if (pEquipment->addStep(0x360, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | { |
| | | CEqStatusStep* pStep = new CEqStatusStep(); |
| | | pStep->setWriteSignalDev(0x31); |
| | | pStep->setStatusDev(0x4a68); |
| | | if (pEquipment->addStep(0x361, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | { |
| | | CEqAlarmStep* pStep = new CEqAlarmStep(); |
| | | pStep->setWriteSignalDev(0x32); |
| | | pStep->setAlarmDev(0x4c1d); |
| | | if (pEquipment->addStep(0x362, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | { |
| | | CEqAlarmStep* pStep = new CEqAlarmStep(); |
| | | pStep->setWriteSignalDev(0x33); |
| | | pStep->setAlarmDev(0x4c4a); |
| | | if (pEquipment->addStep(0x363, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | { |
| | | CEqAlarmStep* pStep = new CEqAlarmStep(); |
| | | pStep->setWriteSignalDev(0x34); |
| | | pStep->setAlarmDev(0x4c77); |
| | | if (pEquipment->addStep(0x364, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | { |
| | | CEqAlarmStep* pStep = new CEqAlarmStep(); |
| | | pStep->setWriteSignalDev(0x35); |
| | | pStep->setAlarmDev(0x4ca4); |
| | | if (pEquipment->addStep(0x365, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | { |
| | | CEqAlarmStep* pStep = new CEqAlarmStep(); |
| | | pStep->setWriteSignalDev(0x36); |
| | | pStep->setAlarmDev(0x4cd1); |
| | | if (pEquipment->addStep(0x366, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | |
| | | |
| | | pEquipment->init(); |
| | | LOGE("已添å âEFEM(ROBOT)â."); |
| | | } |
| | |
| | | |
| | | unsigned __stdcall StepWorkThreadFunction(LPVOID lpParam) |
| | | { |
| | | CStep* pScale = (CStep*)lpParam; |
| | | return pScale->WorkingProc(); |
| | | CStep* pStep = (CStep*)lpParam; |
| | | return pStep->WorkingProc(); |
| | | } |
| | | |
| | | CStep::CStep() |
| | |
| | | m_hSignalOff = ::CreateEvent(NULL, TRUE, FALSE, NULL); |
| | | m_nCurStep = 0; |
| | | m_pCclink = nullptr; |
| | | m_nWriteSignalDev = 0; |
| | | InitializeCriticalSection(&m_criticalSection); |
| | | } |
| | | |
| | |
| | | void CStep::setCcLink(CCCLinkIEControl* pCcLink) |
| | | { |
| | | m_pCclink = pCcLink; |
| | | } |
| | | |
| | | void CStep::setWriteSignalDev(int dev) |
| | | { |
| | | m_nWriteSignalDev = dev; |
| | | } |
| | | |
| | | void CStep::init() |
| | |
| | | // 1.è¯»åæ°æ® |
| | | nextStep(); |
| | | ASSERT(m_pCclink); |
| | | StationIdentifier station(0, 255); |
| | | DWordContainer dc; |
| | | m_pCclink->ReadDWordData(station, DeviceType::W, 0x4a8c, 1, dc); |
| | | int nState = dc.at(0); |
| | | TRACE(">> nState:%d\n", nState); |
| | | onReadData(); |
| | | |
| | | |
| | | // 2.ç»å¯¹æ¹åON |
| | | nextStep(); |
| | | m_pCclink->SetBitDevice(station, DeviceType::B, 0x30); |
| | | m_pCclink->SetBitDevice(m_station, DeviceType::B, m_nWriteSignalDev); |
| | | |
| | | |
| | | // 3.çå¾
对æ¹OFF |
| | | nextStep(); |
| | | int nStep3Ret = ::WaitForSingleObject(m_hSignalOff, TIMEOUT * 1000); |
| | | if (nStep3Ret == WAIT_TIMEOUT) { |
| | | timeout(); |
| | | m_pCclink->ResetBitDevice(station, DeviceType::B, 0x30); |
| | | m_pCclink->ResetBitDevice(m_station, DeviceType::B, m_nWriteSignalDev); |
| | | onTimeout(); |
| | | goto RESET; |
| | | } |
| | | ResetEvent(m_hSignalOff); |
| | |
| | | |
| | | // 4.ç»å¯¹æ¹åOFF |
| | | nextStep(); |
| | | m_pCclink->ResetBitDevice(station, DeviceType::B, 0x30); |
| | | TRACE("m_nCurStep:%d\n", m_nCurStep); |
| | | |
| | | |
| | | // 5.对æ¥CIMç |
| | | nextStep(); |
| | | TRACE("m_nCurStep:%d\n", m_nCurStep); |
| | | m_pCclink->ResetBitDevice(m_station, DeviceType::B, m_nWriteSignalDev); |
| | | |
| | | |
| | | // 6.宿 |
| | | nextStep(); |
| | | TRACE("m_nCurStep:%d\n", m_nCurStep); |
| | | onComplete(); |
| | | } |
| | | } |
| | | |
| | |
| | | Unlock(); |
| | | } |
| | | |
| | | int CStep::onReadData() |
| | | { |
| | | return 0; |
| | | } |
| | | |
| | | int CStep::onComplete() |
| | | { |
| | | return 0; |
| | | } |
| | | |
| | | int CStep::onTimeout() |
| | | { |
| | | return 0; |
| | | } |
| | | |
| | | void CStep::resetStep() |
| | | { |
| | | Lock(); |
| | |
| | | Lock(); |
| | | m_nCurStep++; |
| | | Unlock(); |
| | | } |
| | | |
| | | void CStep::timeout() |
| | | { |
| | | TRACE(">>>>>>>>>>>>>>>> timeout:%d\n", m_nCurStep); |
| | | } |
| | | } |
| | | |
| | |
| | | public: |
| | | unsigned WorkingProc(); |
| | | void setCcLink(CCCLinkIEControl* pCcLink); |
| | | virtual void setWriteSignalDev(int dev); |
| | | virtual void init(); |
| | | virtual void CStep::term(); |
| | | virtual void onSignal(BOOL bSignal); |
| | | virtual int onReadData(); |
| | | virtual int onComplete(); |
| | | virtual int onTimeout(); |
| | | |
| | | protected: |
| | | inline void Lock() { EnterCriticalSection(&m_criticalSection); } |
| | | inline void Unlock() { LeaveCriticalSection(&m_criticalSection); } |
| | | inline void nextStep(); |
| | | inline void resetStep(); |
| | | void timeout(); |
| | | |
| | | private: |
| | | protected: |
| | | StationIdentifier m_station; |
| | | CCCLinkIEControl* m_pCclink; |
| | | CRITICAL_SECTION m_criticalSection; |
| | | std::string strName; |
| | |
| | | HANDLE m_hSignalOn; |
| | | HANDLE m_hSignalOff; |
| | | int m_nCurStep; |
| | | int m_nWriteSignalDev; // 对æ¹BITå°å |
| | | }; |
| | | } |
| | | |
| | |
| | | <ClInclude Include="CBonder.h" /> |
| | | <ClInclude Include="CCLinkPerformance\CCLinkIEControl.h" /> |
| | | <ClInclude Include="CCLinkPerformance\PerformanceMelsec.h" /> |
| | | <ClInclude Include="CEqAlarmStep.h" /> |
| | | <ClInclude Include="CEqModeStep.h" /> |
| | | <ClInclude Include="CEqStatusStep.h" /> |
| | | <ClInclude Include="CStep.h" /> |
| | | <ClInclude Include="DevicePropertyDlg.h" /> |
| | | <ClInclude Include="CEFEM.h" /> |
| | |
| | | <ClCompile Include="CBonder.cpp" /> |
| | | <ClCompile Include="CCLinkPerformance\CCLinkIEControl.cpp" /> |
| | | <ClCompile Include="CCLinkPerformance\PerformanceMelsec.cpp" /> |
| | | <ClCompile Include="CEqAlarmStep.cpp" /> |
| | | <ClCompile Include="CEqModeStep.cpp" /> |
| | | <ClCompile Include="CEqStatusStep.cpp" /> |
| | | <ClCompile Include="CStep.cpp" /> |
| | | <ClCompile Include="DevicePropertyDlg.cpp" /> |
| | | <ClCompile Include="CEFEM.cpp" /> |
| | |
| | | <ClCompile Include="ToolUnits.cpp" /> |
| | | <ClCompile Include="DevicePropertyDlg.cpp" /> |
| | | <ClCompile Include="CStep.cpp" /> |
| | | <ClCompile Include="AlarmDlg.cpp" /> |
| | | <ClCompile Include="CEqModeStep.cpp" /> |
| | | <ClCompile Include="CEqStatusStep.cpp" /> |
| | | <ClCompile Include="CEqAlarmStep.cpp" /> |
| | | </ItemGroup> |
| | | <ItemGroup> |
| | | <ClInclude Include="AlarmManager.h" /> |
| | |
| | | <ClInclude Include="ToolUnits.h" /> |
| | | <ClInclude Include="DevicePropertyDlg.h" /> |
| | | <ClInclude Include="CStep.h" /> |
| | | <ClInclude Include="AlarmDlg.h" /> |
| | | <ClInclude Include="CEqModeStep.h" /> |
| | | <ClInclude Include="CEqStatusStep.h" /> |
| | | <ClInclude Include="CEqAlarmStep.h" /> |
| | | </ItemGroup> |
| | | <ItemGroup> |
| | | <ResourceCompile Include="Servo.rc" /> |