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

















暂无评论内容