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
|
||
} |