目录
一、功能块描述
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 轴校准
- 支持 8 种预定义任务(程序号 1-8):
- 任务参数配置:
- 动态加载目标程序号
- 根据任务类型自动配置补偿参数
3. 校准与补偿系统
- 轴校准:
- XY 轴校准(程序号 4):记录当前位置与参考值偏差
- Z 轴校准(程序号 8):专用校准程序,确保涂胶高度精准
- 动态补偿:
- 根据校准结果计算 XYZ 轴补偿值
- 实时应用补偿值到运动轨迹
- 支持不同任务的差异化补偿策略
4. 安全与诊断功能
- 错误检测:
- 轴错误检测(EtherCAT 错误、运动错误)
- 程序号调用错误检测
- 校准传感器故障检测
- 超时保护:
- 各状态均设置时间阈值,防止设备卡死
- 执行超时自动触发错误处理
- 状态监控:
- 实时反馈轴使能、回零、运动状态
- 错误状态标志位输出
2.3 功能块工作流程
-
初始化阶段:
- 映射输入数据,初始化状态标志位
- 重置轴控制信号,清除错误状态
-
任务请求处理:
- 检测涂胶任务请求(手动 / 自动模式)
- 验证启动条件(无错误、轴就绪)
-
状态机执行:
- 使能检查与轴回零
- 程序号加载与参数配置
- 轨迹执行与动态补偿
- 任务完成检测
-
校准流程:
- 触发轴校准程序(程序号 4/8)
- 记录校准数据,计算补偿值
- 应用补偿值到后续任务
-
错误处理:
- 检测到错误时重置状态
- 记录错误类型,输出诊断信息
- 错误清除后回到初始状态
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