import { ProcessorBase, ProcessorContext } from "../base"; import { ConfigBase } from "../models/config"; /** 刀具工具类 * 通过上下文的形式使用 */ export class ToolsHelper extends ProcessorBase { 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) { 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 /** 刀功能: ** 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 }