目录
一、 设备介绍
1、Festo驱动器设备
2、应用场景
3、Festo驱动器描述
性能方面
功能方面
二、PLC通讯接配置
1、硬件配置(在etherCat系统中)
2、PDO配置
三、设备通讯接口数据类型定义
1、配置 轴IO数据类型
编辑 2、IN 结构体数据
3、out 结构体
四、通讯功能块变量声明
1、轴实例与PLC变量的映射
2、轴通讯功能块变量声明
五、通讯功能块程序
1、通讯程序调用的主要功能块 AXIS_REF_CiA402_ETC_CMMT_AS
2、通讯程序调用的主要功能块 MC_ReadAxisInfo_Festo
3、通讯程序调用的主要功能块 MC_Power_Festo
4、通讯程序调用的主要功能块 MC_Stop_Festo
5、通讯程序调用的主要功能块 ac_position
6、通讯程序调用的主要功能块 MC_ReadStatus_Festo
7、通讯程序调用的主要功能块 ac_Jog
六、通讯功能块程序分析
1、AXIS_REF_CiA402_ETC_CMMT_AS 功能块
输入接口(_In 后缀 )
输出接口(_Out 后缀 )
2、MC_ReadAxisInfo_Festo (轴状态诊断)
1. 功能块与核心作用
2. 输入接口(左侧 )
3. 输出接口(右侧 )
4. 应用场景与价值
3、MC_Power_Festo
1. 核心功能块:MC_Power_Festo (轴使能控制功能块)
2. 接口与信号含义
输入接口(左侧 )
输出接口(右侧 )
3. 逻辑控制:AND 与使能条件
4. 应用场景与作用
4、MC_Halt_Festo 和 MC_Stop_Festo 功能块
4.1、暂停控制(MC_Halt_Festo)
1. 功能块作用
2. 接口与信号
4.2 停止控制(MC_Stop_Festo)
1. 功能块作用
2. 接口与信号
4.3 核心逻辑与应用场景
1. 暂停(MC_Halt_Festo)
2. 停止(MC_Stop_Festo)
4.4 总结
一、 设备介绍
1、Festo驱动器设备
2、应用场景
Festo 驱动器(以文中 Servo drive CMMT – AS 为例 )具备紧凑设计、精准控制、多协议兼容等特性,其应用场景广泛且多元:
工业自动化产线:在电子、汽车等行业自动化生产线里,用于点 – 点运动、插补运动控制,像电子元件精密组装,通过精准位置、速度控制,把微小元件准确安装到电路板;汽车零部件生产中,控制机械臂搬运、装配部件,提升产线自动化程度与生产效率。
机械制造设备:数控机床、加工中心等设备,借助它实现刀具、工作台的精准运动控制,保证加工精度,比如复杂曲面加工时,通过插补运动控制,让刀具沿精确轨迹运行;还可用于自动化折弯机、冲压机等,控制模具运动,完成金属板材加工。
智能仓储与物流:自动化立体仓库中,堆垛机的升降、横移、货叉伸缩等运动,由驱动器精准控制,实现货物快速存取;物流分拣系统里,控制分拣装置运动,根据货物信息快速、准确分拣,适配电商、快递等行业大规模货物分拣需求。
食品与包装行业:食品灌装、包装设备,如高速灌装机,控制灌装头运动与流量,实现精准定量灌装;包装机械的封切、贴标等动作,通过驱动器控制,保证包装质量与效率,且因能适配不同控制厂商系统,可灵活集成到各类食品包装产线。
医疗设备制造:部分医疗设备,如自动化检测设备、药品生产设备,利用其精准控制特性,实现样本输送、试剂分配等精准操作;在一些康复医疗设备里,控制运动机构,辅助患者进行康复训练,按预设轨迹和速度运行,保障康复效果。
新能源领域:太阳能电池生产设备中,控制硅片搬运、切割、焊接等运动,提升电池生产精度与效率;风力发电设备的变桨系统,通过驱动器控制叶片角度调整,优化风能捕获,提高发电效率,保障设备稳定运行 。
3、Festo驱动器描述
Festo 驱动器(以 CMMT – AS 等为代表 )驱动器描述:
性能方面
紧凑设计:属市场上最紧凑的伺服驱动器之一,节省安装空间,适配小型化、集成化设备布局需求。
精准控制:实现精准的力、速度和位置控制,像直线电缸重复精度可达 ±15μm ,部分摆动驱动器定位重复精度可达 ±0.1° ,保障运动控制高精度,满足电子、精密机械加工等对精度要求严苛场景。
多协议兼容:新多协议版本(如 CMMT – … – MP )集成 Profinet、EtherCAT®、Ethernet/IP、Modbus 等现场总线,能适配不同控制厂商系统,灵活融入各类自动化网络。
环境适应强:部分型号可在极端温度(如 DFPD 系列可 – 50… + 150°C )、高湿度、粉尘等复杂工况稳定运行,适配化工、制药、户外设备等场景。
高效节能:运行中可能量回收,提升能源利用率,契合可持续生产需求。
功能方面
运动控制:支持点对点和插补运动,用于复杂轨迹控制,如机械加工中曲线、曲面加工,自动化产线中多轴联动搬运、装配等。
自优化与调试:具备自动调谐功能,简化调试流程,自动优化旋转和直线运动控制特性,降低调试技术门槛与时间成本。
安全功能:配置标准安全功能(如安全扭矩关闭等 ),无需额外软件即可设置,保障设备运行及人员安全,满足工业安全标准。
模块化与适配:模块化程度高,如 DFPD 摆动驱动器有多种派生型,先导阀孔型标准化,兼容多外围元件,还能与同品牌伺服电机(如 EMMT – AS )等优化适配,也可作为单独执行器单元自动化现有过程阀。
智能诊断与维护:部分可通过软件工具(如 FST )实时监测磨损状态、故障诊断,提前预警潜在问题,内置自润滑设计等减少维护频率,提升设备运维效率。
二、PLC通讯接配置
1、硬件配置(在etherCat系统中)
2、PDO配置
三、设备通讯接口数据类型定义
1、配置 轴IO数据类型
2、IN 结构体数据
TYPE ST_AI_FROM_AXIS :
STRUCT
In_Position :BOOL; (* Axes is in position *)
Ready :BOOL; (* axes is ready *)
IsMoving :BOOL; (* axes is moving *)
StandStill :BOOL; (* axes is NOT moving *)
JogMode :BOOL; (* Jog Mode *)
PositionControl :BOOL; (* Mode AUTO => position control *)
Error :BOOL; (* Common Axes Error, see local axes for more details *)
HasReference :BOOL; (* Axes has reference *)
ACT_POS :REAL; (* mm *)
MaxSpeed :REAL; (* mm/sec *)
Diagnose :WORD; (* axes specific diagnose*)
arState :ARRAY[1..10] OF BOOL;
END_STRUCT
END_TYPE
3、out 结构体
TYPE ST_AI_TO_AXIS :
STRUCT
PowerOn :BOOL; (* HighPower ON *)
ControlRelease :BOOL; (* Release all movement / controller release *)
JogMode :BOOL; (* jog mode active (Option) *)
PositionControl:BOOL; (* position control (Option) *)
CMD_START_POS :BOOL; (* start poitioning *)
CMD_JOG_P :BOOL; (* jog (+) *)
CMD_JOG_N :BOOL; (* jogn (-) *)
QuittError :BOOL; (* error reset *)
NewPosition :BOOL; (* SET BY Rob RES BY Axes *)
SetReference :BOOL; (* set reverence position *)
CMD_POS :REAL; (* set position *)
rSpeed :REAL; (* override % 0-100 *)
iACCEL :INT; (* % 0-100 *)
iDECEL :INT; (* % 0-100 *)
Reference_Value :REAL; (* Referenz Wert *)
PosWindow :REAL; (* *)
arCmd :ARRAY[1..10] OF BOOL;
END_STRUCT
END_TYPE
四、通讯功能块变量声明
1、轴实例与PLC变量的映射
2、轴通讯功能块变量声明
FUNCTION_BLOCK FB_DRIVER_061_Festo_CMMT_Ethercat_V3_9_0
(*---------------------------------------------*)
(*IN Variablen*)
(*---------------------------------------------*)
VAR_INPUT
iIn_idxElement :INT := 0;(*!!!UNIQUE!!! Element identification for usage with multiaxis*)
rINMaxSpeed :REAL := 1.0 ; (* mm/ sec Factor Group in Amplifier = 10^-3*)
rInMaxAcceleration :REAL := 20000 ; (* mm / sec^2 Factor Group in Amplifier = 10^-3*)
rInMaxJerk :REAL := 50000 ; (* mm / Sec^3 Factor Group in Amplifier = 10^-3*)
bInswitch_reference :BOOL := FALSE; (* physikal reference switch *)
rInReferenceValue :REAL := 0.0; (* Reference Value for axis. Position to be set when reference is true*)
bInReleaseSetReferenceValue :BOOL := FALSE; (* Secure Release to overwrite Reference Position for absolut axis *)
bIn_Limitswitch_minus_OK :BOOL := TRUE; (* Signal has to be true when axis is not on switch *)
bIn_Limitswitch_plus_OK :BOOL := TRUE;
bIn_Safety_OK :BOOL;
bIn_Release_Homing :BOOL :=FALSE; (* Release the Homing Switch to TRUE if Homing is required*)
tIN_MaxtimePositioning :TIME:=T#10S;
bIN_Setup_mode :BOOL;
rIN_SetupVelocity :REAL := 3.5;
END_VAR
(*---------------------------------------------*)
(*OUT Variables*)
(*---------------------------------------------*)
VAR_OUTPUT
qOut_Release_Axis :BOOL;
stOUT_AxisState : AXIS_STATE;
END_VAR
(*---------------------------------------------*)
(*IN/OUT Variables*)
(*---------------------------------------------*)
VAR_IN_OUT
AI :ST_AXIS_INTERFACE; (* Axis Interface used for other systems eg. robot *)
END_VAR
(*---------------------------------------------*)
(*lokal constants*)
(*---------------------------------------------*)
VAR CONSTANT
END_VAR
(*---------------------------------------------*)
(*lokal variables*)
(*---------------------------------------------*)
VAR
fbSE_Error :TON; (*Delay Error*)
(* Requests *)
bVar_REQ_WP :BOOL; (*Request --> WP*)
bVar_REQ_HP :BOOL; (*Request --> HP*)
bVar_REQ_INIT :BOOL; (*Request --> INIT*)
bVar_REQ_POSITION :BOOL; (*Request --> Position*)
(* Outputs *)
bVar_OUT_WP : BOOL ; (*Output WP*)
bVar_OUT_HP : BOOL ; (*Output HP*)
bVar_OUT_INIT : BOOL ; (*Output INIT*)
bVar_OUT_POSITION : BOOL ; (*Output POSITION*)
(* MC POU InstnacesTcMC_v2) *)
fbVar_Power : MC_Power_Festo;(* MC_Power *)
fbVar_Home : MC_Home_Festo;(* MC_Home *)
fbVar_MoveAbsolut : MC_MoveAbsolute_Festo;(* MC_MoveAbsolute *)
fbVar_Stop : MC_Stop_Festo;(* MC_Stop *)
fbVar_Reset : MC_Reset_Festo;(* MC_Reset NC-Axis in TC Systemmanager // Maybe another Reset of Axis controller ist necessary*)
fbVar_Jog : MC_Jog_Festo;(* MC_Jog *)
(*fbVar_SetPos : MC_SetPosition_Festo;(* MC_SetPosition*)*)
fbVar_ReadActPos : MC_ReadActualPosition_Festo;(* MC_ReadActualPosition*)
fbVar_ReadStatus : MC_ReadStatus_Festo;(* MC_ReadStatus*)
fbVar_WriteParam : MC_WriteParameter_Festo;(* MC_WriteParameter Attetntion: Writes only parameter to Na-Axis in system manager and not to physical drive!*)
fbVar_AxesError : MC_ReadAxisError_Festo;
fbVar_Halt : MC_Halt_Festo;
fbVar_AxisInfo : MC_ReadAxisInfo_Festo;
fbVar_HomeAxis : MC_Home_Festo;
CMMT_AS : AXIS_REF_CiA402_ETC_CMMT_AS;
R_TRIG_Reference: R_TRIG;
F_TRIG_Reference: F_TRIG;
fbVar_WriteZeroPoint: MC_WriteParameter_Festo;
fbVar_WriteZeroPoint2: FB_CoEWrite;
(*WP internal variable Do not change! *)
SFCEnableLimit :BOOL;(*Aktivate monitoring time // True = ON / False = OFF*)
SFCQuitError :BOOL;(*Reset SFCError Flags + Reset Timer acutal step*)
SFCReset :BOOL;(*Reset seqeunce with activate init step!*)
SFCInit :BOOL;(*Reset seqeunce without activate init step!*)
SFCPause :BOOL;(*if varaible is True sequence is stopped*)
SFCError :BOOL;(*TimeOut Error!*)
SFCTrans :BOOL;(*Step Transition has Occured*)
(* Timer and Trigger! *)
fbiVar_TonDelay : TON;(* standard delay for sequences! *)
fbiRtrigError1 :R_TRIG;
fbiRtrigTarget :R_TRIG;
fbiRtrigPOS0 :R_TRIG;
fbiRtrigPOS1 :R_TRIG;
fbiRtrigSwPosNeg :R_TRIG;
fbiRtrigSwPosPos :R_TRIG;
iVar_idxMan_POS_LastCycle :INT; (* temp varaible to recognize changes of ManualPosIdx*)
(* collective error *)
(* bVar_FAILURE :BOOL; (*error active*)
bVar_FAILURE_WithoutEndSwitches :BOOL;(* error without end position switches! *)
*)
(* Diagnostic informations *)
(* ErrorCodes *)
udiVar_StatusErrorId :UDINT;
udiVar_HomingErrorId :UDINT;
udiVar_PositioningErrorId :UDINT;
fbVar_Reset_SoEReset: FB_SoEReset;
rSpeed: REAL;
bCmdStop: BOOL;
fbVar_MoveAbsolut1: MC_MoveAbsolute_Festo;
bMotionParametersChanged: BOOL;
rMemSpeed: REAL;
rMemPosition: REAL;
bVar_OUT_POSITION0: BOOL;
bVar_OUT_POSITION1: BOOL;
fbiRtrigMotionParameterChanged: R_TRIG;
byMemExecute: BYTE;
fbiTOFCopyActPosToTeachPos: TOF;
fbRTrig_Stop: R_TRIG;
rAccel: REAL;
rDecel: REAL;
fbTONErrorPositionung: TON;
iIndex: INT;
rPosition: REAL;
btest: BOOL;
fbiTONStandstill: TON;
fbTONErrorPositionungNotinPos: TON;
//sNetId : T_AmsNetId := '172.22.15.60.2.1';
//nSlaveAddr : UINT := 1030;
nIndex : WORD := 16#2002;
nIndex1 : WORD := 2002;
nSubIndex : BYTE :=1;
nSubIndex1 : BYTE :=2;
vendorId0 : INT := 0;
vendorId1 : INT := 1;
vendorId : UDINT := 29;
bError : BOOL;
nErrId : UDINT;
FB_EcCoeSdoReadEx_0: FB_EcCoeSdoReadEx;
FB_EcCoeSdoWriteEx_0: FB_EcCoESdoWriteEx;
FB_EcCoeSdoWriteEx_1: FB_EcCoESdoWriteEx;
RELEASE_Homing: BOOL;
bAxisInMotion :BOOL;
rSpeedSetup: REAL;
bOverrangerSpeed: BOOL;
bGeneralRelease :BOOL;
//SAVE
bSaveError1: BOOL;
bSaveError2: BOOL;
bSaveerror3: BOOL;
bSaveEroor_Pos0: BOOL;
bSaveEroor_Pos1: BOOL;
bSaveErrorInPosition: BOOL;
tTimeError1: TIME;
tTimeError2: TIME;
wSaveErrorPower_ID: WORD;
szSaveErrorPower_String: STRING;
wSaveErrorHalt_ID: WORD;
szSaveErrorHalt_String: STRING;
wSaveErrorStop_ID: WORD;
szSaveErrorStop_String: STRING;
rTragetPos: REAL;
rActpos: REAL;
CountRtrigPOs0:INT;
CountRtrigPOs1:INT;
CountParameterchanged:INT;
stSaveAxisState0: AXIS_STATE;
stSaveAxisState1: AXIS_STATE;
fbi_RTRIG_PowerError: R_TRIG;
fbi_RTRIG_HaltError: R_TRIG;
fbi_RTRIG_StopError: R_TRIG;
rPositionPosition0: REAL;
rPositionPosition1: REAL;
END_VAR
(*---------------------------------------------*)
(*local temp variable*)
(*---------------------------------------------*)
VAR
bTemp_PosOk :BOOL; (*axis in position window*)
(* stTemp_ELEMENT :ST_SYS_ELEMENTS;(*structure of element*)*)
wTemp_Diagnose :WORD;(*temp variable for messages
BIT.0 = Timeout sequence
BIT.1 =axis error
BIT.2 = following error
BIT.3 = no reference. positioning not possible
BIT.4 = end switch wp (+) reached
BIT.5 = endswitch hp (-)reached
BIT.6 = softwarelimit wp (+) reached
BIT.7 = softwarelimit hp (-) reached
BIT.8 = error during positioning
BIT.9 = error during referencing
BIT.10 = setposition out of limit
BIT.11 = Controller Error
BIT.12 = Power Error
BIT.13 = Jog Error
BIT.14 = Stop Error
BIT.15 = *)
END_VAR
五、通讯功能块程序
1、通讯程序调用的主要功能块 AXIS_REF_CiA402_ETC_CMMT_AS
2、通讯程序调用的主要功能块 MC_ReadAxisInfo_Festo
3、通讯程序调用的主要功能块 MC_Power_Festo
4、通讯程序调用的主要功能块 MC_Stop_Festo
5、通讯程序调用的主要功能块 ac_position
6、通讯程序调用的主要功能块 MC_ReadStatus_Festo
7、通讯程序调用的主要功能块 ac_Jog
六、通讯功能块程序分析
1、AXIS_REF_CiA402_ETC_CMMT_AS 功能块
这是 Festo 驱动器 CMMT – AS 在基于 CiA402 协议(结合 EtherCAT 等总线,从AXIS_REF_CiA402_ETC_CMMT_AS
可推测 )的控制系统中,用于运动控制轴(AXIS)的功能块(Function Block)接口定义,以下拆解各接口含义及作用:
输入接口(_In
后缀 )
McState_In
:
一般用于接收运动控制层(Motion Control,Mc )的状态指令,比如控制器下发的轴使能、轴复位、轴停止等状态控制信号,决定驱动器运动控制状态切换 。
SlaveState_In
:
关联从站(Slave,驱动器作为 EtherCAT 等总线从站 )状态,主站通过该接口获取或设置从站通信、运行相关状态,像从站初始化完成、从站故障恢复等状态交互 。
AdsAddr_In
:
若涉及 ADS(Automation Device Specification,常用于 Beckhoff 等控制系统的通信协议 )通信,此接口用于配置驱动器在 ADS 网络中的地址信息,建立主站与驱动器的通信连接标识 。
Statusword_In
:
驱动器状态字输入,主站可通过该接口读取驱动器实时状态,如驱动器是否就绪(Ready )、是否运行(Running )、有无故障(Fault )等关键状态信息,对应 CiA402 协议中状态字(通常对象字典索引 0x6041
)相关功能 。
ModesOfOperationDisplay_In
:
接收运行模式显示信息,主站可读取驱动器当前运行模式,如 CiA402 协议支持的周期同步位置(CSP )、轮廓位置(PP )、速度模式(PV )等,方便主站监控与模式切换控制 。
PositionActualValue_In
:
驱动器轴实际位置值输入,主站通过该接口获取轴当前实际位置数据,用于位置闭环控制、位置监控等,是运动控制中位置反馈的关键参数 。
VelocityActualValue_In
:
轴实际速度值输入,主站读取驱动器实时速度数据,可用于速度闭环控制、速度监测,保障运动过程速度精准控制 。
TorqueActualValue_In
:
轴实际扭矩(或力矩 )值输入,主站获取实时扭矩数据,在需要力矩控制、力矩监测的场景(如精密装配防碰撞 ),用于反馈控制与安全保护 。
输出接口(_Out
后缀 )
InitErrorInfo
:
初始化错误信息输出,若驱动器初始化过程中出现错误(如参数配置错误、通信故障 ),通过该接口反馈具体错误代码或提示,方便主站诊断初始化问题 。
AxisState
:
轴状态输出,对应 CiA402 协议中轴状态机的状态,如未就绪(Not Ready )、就绪(Ready )、运行(Operation Enabled )、故障(Fault )等状态,主站据此判断轴整体运行状态 。
ActiveMoveFB
:
运动功能块激活状态输出,指示当前哪个运动功能块(如位置运动、速度运动功能块 )处于激活执行状态,用于主站监控运动控制流程 。
ActiveHaltFB
:
暂停(Halt )功能块激活状态输出,当驱动器执行暂停动作时,该接口反馈激活信号,主站可据此判断暂停指令执行情况 。
ActiveParameterFB
:
参数功能块激活状态输出,若驱动器在执行参数配置、参数更新等与参数相关的功能块操作,通过该接口反馈,主站可监控参数调整过程 。
Controlword_Out
:
控制字输出,主站通过该接口下发控制指令到驱动器,对应 CiA402 协议中控制字(通常对象字典索引 0x6040
),如启动、停止、急停、模式切换等控制命令,是主站控制驱动器运动的核心指令接口 。
ModesOfOperation_Out
:
运行模式输出,主站通过该接口设置驱动器运行模式,如选择 CSP、PP、PV 等模式,与 ModesOfOperationDisplay_In
配合,实现模式设置与反馈 。
TargetPosition_Out
:
目标位置输出,主站通过该接口下发轴运动的目标位置指令,用于位置控制模式(如 CSP、PP ),驱动器依据此参数规划运动轨迹、控制运动到指定位置 。
ProfileVelocity_Out
:
轮廓速度输出,在速度控制、位置控制(需规划速度曲线 )等模式下,主站设置运动轮廓的速度参数,驱动器按此速度规划运动过程,保障运动平稳性与精度 。
TargetVelocity_Out
:
目标速度输出,主站下发轴运动的目标速度指令,用于速度控制模式(PV ),驱动器控制轴按设定速度运行 。
TargetTorque_Out
:
目标扭矩输出,主站设置轴运动的目标扭矩(力矩 )指令,用于力矩控制模式,在需要精准力矩输出的场景(如柔性装配 ),控制驱动器输出对应力矩 。
2、MC_ReadAxisInfo_Festo (轴状态诊断)
1. 功能块与核心作用
MC_ReadAxisInfo_Festo
是用于读取 Festo 伺服轴(由 CMMT_AS
等驱动器控制的运动轴 )状态、诊断信息的功能块,在 PLC 程序中调用,可获取轴的运行状态、限位、故障等数据,支撑设备监控、故障诊断与自动化流程控制。
2. 输入接口(左侧 )
Axis
:
连接 Festo 驱动器对应的轴对象(如 CMMT_AS
轴实例 ),是功能块与实际驱动器轴建立关联的 “通道”,告诉功能块要读取哪个轴的信息。
Enable
:
使能信号,通常关联故障检测(如 fbVar_ReadStatus.Error
),为 TRUE
时功能块执行读取操作;若驱动器或轴有错误(Error
触发 ),可借此条件控制是否继续读取,或用于故障时强制使能 / 禁用读取逻辑。
UpdateTime
:
更新周期,配置为 t#3s
(3 秒 ),功能块按此周期周期性读取轴信息,平衡系统通信负载与状态实时性需求。
3. 输出接口(右侧 )
状态标识(Valid
到 PowerOn
):
Valid
:读取的数据是否有效(如通信正常、无错误时为 TRUE
),判断读取结果可靠性。
Busy
:功能块是否处于 “忙碌” 读取状态,用于程序逻辑中避免重复 / 冲突调用。
HomeAbsSwitch
/IsHomed
:回零相关,前者检测回零绝对值开关信号,后者标识轴是否已完成回零,是定位控制的基础状态。
IsMoving
:轴是否正在运动(如执行位置 / 速度指令 ),用于判断运动状态。
HwLimitSwitchPos/Neg
:硬件正负限位开关状态,轴触发硬件限位时置 TRUE
,触发设备安全保护。
SwLimitSwitchPos/Neg
:软件正负限位状态,通过程序配置的软限位触发时置 TRUE
,辅助安全控制。
StrokeLimitPos/Neg
:行程极限状态,标识轴是否达到机械 / 程序定义的行程边界。
CommunicationReady
:驱动器与控制系统通信是否就绪(如总线连接正常、初始化完成 )。
PowerOn
:驱动器使能上电状态,轴动力输出是否激活。
诊断信息(AxisWarning
到 ErrorString
):
AxisWarning
:轴是否有警告(非致命故障,如参数超范围但仍可运行 )。
Error
:轴是否有错误(致命故障,如通信中断、硬件故障 ),图中关联 sTemp_Diagnose.11
(可能是全局诊断变量 ),用于触发故障处理逻辑。
ErrorID
:错误代码,标识具体故障类型(如通信错误代码、过载代码 ),方便故障定位与排查。
ErrorString
:错误描述字符串,直观展示故障原因(如 “通信超时”“过载保护触发” ),简化调试与运维。
4. 应用场景与价值
设备监控:在产线运行中,通过 IsMoving
PowerOn
等状态,实时掌握轴运动状态;用 HwLimitSwitch
StrokeLimit
监控轴运行边界,预防碰撞。
故障诊断:Error
ErrorID
ErrorString
快速定位故障(如通信中断、硬件限位触发 ),结合 Enable
逻辑,可在故障时自动禁用轴、触发报警。
自动化流程:回零状态(IsHomed
)用于产线启动初始化;运动状态(IsMoving
)配合工艺逻辑,实现 “运动完成后触发下一工序” 等流程。
3、MC_Power_Festo
1. 核心功能块:MC_Power_Festo (轴使能控制功能块)
MC_Power_Festo
是 Festo 针对其驱动器(如伺服驱动器、步进驱动器等运动控制设备 )开发的 “轴使能控制功能块” ,作用是控制驱动器的电源使能状态(简单说就是让驱动器 “上电待命” 或 “断电停止” ),常见于运动控制程序中,确保轴在安全、可控的条件下启动运行。
2. 接口与信号含义
输入接口(左侧 )
Axis
:
连接 Festo 驱动器对应的轴对象(CMMT_AS
轴实例 ),告诉功能块 “要控制哪个驱动器的轴” 。
Enable
:
使能信号,为 TRUE
时激活驱动器使能(让驱动器上电、进入可运行状态 );为 FALSE
时,驱动器断电或退出使能,轴无法执行运动指令。
输出接口(右侧 )
Status
:
驱动器使能状态反馈(如使能中、已使能、故障禁止使能等 ),程序可通过读取该状态判断使能是否成功。
Valid
:
标识功能块输出数据是否有效(比如通信正常、参数配置正确时为 TRUE
),避免程序误读无效状态。
Error
:
故障信号,为 TRUE
时表示使能过程或驱动器存在错误(如硬件故障、参数冲突 ),图中关联 sTemp_Diagnose.12
(可能是全局诊断变量,用于记录 / 触发故障报警 )。
ErrorID
:
具体错误代码,标识故障类型(如通信错误代码 0x1001
、过载错误代码 0x2003
等 ),方便快速定位问题。
ErrorString
:
错误描述字符串(如 “通信超时”“驱动器过载” ),直观展示故障原因,简化调试。
3. 逻辑控制:AND
与使能条件
AND
是逻辑 “与” 运算,用于组合两个条件,决定 Enable
信号是否触发:
ai.TO_AXIS.ControlRelease
:
通常是 “允许控制释放” 信号,可能来自上级控制逻辑(如手动 / 自动模式切换完成、安全门关闭允许轴运行 ),为 TRUE
时表示系统允许驱动器使能。
ai.FROM_AXIS.Error
(注意图中是取反 ○
,实际逻辑是 NOT ai.FROM_AXIS.Error
):
来自轴的故障反馈,ai.FROM_AXIS.Error
为 TRUE
表示轴存在故障 → 取反后,只有 “轴无故障” 时,该条件为 TRUE
。
→ 最终 AND
输出逻辑:
只有当 ai.TO_AXIS.ControlRelease = TRUE
(系统允许控制 ) 且 ai.FROM_AXIS.Error = FALSE
(轴无故障 )时,Enable
才为 TRUE
,触发驱动器使能;任一条件不满足,Enable
为 FALSE
,驱动器无法使能(或保持失能 )。
4. 应用场景与作用
安全控制:
通过 ai.FROM_AXIS.Error
确保 “轴无故障时才允许使能”,避免带故障运行引发事故;ai.TO_AXIS.ControlRelease
可关联安全门、急停等信号,保障人员 / 设备安全。
故障诊断:
Error
ErrorID
ErrorString
实时反馈使能过程问题(如通信中断导致使能失败 ),方便快速排查。
运动控制流程:
驱动器使能是轴执行运动指令(如定位、速度控制 )的前提,该逻辑确保轴在 “安全、系统允许” 的条件下启动,是自动化产线、设备运动控制的基础环节。
4、MC_Halt_Festo 和 MC_Stop_Festo 功能块
这是基于 Festo 驱动器(CMMT_AS 轴) 的运动控制程序逻辑,包含 暂停(MC_Halt_Festo
) 和 停止(MC_Stop_Festo
) 两个功能块,用于实现轴的紧急暂停、有序停止控制。以下拆解核心逻辑:
4.1、暂停控制(MC_Halt_Festo
)
1. 功能块作用
MC_Halt_Festo
是 “轴暂停功能块” ,用于让运动中的轴立即减速停止(通常是紧急暂停或临时中断运动),常见于设备急停、工艺临时中断场景。
2. 接口与信号
输入(左侧)
Axis
:关联 Festo 驱动器轴(CMMT_AS
),指定控制对象。
Execute
:触发暂停的 “或” 逻辑(OR
运算):
bCmdStop
:手动 / 程序指令触发的 “暂停命令”(如急停按钮、工艺暂停信号 )。
ai.TO_AXIS.SetReference
:轴 “设置参考点” 相关信号(可能因重新校准等需求触发暂停 )。
→ 任一信号为 TRUE
,Execute
置 TRUE
,触发暂停。
输出(右侧)
Done
:暂停完成(轴已停止运动 )。
Busy
:暂停执行中(功能块正在处理暂停逻辑 )。
Active
:暂停指令激活(功能块处于工作状态 )。
CommandAborted
:暂停命令被中断(如触发暂停后又强制取消 )。
Error
:暂停过程中出现错误(如轴故障导致无法暂停 ),关联 sTemp_Diagnose.14
(全局诊断变量,记录故障 )。
ErrorID
/ErrorString
:错误代码 / 描述,用于定位故障原因(如 “轴未使能无法暂停” )。
4.2 停止控制(MC_Stop_Festo
)
1. 功能块作用
MC_Stop_Festo
是 “轴停止功能块” ,用于让轴有序停止运动(通常是正常停机、工艺结束场景,可配置减速曲线 ),保障设备平稳停机。
2. 接口与信号
输入(左侧)
Axis
:关联 Festo 驱动器轴(CMMT_AS
),指定控制对象。
Execute
:触发停止的 “与 – 或” 组合逻辑:
“或” 逻辑(上层 OR
):
ai.TO_AXIS.ControlRelease
:系统 “控制释放” 信号(如模式切换为手动、安全门打开 )。
bGeneralRelease
:全局 “释放” 信号(可能关联设备总停机 )。
ai.FROM_AXIS.Error
:轴故障信号(故障时强制触发停止 )。
→ 任一信号为 TRUE
,OR
输出 TRUE
。
“与” 逻辑(下层 AND
):
上层 OR
输出为 TRUE
(触发停止条件满足 )。
bAxisInMotion
:轴正在运动(避免轴静止时误触发停止 )。
→ 两个条件同时满足,Execute
置 TRUE
,触发停止。
输出(右侧)
Done
:停止完成(轴已平稳停机 )。
Busy
:停止执行中(功能块正在处理停止逻辑 )。
CommandAborted
:停止命令被中断(如触发停止后又强制取消 )。
Error
:停止过程中出现错误(如轴故障导致无法停止 ),关联 sTemp_Diagnose.15
(全局诊断变量,记录故障 )。
ErrorID
/ErrorString
:错误代码 / 描述,用于定位故障原因(如 “减速曲线参数错误” )。
4.3 核心逻辑与应用场景
1. 暂停(MC_Halt_Festo
)
触发条件:急停(bCmdStop
)、校准(ai.TO_AXIS.SetReference
)等紧急 / 临时场景。
作用:让轴立即停止(通常是快速制动 ),优先保障安全或工艺临时中断。
2. 停止(MC_Stop_Festo
)
触发条件:系统释放(ai.TO_AXIS.ControlRelease
)、全局停机(bGeneralRelease
)、轴故障(ai.FROM_AXIS.Error
)且轴正在运动(bAxisInMotion
)。
作用:让轴有序停机(如按减速曲线平稳停止 ),避免急停导致设备振动、工件损坏,适用于正常工艺结束、系统切换模式等场景。
4.4 总结
这是一套 “Festo 轴的暂停 + 停止控制逻辑” :
暂停(MC_Halt_Festo
)用于紧急 / 临时中断,快速让轴停止;
停止(MC_Stop_Festo
)用于正常停机 / 故障处理,让轴平稳停止。
通过 “或”“与” 逻辑组合触发条件,保障控制的灵活性与安全性;输出的 Done
Error
等信号,支撑程序判断执行结果、快速排查故障,是自动化产线中运动控制安全停机的核心逻辑 。
暂无评论内容