Files
LinuxMotion/MotionLib/Src/MC_Power.cpp
T
chen 0587f7ac6c feat: 实现 Axis 核心属性与 MC_Power 功能块
- Axis: 新增运动学/功率/错误管理属性(_position 等 10+ 项)
- Axis: 新增 doPower()/readState()/cycle() 接口骨架
- MC_Power: 实现功率使能功能块(边沿检测 + 状态输出)
- GlobalResource: 新增 CreateAxis/GetAxisRefById 全局轴管理
- App/CMakeLists.txt: 添加 GlobalResource.cpp 源文件
- docs: 更新 Axis 属性清单与 MC_Power 设计文档
2026-07-03 10:01:06 +00:00

85 lines
1.5 KiB
C++

/**
* @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;
}
}