BeckHoff <–> Festo Cmmt AS驱动器 EtherCat通讯

目录

一、 设备介绍

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:轴 “设置参考点” 相关信号(可能因重新校准等需求触发暂停 )。
→ 任一信号为 TRUEExecute 置 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:轴故障信号(故障时强制触发停止 )。
→ 任一信号为 TRUEOR 输出 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 等信号,支撑程序判断执行结果、快速排查故障,是自动化产线中运动控制安全停机的核心逻辑 。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容