BeckHoff_FB –> F_SEQ_X3_TrigJob 函数

这个函数 F_SEQ_X3_TrigJob  主要用于控制和监控轴(Axis)的移动操作。它接收控制命令并将其转换为对特定轴的运动指令,同时监测运动状态以确认任务是否完成。

目录

一、函数实例化

1、在FBD编程环境中的应用

2、在ST语言编程环境中的应用

二、函数变量声明

三、函数源 代码

四、函数代码分析

1、代码详细解释

1)初始化函数返回值为 FALSE,表示移动任务尚未完成。

2)输入参数验证:

2.   功能总结

五、函数功能描述

1、适用场合

2、主要功能点

3、注意事项

4、使用建议


一、函数实例化

1、在FBD编程环境中的应用

2、在ST语言编程环境中的应用

二、函数变量声明

FUNCTION F_SEQ_X3_TrigJob: BOOL

(*---------------------------------------------*)
(*IN variables*)
(*---------------------------------------------*)
VAR_INPUT
	iIn_idxElement		:INT;        	(* Elementnumner *)	
	bIn_MoveWP		    :BOOL;       (* Request Element move to WS    (Workposition)  *)	
	bIn_MoveWP_1	    :BOOL;       (* Request Element move to WS_2  (Workposition_2) *)	
	bIn_MoveHP			:BOOL;       (* Request Element move to HP  (HomePosition)  *)	
	iIn_TaskNo	        :INT :=0;      (* Task Number to be started eg :Recipe Number ,Program Number*)
END_VAR

(*---------------------------------------------*)
(*IN/OUT variables*)
(*---------------------------------------------*)



(*---------------------------------------------*)
(*Local Constants*)
(*---------------------------------------------*)
VAR CONSTANT
END_VAR


(*---------------------------------------------*)
(*Local variables*)
(*---------------------------------------------*)
VAR
END_VAR


(*---------------------------------------------*)
(*Lokal temp variables*)
(*---------------------------------------------*)
VAR
END_VAR

(*All VAR_IN_OUT variables have been moved to the end of the declaration due to compatibility reasons*)
VAR_IN_OUT
END_VAR

三、函数源 代码

(*clear function's return value*)  // Dispense + Interpolate Axis
F_SEQ_X3_TrigJob   := FALSE;

(*check index valid and not both inputs true*)
IF 		(iIn_idxElement <= 0)
	OR	(iIn_idxElement > iGC_ELEMENTE_End)
	OR (iIn_TaskNo =0)
	OR (bIn_MoveWP AND bIn_MoveWP_1)	
THEN
	RETURN;
END_IF;


(*Set command in element structure *)
stGV_SYS_ELEMENTS.arstELEMENT[iIn_idxElement].stCMD.bAUTO_WP		:= bIn_MoveWP;
stGV_SYS_ELEMENTS.arstELEMENT[iIn_idxElement].stCMD.bAUTO_WP_1		:= bIn_MoveWP_1;
stGV_SYS_ELEMENTS.arstELEMENT[iIn_idxElement].stCMD.bAUTO_HP		:= bIn_MoveHP;
stGV_SYS_ELEMENTS.arstELEMENT[iIn_idxElement].arstValue[1].rNominal	:= INT_TO_REAL(iIn_TaskNo);

(*Check stoppositions and set function output*)
F_SEQ_X3_TrigJob:=	(bIn_MoveWP AND stGV_SYS_ELEMENTS.arstELEMENT[iIn_idxElement].stFeedBack.stSTATE.bIN_WP
                                AND stGV_SYS_ELEMENTS.arstELEMENT[iIn_idxElement].arstValue[1].rNominal = stGV_SYS_ELEMENTS.arstELEMENT[iIn_idxElement].arstValue[10].rNominal) 
				OR  ( bIn_MoveWP_1 AND NOT stGV_SYS_ELEMENTS.arstELEMENT[iIn_idxElement].stFeedBack.stSTATE.bIN_WP_1);
						

四、函数代码分析

1、代码详细解释

(*clear function's return value*)  // Dispense + Interpolate Axis
F_SEQ_X3_TrigJob   := FALSE;
1)初始化函数返回值为 FALSE,表示移动任务尚未完成。
(*check index valid and not both inputs true*)
IF 		(iIn_idxElement <= 0)
	OR	(iIn_idxElement > iGC_ELEMENTE_End)
	OR (iIn_TaskNo =0)
	OR (bIn_MoveWP AND bIn_MoveWP_1)	
THEN
	RETURN;
END_IF;
2)输入参数验证

检查元素索引是否在有效范围内
确保任务编号不为 0
防止同时激活两个互斥的移动命令 (bIn_MoveWP 和 bIn_MoveWP_1)

(*Set command in element structure *)
stGV_SYS_ELEMENTS.arstELEMENT[iIn_idxElement].stCMD.bAUTO_WP		:= bIn_MoveWP;
stGV_SYS_ELEMENTS.arstELEMENT[iIn_idxElement].stCMD.bAUTO_WP_1		:= bIn_MoveWP_1;
stGV_SYS_ELEMENTS.arstELEMENT[iIn_idxElement].stCMD.bAUTO_HP		:= bIn_MoveHP;
stGV_SYS_ELEMENTS.arstELEMENT[iIn_idxElement].arstValue[1].rNominal	:= INT_TO_REAL(iIn_TaskNo);

3)设置控制命令

将输入的移动命令 (bIn_MoveWP、bIn_MoveWP_1、bIn_MoveHP) 写入到系统元素的命令结构体中
将任务编号转换为实型并存入 arstValue 数组

(*Check stoppositions and set function output*)
F_SEQ_X3_TrigJob:=	(bIn_MoveWP AND stGV_SYS_ELEMENTS.arstELEMENT[iIn_idxElement].stFeedBack.stSTATE.bIN_WP
                                AND stGV_SYS_ELEMENTS.arstELEMENT[iIn_idxElement].arstValue[1].rNominal = stGV_SYS_ELEMENTS.arstELEMENT[iIn_idxElement].arstValue[10].rNominal) 
				OR  ( bIn_MoveWP_1 AND NOT stGV_SYS_ELEMENTS.arstELEMENT[iIn_idxElement].stFeedBack.stSTATE.bIN_WP_1);

4)状态检查和返回值设置

情况 1:当请求移动到工作点 1 (bIn_MoveWP) 时:

确认轴已到达工作点 1 位置 (bIN_WP 为 TRUE)
确认当前任务编号与目标任务编号匹配

情况 2:当请求移动到工作点 2 (bIn_MoveWP_1) 时:

确认轴尚未到达工作点 2 位置 (bIN_WP_1 为 FALSE),表示移动正在进行中

2.   功能总结

这个功能块的核心作用是:

验证输入参数的有效性
设置轴的移动命令
通过反馈信号监测移动状态
根据移动状态更新函数返回值,指示任务是否完成

当轴完成移动并满足条件时,F_SEQ_X3_TrigJob 将被设置为 TRUE,表示任务成功完成。这通常用于触发后续的自动化流程步骤。

五、函数功能描述

这个函数 F_SEQ_X3_TrigJob 是一个用于工业自动化控制系统的功能块,主要用于控制和监控轴(Axis)的移动操作。它接收控制命令并将其转换为对特定轴的运动指令,同时监测运动状态以确认任务是否完成。

1、适用场合

该函数通常用于以下工业自动化场景:

生产线自动化:控制机械臂或传送装置在工作点(WP)之间移动
点胶系统:精确控制喷头在不同位置进行点胶操作
物料搬运系统:控制抓取装置在不同位置之间移动和定位
包装机械:控制包装设备在特定位置执行包装操作
测试设备:控制测试探头在不同测试点之间移动

2、主要功能点

参数验证:确保输入参数合法有效
命令发送:将移动命令发送到指定的轴
状态监测:通过反馈信号监控轴的位置状态
任务完成确认:根据轴的位置和任务编号确认任务是否完成

3、注意事项

互斥命令检查:函数会阻止同时激活 bIn_MoveWP 和 bIn_MoveWP_1 两个互斥命令,使用时应避免这种情况

索引范围检查

iIn_idxElement 必须在有效范围内(1 到 iGC_ELEMENTE_End
超出范围的索引会导致函数直接返回,不执行任何操作

任务编号有效性iIn_TaskNo 不能为 0,否则函数不会执行任何操作

状态反馈依赖:函数依赖于 stFeedBack.stSTATE.bIN_WP 和 stFeedBack.stSTATE.bIN_WP_1 等反馈信号来确认轴的位置状态,确保这些信号正确配置

连续调用:该函数通常需要在每个扫描周期连续调用,以便实时监测和更新轴的状态

错误处理

函数本身不包含详细的错误处理机制
建议在调用该函数的程序中添加额外的错误检测和处理逻辑

任务编号匹配:当执行 bIn_MoveWP 命令时,函数会比较当前任务编号与目标任务编号是否匹配,确保任务的一致性

安全考虑:在实际应用中,应结合硬件限位开关和紧急停止功能,确保设备运行安全

调试建议:调试时可监控 F_SEQ_X3_TrigJob 的返回值以及相关的状态变量,以确认函数的执行情况

4、使用建议

在调用此函数前,确保所有输入参数已正确初始化
为不同的任务分配唯一的任务编号,避免混淆
在实际应用中添加超时检测机制,防止轴运动异常时程序卡死
考虑添加手动操作模式,以便在自动模式出现问题时进行手动干预
在系统设计阶段,为每个轴配置合理的限位保护,防止机械损坏

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

请登录后发表评论

    暂无评论内容