BeckHoff ---> 3轴插补(Interpolate)涂胶控制程序

目录

一、功能块描述

1、功能块调用

2、功能块描述

2.   3 轴插补涂胶功能块 (FB) 功能描述

2.1 功能块基本信息

2.2 功能块核心功能

1. 多轴运动控制

2. 涂胶任务管理

3. 校准与补偿系统

4. 安全与诊断功能

2.3 功能块工作流程

2.4 功能块接口说明

2.5 应用场景

二、功能块变量声明

三、3轴插补涂胶轴功能块 代码

四、3轴插补涂胶功能块代码说明

4.1轴插补涂胶功能块代码解析

4.1.1 初始化与数据映射

4.1.2 请求处理与命令重置

4.1.3 诊断与状态机启动逻辑

4.1.4 状态机核心控制逻辑

4.1.5 涂胶程序加载与执行

4.1.6 Z 轴校准流程

4.1.7 错误处理与状态重置

4.2 整体功能总结

五、附录


一、功能块描述

1、功能块调用

2、功能块描述

2.   3 轴插补涂胶功能块 (FB) 功能描述

2.1 功能块基本信息
  • 名称:3 轴插补涂胶控制功能块
  • 用途:实现 XYZ 三轴联动控制,完成高精度涂胶轨迹规划、执行与校准
  • 接口类型
    • 输入:轴状态反馈、程序号、补偿值、操作模式等
    • 输出:轴控制信号、状态反馈、错误诊断等
  • 核心特性:状态机驱动、插补计算、动态补偿、多任务管理
2.2 功能块核心功能
1. 多轴运动控制
  • 轴使能与回零
    • 自动检测轴使能状态,支持手动 / 自动模式下的轴启用 / 禁用
    • 集成回零流程,确保轴位置基准准确
  • 轨迹插补
    • 支持 XYZ 三轴联动插补,实现复杂涂胶轨迹
    • 根据程序号动态加载不同轨迹参数
  • 运动控制信号
    • 输出启动 / 停止 / 暂停信号
    • 控制 CNC 程序加载与执行
2. 涂胶任务管理
  • 多任务支持
    • 支持 8 种预定义任务(程序号 1-8):
      • 1:回零任务
      • 2:胶量称重
      • 3:胶针清理
      • 4:XY 轴校准
      • 5-7:不同工件的涂胶轨迹
      • 8:Z 轴校准
  • 任务参数配置
    • 动态加载目标程序号
    • 根据任务类型自动配置补偿参数
3. 校准与补偿系统
  • 轴校准
    • XY 轴校准(程序号 4):记录当前位置与参考值偏差
    • Z 轴校准(程序号 8):专用校准程序,确保涂胶高度精准
  • 动态补偿
    • 根据校准结果计算 XYZ 轴补偿值
    • 实时应用补偿值到运动轨迹
    • 支持不同任务的差异化补偿策略
4. 安全与诊断功能
  • 错误检测
    • 轴错误检测(EtherCAT 错误、运动错误)
    • 程序号调用错误检测
    • 校准传感器故障检测
  • 超时保护
    • 各状态均设置时间阈值,防止设备卡死
    • 执行超时自动触发错误处理
  • 状态监控
    • 实时反馈轴使能、回零、运动状态
    • 错误状态标志位输出
2.3 功能块工作流程
  1. 初始化阶段

    • 映射输入数据,初始化状态标志位
    • 重置轴控制信号,清除错误状态
  2. 任务请求处理

    • 检测涂胶任务请求(手动 / 自动模式)
    • 验证启动条件(无错误、轴就绪)
  3. 状态机执行

    • 使能检查与轴回零
    • 程序号加载与参数配置
    • 轨迹执行与动态补偿
    • 任务完成检测
  4. 校准流程

    • 触发轴校准程序(程序号 4/8)
    • 记录校准数据,计算补偿值
    • 应用补偿值到后续任务
  5. 错误处理

    • 检测到错误时重置状态
    • 记录错误类型,输出诊断信息
    • 错误清除后回到初始状态
2.4 功能块接口说明
接口类型 接口名称 功能描述
输入 stTemp_CELL 单元模式与状态输入
输入 stTemp_ELEMENT 元素命令与反馈输入
输入 iIn_CleanNo 清理次数输入
输入 ib_Release_StartTask 任务启动释放信号
输出 stInterpolation_AxisIF.Out 轴控制信号输出
输出 wTemp_Diagnose 诊断错误字输出
输出 stTemp_ELEMENT.stFeedBack 反馈状态输出
2.5 应用场景
  • 电子制造:PCB 板元件封装涂胶
  • 汽车工业:零部件密封胶涂覆
  • 医疗器械:精密部件粘接涂胶
  • 航空航天:复合材料涂层施工

二、功能块变量声明


FUNCTION_BLOCK FB_TYP_190_Interpolate_Axis_V2_0_1

(*---------------------------------------------*)
(*IN variables*)
(*---------------------------------------------*)
VAR_INPUT
	iIn_idxElement				: INT;							(* !!!UNIQUE!!! Element identification*)
	ist_HWIn     				: ARRAY [0..31] OF BYTE;		(* Profinet-interface: Inputs *)
	iCalibration_Sensor1        : BOOL:=0;	                     //AxisX Calibration Sensor
	iCalibration_Sensor2        : BOOL:=0;	                     //AxisY Calibration Sensor	
	iCalibration_Sensor3        : BOOL:=0;	                     //AxisZ Calibration Sensor		
	ib_Release_StartTask		: BOOL:=0;						(* Enable for task execution *)	
	ib_ResetDrives      	    : BOOL:=0;                      (* Reinitilize drives, only use when serious error happend *)	
	ir_Max_Timer                : REAL:=30.0;                   (*Track Execute Max Timer *)	
	ib_Handshake_AckM  		    : BOOL:=0;						(* Acknowledgement Mcode *)	
	ib_BdAutoPurge 		        : BOOL:=0;						(*  *)	
	iIn_CleanNo 				: INT:=0;						(*刮胶次数*)	
	ib_Simulation    		    : BOOL:=0;						(* 仿真 *)			
END_VAR

(*---------------------------------------------*)
(*IN/OUT variables*)
(*---------------------------------------------*)
VAR_IN_OUT
	stINOUT_SYS_CELL					:ST_SYS_CELL;
	io_bBulid_Datum                     : BOOL:=0;						(* 基准建立 *)		
END_VAR

(*---------------------------------------------*)
(*OUT variables*)
(*---------------------------------------------*)
VAR_OUTPUT
	ost_HWOut 					: ARRAY [0..31] OF BYTE;		(* Profinet-interface: Outputs *)
	ob_Enabled                  : BOOL; // Drives are enabled
	ob_Homed                    : BOOL; // Drives are homed	
	ob_MActive                  : BOOL; // CNC M code active, waiting for AckM to continue movement
	oui_ActiveMcode             : USINT; // Active M code in CNC // Need Reset	
	oui_ActiveHcode             : INT;  // Active H code in CNC // Not Need Reset		
	or_ActPosData                : ARRAY [1..5] OF REAL;		(* Axis Actual Position 1-3 当前位置,4-5 XY待机位置*)
END_VAR

(*---------------------------------------------*)
(*Local variables*)
(*---------------------------------------------*)
VAR
    stInterpolation_AxisIF	    :ST_Interpolate_Axis; 				(* Interpolation Axis Interface I/0 *)		
	Dly_Ton			            : TON;
	Execution_Timeout           : TON;
	Start_Rtrig		            : R_TRIG;	
	Step                        :INT;
	Start_Condition             :BOOL;
	tTimer                      :TIME;
	tTimer_TimeOut              :TIME;	
    UnpackDWord                 :MEM.UnpackDWord;
	UnpackWord                  :MEM.UnpackWord;
	Cmd_Type                    :USINT:=0; //1=无交互Home/Clean,2=无交互Calibration XY 方向,3=涂胶轨迹 
END_VAR

(*---------------------------------------------*)
(*Local temp variables*)
(*---------------------------------------------*)
VAR
	stTemp_CELL					: ST_SYS_CELL;					(* Cell structure for element*)
	stTemp_ELEMENT				: ST_SYS_ELEMENTS;				(* Data structure of element *)
	tTemp_T_Ticker			    :TIME;(* actual CPU-Tick *)

	bVar_REQ_WP_1				: BOOL;  // 
	bVar_REQ_WP					: BOOL;  // start CNC Track

	wTemp_Diagnose				: WORD;(*Error Messages
									BIT.0	Robot: Collective Error
									BIT.1	Robot: Task number invalid
									BIT.2	Robot: Missing release for task start 
									BIT.3	Robot: Emergengy Stop from robot					
									BIT.4	Robot: Error - Bus State
									BIT.5	Robot: Error - Program not started
									BIT.6	Robot: Error - Stop by program
									BIT.7	Robot: Error - Stopped by user
									BIT.8	Robot: Reserve
									BIT.9	Robot: Teach Mode active
									BIT.10	Robot: res
									BIT.11	Robot: res
									BIT.12	Robot: No Connection to Robot TCP_IP-Server
									BIT.13	Robot: No answer from robot for Read error
									BIT.14	Robot: User Error by Robot
									BIT.15	Robot: Reserve
									 *)
END_VAR

三、3轴插补涂胶轴功能块 代码

(* Initialisation of FB internal structures - for reducing length of expressions *)
// 轴Z 校准程序号为 8 ,不可改变
tTimer         := REAL_TO_TIME(ir_Max_Timer  * 1000.0);
tTimer_TimeOut := REAL_TO_TIME((ir_Max_Timer + 5.0) * 1000.0);

acstartCopyData();(*============================================================================================================================*)
ac_Mapping_Input();


(* --- INIT of element feedback --------------------------------------------------- *)
stTemp_ELEMENT.stFeedBack.stSTATE.bIN_WP  		:= FALSE;
stTemp_ELEMENT.stFeedBack.stSTATE.bIN_WP_1 		:= FALSE;
stTemp_ELEMENT.stFeedBack.stSTATE.bIN_HP 		:= FALSE;
stTemp_ELEMENT.stFeedBack.stSTATE.bOUT_HP 		:= FALSE;
stTemp_ELEMENT.stFeedBack.stSTATE.bOUT_WP 		:= FALSE;
stTemp_ELEMENT.stFeedBack.stSTATE.bTO_WP 		:= FALSE;

	IF
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三阶码叟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值