# 技术说明

### 功能块

#### （一）FB_InterpolatorXYZ

XYZ 三轴连续插补功能块 FB_CTRL_InterpolatorXYZ 具有多个输入和输出，具体描述如下。所有控制器的参数均通过结构体传递给功能块。

##### 接口

VAR_INPUT

名称 | 类型 | 初始化 | 描述
--- | --- | --- | ---
bEnable | BOOL | FALSE | 使能信号，上升沿开始插补
bPause | BOOL | FALSE | 暂停信号
stCurrentPoint | ST_CartesianCoordinate |  | 读到的当前位置，作为运动的起始点
fInterpolationCycleTime | LREAL | 0 | 插补周期时间[s]
pInterpolationXYZParams | POINTER TO ST_InterpolatorXYZParams |  | 插补参数
nInterpolationPointNumber | UDINT | 0 | 插补点数，最大9个点。第一个点为起点

VAR_OUTPUT

名称 | 类型 | 初始化 | 描述
--- | --- | --- | ---
bBusy | BOOL | FALSE | 插补计算中
bDone | BOOL | FALSE | 插补计算完成
bCommandAborted | BOOL | FALSE | 插补过程终止
bError | BOOL | FALSE | 出错，错误码
bErrorID | E_ZMCError |  | 统一错误码
nInterpolatorIndex | UDINT |  | 当前插补序号
fActInterpolatorPercent | LREAL |  | 当前插补百分比
Profile | ST_InterpolatorXYZProfile |  | 插补输出

##### 使用要求

开发环境 | 目标平台 | 需要包含的PLC 库
--- | --- | ---
MetaFacture/Codesys | PC or CX | ZKSDInterpolator

#### （二）结构体定义

##### ST_CartesianCoordinate

名称 | 类型 | 初始化 | 描述
--- | --- | --- | ---
fX | LREAL | 0.0 | [mm]
fY | LREAL | 0.0 | [mm]
fZ | LREAL | 0.0 | [mm]
fA | LREAL | 0.0 | [deg]
fB | LREAL | 0.0 | [deg]
fC | LREAL | 0.0 | [deg]

##### ST_InterpolatorXYZParams

名称 | 类型 | 初始化 | 描述
--- | --- | --- | ---
nPatType | USINT | 0 | 指令类型：1=直线绝对运动；2=三点圆弧（中间点+末端点）；3=XY平面顺圆弧（末端点+半径）；4=XY平面逆圆弧（末端点+半径）；5=直线相对运动
nVelocityType | USINT | 1 | 速度曲线类型：预留参数，未使用
stKinematicsParams | ST_KinematicsParams |  | 运动学参数
stTargetPoint | ST_CartesianCoordinate |  | 目标点
fCirdeArcRadius | LREAL | 0 | 当类型是XY平面顺/逆圆弧
stMiddlePoint | ST_CartesianCoordinate |  | 圆弧中间点：预留参数，未使用
nSmoothType | USINT | 1 | 平滑类型：预留参数，未使用
fSmoothRadius | LREAL | 0 | 过渡平滑半径预留参数，未使用
nSmoothAccWay | USINT | 0 | 平滑过渡曲线加速度采用对应指令加速度：预留参数，未使用

##### ST_InterpolatorXYZProfile

名称 | 类型
--- | ---
X | ST_InterpolatorXYZProfileData
Y | ST_InterpolatorXYZProfileData
Z | ST_InterpolatorXYZProfileData

##### ST_InterpolatorXYZProfileData

名称 | 类型
--- | ---
fPosition | LREAL
fVelocity | LREAL
fAcceleration | LREAL
fJerk | LREAL

#### （三）FB_PickBond

避障功能块 FB_PickBond 具有多个输入和输出，具体描述如下。所有控制器的参数均通过结构体传递给功能块。

##### 接口

VAR_INPUT

名称 | 类型 | 初始化 | 描述
--- | --- | --- | ---
bEnable | BOOL | FALSE | 使能信号，上升沿开始插补，下降沿所有信息复位
bPause | BOOL | FALSE | 暂停信号
stPickBondParams | ST_PickBondParams |  | PickBond参数
fInterpolationCycleTime | LREAL | 0 | 插补周期时间[s]

VAR_OUTPUT

名称 | 类型 | 初始化 | 描述
--- | --- | --- | ---
bBusy | BOOL | FALSE | 插补计算中
bDone | BOOL | FALSE | 插补计算完成
bCommandAborted | BOOL | FALSE | 插补过程终止
bError | BOOL | FALSE | 出错，错误码
bErrorID | E_ZMCError |  | 统一错误码
stOverallInfo | ST_InterpolatorOverallInfomation |  | 路径段
stProfile | ST_InterpolatorXYZABCProfile |  | 插补输出

##### 使用要求

开发环境 | 目标平台 | 需要包含的PLC 库
--- | --- | ---
MetaFacture | PC | ZKSDInterpolator

#### （四）结构体定义

##### ST_PickBondParams

名称 | 类型 | 描述
--- | --- | ---
stPickBondEjector | ST_PickBondEjector | 顶针机构参数
ePickBondProcess | E_PickBondPhase | PickBond过程
stObstacleCuboid | ST_ObstacleCuboid | 障碍物坐标
stCoordinateFrame | ST_CoordinatePositionOrientationInGlobalFrame | 原点在全局坐标系中的位置 以及各轴是否反向
stKinematicsParams | ST_KinematicsParams | 运动学参数
stPickPoint | ST_CartesianCoordinate | 起点坐标
stBondPoint | ST_CartesianCoordinate | 终点坐标
fHeightOverObstacle | LREAL | 避障高度
fSaveMargin | LREAL | 安全距离

##### ST_InterpolatorOverallInfomation

名称 | 类型 | 描述
--- | --- | ---
fDuration | LREAL | [s]
ePickBondProcess | E_PickBondPhase | PickBond过程
eEjectPhase | E_PickBondEjectPhase | 顶针运行阶段
eZAxisPhase | E_PickBondZAxisPhase | Z轴运行阶段

##### ST_InterpolatorXYZABCProfile

名称 | 类型
--- | ---
X | ST_InterpolatorXYZProfileData
Y | ST_InterpolatorXYZProfileData
Z | ST_InterpolatorXYZProfileData
A | ST_InterpolatorXYZProfileData
B | ST_InterpolatorXYZProfileData
C | ST_InterpolatorXYZProfileData

##### ST_PickBondEjector

名称 | 类型 | 初始化 | 描述
--- | --- | --- | ---
fCAMMinPosition | LREAL | 0.0 | 顶针凸轮最小位置[mm]
fCAMMaxPosition | LREAL | 0.0 | 顶针凸轮最大位置[mm]
fCAMMinAngle | LREAL | 0.0 | 顶针凸轮最小角度[deg]
fCAMMaxAngle | LREAL | 0.0 | 顶针凸轮最大角度[deg]
fEjectSpeed | LREAL | 0.0 | 顶针运动速度[mm/s]
fEjectAcceleration | LREAL | 0.0 | 顶针运动加速度[mm/s2]
fEjectDeceleration | LREAL | 0.0 | 顶针运动减速度[mm/s2]
fEjectJerk | LREAL | 0.0 | 顶针运动加加速度[mm/s3]
fBlueMembranePosition | LREAL | 0.0 | 在顶针坐标系中蓝膜的绝对位置[mm]
fEjectSyncDistance | LREAL | 0.0 | 同步顶出距离[mm]

##### ST_ObstacleCuboid

名称 | 类型 | 描述
--- | --- | ---
stNegativeCorner | ST_CartesianCoordinate | 负向角点坐标
stPositiveCorner | ST_CartesianCoordinate | 正向角点坐标

##### ST_CoordinatePositionOrientationInGlobalFrame

名称 | 类型 | 初始化 | 描述
--- | --- | --- | ---
fXOffset | LREAL | 0.0 | 坐标系相对机器人坐标系偏移[mm]
fYOffset | LREAL | 0.0 | 坐标系相对机器人坐标系偏移[mm]
fZOffset | LREAL | 0.0 | 坐标系相对机器人坐标系偏移[mm]
fAOffset | LREAL | 0.0 | 坐标系相对机器人坐标系偏移[mm]
fBOffset | LREAL | 0.0 | 坐标系相对机器人坐标系偏移[mm]
fCOffset | LREAL | 0.0 | 坐标系相对机器人坐标系偏移[mm]
bXReverse | BOOL | FALSE | TRUE or FALSE
bVReverse | BOOL | FALSE | TRUE or FALSE
bZReverse | BOOL | FALSE | TRUE or FALSE
bAReverse | BOOL | FALSE | TRUE or FALSE
bBReverse | BOOL | FALSE | TRUE or FALSE
bCReverse | BOOL | FALSE | TRUE or FALSE

##### ST_KinematicsParams

名称 | 类型 | 描述
--- | --- | ---
X | ST_KinematicsParamsAxis | 轴坐标系下运动时使用
Y | ST_KinematicsParamsAxis | 轴坐标系下运动时使用
Z | ST_KinematicsParamsAxis | 轴坐标系下运动时使用
A | ST_KinematicsParamsAxis | 轴坐标系下运动时使用
B | ST_KinematicsParamsAxis | 轴坐标系下运动时使用
C | ST_KinematicsParamsAxis | 轴坐标系下运动时使用
stCartesianTranslation | ST_KinematicsParamsAxis | 笛卡尔中位置运动时使用
stCartesianRotation | ST_KinematicsParamsAxis | 笛卡尔中姿态旋转时使用
eRampType | E_ZMCProfileType | 速度曲线类型：预留参数，未使用

##### ST_KinematicsParamsAxis

名称 | 类型 | 初始化 | 描述
--- | --- | --- | ---
fVelocity | LREAL | 0 | 速度[mm/s]
fAcceleration | LREAL | 0 | 加速度[mm/s2]
fDeceleration | LREAL | 0 | 减速度[mm/s2]
fJerk | LREAL | 0 | 加加速度[mm/s3]

##### E_PickBondPhase

名称 | 类型 | 初始化 | 描述
--- | --- | --- | ---
PICK_TO_BOND | INT | 1 | 从Pick到Bond
BOND_TO_PICK | INT | 2 | 从Bond到Pick

##### E_PickBondEjectPhase

名称 | 类型 | 初始化 | 描述
--- | --- | --- | ---
MOVE_TO_PREEJECT_POSITION | INT | 0 | 运动到预顶针位置
IN_PREEJECT_POSITION | INT | 1 | 在预顶针位置
MOVE_TO_DIE_BOTTOM_SURFACE | INT | 2 | 运动到芯片下表面
IN_DIE_BOTTOM_SURFACE | INT | 3 | 在芯片下表面
EJECTOR_SYNC_LIFT_UP | INT | 4 | 顶针同步上升
EJECTOR_DECELERATION | INT | 5 | 顶针减速停止
IN_STOP_POSITION | INT | 6 | 到达减速停止位置

##### E_PickBondZAxisPhase

名称 | 类型 | 初始化 | 描述
--- | --- | --- | ---
TO_PICK_MAX_FORCE | INT | 1 |
MOVE_TO_DIE_FRONT_SURFACE | INT | 2 | 运动到芯片上表面
IN_DIE_FRONT_SURFACE | INT | 3 | 在芯片上表面
SYNC_LIFT_UP | INT | 4 | 和顶针同步提升阶段
TO_BOND_MAX_FORCE | INT | 5 |
MOVE_TO_BOND_POSITION | INT | 6 | 运动到Bond位置
IN_BOND_POSITION | INT | 7 | 在Bond位置

### 二、示例代码

以下示例代码用于插补器的测试。运行代码后，用户可以通过网页访问可视化界面，在虚拟环境中对轴运动进行测试和验证。