/** * @file MC_Power.cpp * @author * @brief * @version 0.1 * @date 2026-07-03 * * @copyright Copyright (c) 2026 * */ #include "MC_Power.h" #include "Types.h" namespace plcopen { MC_Power::MC_Power(AXIS_REF& axisRef) : _axisRef(axisRef) { } void MC_Power::cycle() { if(_axisRef.axis == nullptr) { Error = true; ErrorID = MC_ERROR_ID::mcInvalidParameter; Status = false; Busy = false; return; } Axis* axis = _axisRef.axis; Error = false; ErrorID = MC_ERROR_ID::mcNoError; // 上升沿 if(Enable && !_prevEnable) { axis->doPower(true); } // 下降沿 if(!Enable && _prevEnable) { axis->doPower(false); } // 在使能状态下持续更新轴状态 if(Enable) { auto state = axis->readState(); if(state == MC_AXIS_STATE::Standstill) { Busy = false; Status = true; } else if(state == MC_AXIS_STATE::ErrorStop) { Busy = false; Status = false; Error = true; ErrorID = MC_ERROR_ID::mcPowerFailure; } else { Status = false; Busy = false; } } // 保存前置状态 _prevEnable = Enable; } }