253 lines
8.1 KiB
TypeScript
253 lines
8.1 KiB
TypeScript
|
import { ProcessorBase, ProcessorContext } from "../base";
|
|||
|
import { ConfigBase } from "../models/config";
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/** 刀具工具类
|
|||
|
* 通过上下文的形式使用
|
|||
|
*/
|
|||
|
export class ToolsHelper extends ProcessorBase<any, any, any> {
|
|||
|
public get name(): string {
|
|||
|
return "刀库模块";
|
|||
|
}
|
|||
|
|
|||
|
public get version(): string {
|
|||
|
return "1.0.0";
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
private _params: ConfigBase = new ConfigBase();
|
|||
|
|
|||
|
constructor() {
|
|||
|
super();
|
|||
|
this._params.name = "刀库配置";
|
|||
|
this._params.version = "1.0.0";
|
|||
|
this._params.knifeList = [];
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
public exec(context: ProcessorContext<Knife[], any, any>) {
|
|||
|
|
|||
|
this._params.knifeList = context.input
|
|||
|
context.output = {
|
|||
|
knifeList: context.input,
|
|||
|
getKnifeByParams: this.getKnifeByParams,
|
|||
|
KnifeIsInKnifeList: this.KnifeIsInKnifeList,
|
|||
|
_params: context.params
|
|||
|
};
|
|||
|
// context.output?.(res);
|
|||
|
return context.output;
|
|||
|
}
|
|||
|
/**
|
|||
|
*
|
|||
|
* @param params 查询条件
|
|||
|
* @param knifeList 刀具列表
|
|||
|
* @returns 返回符合条件的刀具
|
|||
|
*/
|
|||
|
getKnifeByParams(params: _knifeType, k_List: Knife[] = []) {
|
|||
|
let knife: Knife | null = null
|
|||
|
|
|||
|
if (params) {
|
|||
|
|
|||
|
let _List = [...this._params.knifeList, ...k_List]
|
|||
|
|
|||
|
let tempKnifeList: Knife[] = [..._List] // []
|
|||
|
let keys = Object.keys(params)
|
|||
|
if (keys.length > 0) {
|
|||
|
keys.forEach(key => {
|
|||
|
if (Array.isArray(params[key]) && key == 'ability') {
|
|||
|
// 进来的应该是ability 是数组 判断刀的能力
|
|||
|
for (const arrItem of params[key]) {
|
|||
|
let _knifeList = _List.filter(e => e.ability.includes(arrItem))
|
|||
|
_knifeList.forEach(k => {
|
|||
|
if (!this.KnifeIsInKnifeList(k, tempKnifeList)) {
|
|||
|
tempKnifeList.push(k)
|
|||
|
}
|
|||
|
})
|
|||
|
}
|
|||
|
} else if (['string', 'number'].includes(typeof (params[key]))) {
|
|||
|
if (params && params[key] && typeof (params[key]) == 'number') {
|
|||
|
|
|||
|
if (key == 'length') {
|
|||
|
|
|||
|
tempKnifeList = tempKnifeList.filter(e => e[key] >= params[key])
|
|||
|
} else {
|
|||
|
tempKnifeList = tempKnifeList.filter(e => e[key] == params[key])
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
if (tempKnifeList.length > 0) {
|
|||
|
knife = tempKnifeList[0]
|
|||
|
}
|
|||
|
} else {
|
|||
|
console.log('传入的查询条件 没有参数')
|
|||
|
}
|
|||
|
}
|
|||
|
return knife
|
|||
|
}
|
|||
|
/**
|
|||
|
*
|
|||
|
* @param _knife 刀具
|
|||
|
* @param _knifeList 刀具列表
|
|||
|
* @returns true 刀具在列表中 false 刀具不在列表中
|
|||
|
*/
|
|||
|
KnifeIsInKnifeList(_knife: Knife, _knifeList: Knife[]) {
|
|||
|
let k = _knifeList.find(e => _knife.axleId == e.axleId
|
|||
|
&& _knife.diameter == e.diameter
|
|||
|
&& _knife.knifeId == e.knifeId)
|
|||
|
|
|||
|
if (k) {
|
|||
|
return true
|
|||
|
} else {
|
|||
|
return false
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/** 刀类型: MILLING_CUTTER铣刀 FORMING_CUTTER成型刀 DRILL钻头 SAW锯 BLADE刀片 */
|
|||
|
export enum KnifeType {
|
|||
|
/** 铣刀 */
|
|||
|
MILLING_CUTTER = 1,
|
|||
|
/** 成型刀 */
|
|||
|
FORMING_CUTTER = 2,
|
|||
|
/** 钻头 */
|
|||
|
DRILL = 3,
|
|||
|
/** 锯 */
|
|||
|
SAW = 4,
|
|||
|
/** 刀片 */
|
|||
|
BLADE = 5
|
|||
|
}
|
|||
|
|
|||
|
export class Knife {
|
|||
|
/** 是否启用 */
|
|||
|
isEnabled = true;
|
|||
|
/** 轴号 */
|
|||
|
axleId = 0;
|
|||
|
/** 开料刀ID号 */
|
|||
|
knifeId = 1;
|
|||
|
/** 加工面(0正面 1反面 2左侧面 3右侧面 4上侧面 5下侧面 6任意) */
|
|||
|
processFace = 0;
|
|||
|
/** 刀名称 */
|
|||
|
knifeName = '';
|
|||
|
/** 刀具类型(1铣刀 2成型刀 3钻头 4锯 5刀片) */
|
|||
|
knifeType = KnifeType.MILLING_CUTTER;
|
|||
|
/** 功能属性(数组): 1开料/切割 2拉槽 3铣型 4铣孔 5钻孔 6拉米诺 7乐扣 8T型 */
|
|||
|
ability: any = [];
|
|||
|
|
|||
|
// /** 默认开料刀 */
|
|||
|
// isDefaultCutKnife = false;
|
|||
|
// /** 是否可用于开料切割 */
|
|||
|
// isCuttingKnife = false;
|
|||
|
// /** 是否允许铣孔(knifeType为铣刀生效) */
|
|||
|
// isMillingAllowed = false;
|
|||
|
/** 刀直径mm */
|
|||
|
diameter = 6;
|
|||
|
/** 刀长(最大深度) */
|
|||
|
length = 20;
|
|||
|
/** 锯齿厚度,单次加工切缝宽度 */
|
|||
|
sawThiness = 0;
|
|||
|
/**锯向: 0横向(或长边) 1纵向(短边) 2自由角度*/
|
|||
|
sawDirection = 0;
|
|||
|
/**切向加工方向: 0横向左往右 2横向右往左 3纵向上往下 4纵向下往上 5随意 */
|
|||
|
processDirection = 0;
|
|||
|
/**进给速度, 0取系统默认 */
|
|||
|
speed = 0;
|
|||
|
/** 进给深度 */
|
|||
|
stepDepth = 0;
|
|||
|
// /** 组号 */
|
|||
|
// groupNo = 0;
|
|||
|
// /** 主刀 */
|
|||
|
// isMainKnife = false;
|
|||
|
// /** 是否高级加工 */
|
|||
|
// isAdvancedProcessEnabled = false;
|
|||
|
// /** 是否集合加工 */
|
|||
|
// isBatchProcessEnabled = false;
|
|||
|
// /** 副刀偏置长边偏移(Y轴) */
|
|||
|
// auxKnifeOffsetY = 0;
|
|||
|
// /** 副刀偏置短边偏移(X轴) */
|
|||
|
// auxKnifeOffsetX = 0;
|
|||
|
/** 偏置短边偏移(X轴)-相对于工件原点位置XY坐标的短边方向偏移量 */
|
|||
|
offsetX = 0;
|
|||
|
/** 偏置长边偏移(Y轴) -相对于工件原点位置XY坐标的长边方向偏移量*/
|
|||
|
offsetY = 0;
|
|||
|
/** 偏置垂直偏移(Z轴) -相对于工件原点位置XY坐标的垂直方向偏移量*/
|
|||
|
offsetZ = 0;
|
|||
|
/** 基准坐标-短边(X轴) -钻头在钻包中短边方向(纵向)的相对位置 */
|
|||
|
baseX = 0;
|
|||
|
/** 基准坐标-长边(Y轴) -钻头在钻包中长边方向(横向)的相对位置 */
|
|||
|
baseY = 0;
|
|||
|
/**组合钻 */
|
|||
|
isModularDrill = false;
|
|||
|
/** 是否预启动 */
|
|||
|
isPreStartEnabled = false;
|
|||
|
/** 预启动提前动作数 */
|
|||
|
preStartAheadActionCount = 5;
|
|||
|
/** 预启动延迟换刀 */
|
|||
|
isPreStartToolChangeDelay = false;
|
|||
|
/** 预启动延迟换刀指令 */
|
|||
|
preStartToolChangeDelayCode = '';
|
|||
|
/** 轴启动指令后置 */
|
|||
|
isAxisStartCodePostpost = false;
|
|||
|
/** 轴停止指令前置 */
|
|||
|
isAxisStopCodePrepose = false;
|
|||
|
/** 钻组独立指令(启用后,刀起始指令、刀结束指令使用钻组起始指令、钻组结束指令替换) */
|
|||
|
drillGroupCode = '';
|
|||
|
|
|||
|
/** 轴启动代码*/
|
|||
|
axisStartCode = "";
|
|||
|
/** 刀启动代码 */
|
|||
|
knifeStartCode = '';
|
|||
|
/** 钻组起始指令 */
|
|||
|
drillGroupStartCode = '';
|
|||
|
/** 钻组结束指令 */
|
|||
|
drillGroupEndCode = '';
|
|||
|
/** 刀停止代码 */
|
|||
|
knifeStopCode = '';
|
|||
|
/** 轴停止指令 */
|
|||
|
axisStopCode = '';
|
|||
|
// /** 高级加工指令 */
|
|||
|
// advancedCode = '';
|
|||
|
/** 开料刀 */
|
|||
|
isCuttingKnife() {
|
|||
|
return this.isEnabled && this.ability.includes(AbilityType.CUT);
|
|||
|
}
|
|||
|
/** 造型刀 */
|
|||
|
isModelingKnife() {
|
|||
|
return this.isEnabled && this.ability.includes(AbilityType.MILLING_MODEL);
|
|||
|
}
|
|||
|
/** 钻刀 */
|
|||
|
isDrillingKnife() {
|
|||
|
return this.isEnabled && this.ability.includes(AbilityType.DRILL_HOLE);
|
|||
|
}
|
|||
|
/** 铣孔 */
|
|||
|
isCutting4HoleKnife() {
|
|||
|
return this.isEnabled && this.ability.includes(AbilityType.MILLING_HOLE);
|
|||
|
}
|
|||
|
/** 设置刀具(轴号, 刀名, 刀直径, 是否主刀, 是否铣孔, 是否开料刀) */
|
|||
|
// set(axleId: number, name: string, diameter: number, isMainKnife: boolean, isMillingAllowed: boolean, isCuttingKnife: boolean)
|
|||
|
/** 设置刀具(轴号, 刀名, 刀类型, 刀直径, 刀长, 是否默认刀) */
|
|||
|
}
|
|||
|
export type _knifeType = Partial<Knife>
|
|||
|
|
|||
|
/** 刀功能:
|
|||
|
** 1-CUT开料/切割 2-PULLING_GROOVE拉槽 3-MILLING_MODEL铣型 4-MILLING_HOLE铣孔
|
|||
|
** 5-DRILL_HOLE钻孔 6-RAMINO拉米诺 7-EASY_FASTEN乐扣 8-T_TYPE T型 */
|
|||
|
export enum AbilityType {
|
|||
|
/** 1开料/切割 */
|
|||
|
CUT = 1,
|
|||
|
/** 2拉槽 */
|
|||
|
PULLING_GROOVE = 2,
|
|||
|
/** 3铣型 */
|
|||
|
MILLING_MODEL = 3,
|
|||
|
/** 4铣孔 */
|
|||
|
MILLING_HOLE = 4,
|
|||
|
/** 5钻孔 */
|
|||
|
DRILL_HOLE = 5,
|
|||
|
/** 6拉米诺 */
|
|||
|
RAMINO = 6,
|
|||
|
/** 7乐扣 */
|
|||
|
EASY_FASTEN = 7,
|
|||
|
/** 8T型 */
|
|||
|
T_TYPE = 8
|
|||
|
}
|