From f417d3ef79c1feac24209ef83506bfcfacce9723 Mon Sep 17 00:00:00 2001 From: Staniska Date: Sun, 10 Nov 2024 22:30:03 +0300 Subject: [PATCH] use LIMS to calculate machining time --- lib/interpretator.js | 25 +++++++++++-------------- lib/time.js | 22 ++++++++++++---------- 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/lib/interpretator.js b/lib/interpretator.js index 91e5e44..7a3af60 100644 --- a/lib/interpretator.js +++ b/lib/interpretator.js @@ -221,7 +221,7 @@ function parseDataClear(programName) { View.sinumerikView.parseData.mcall[programName] = undefined; View.sinumerikView.parseData.calcComp = false; - View.sinumerikView.parseData.spindleSpeed = {type: 'G97', value: 1}; + View.sinumerikView.parseData.spindleSpeed = {type: 'G97', value: 1, limit: 20000}; View.sinumerikView.parseData.feed = {type: 'G94', value: 100}; if (View.sinumerikView.programmData[atom.workspace.getActiveTextEditor().getTitle().replace(/\./g, '_').toUpperCase()].machine.machineType === 'Lathe') { View.sinumerikView.parseData.feed.type = 'G95' @@ -538,10 +538,9 @@ function parseRows(programText, programName, variables, firstCall) { } } - if (operator.type === 'S_speed') { - View.sinumerikView.parseData.spindleSpeed.value = calcValue(operator.value, programName, row) - } + if (operator.type === 'S_speed') View.sinumerikView.parseData.spindleSpeed.value = calcValue(operator.value, programName, row) if (operator.type === 'F_feed') View.sinumerikView.parseData.feed.value = calcValue(operator.value, programName, row) + if (operator.type === 'LIMS') View.sinumerikView.parseData.spindleSpeed.limit = calcValue(operator.value, programName, row) if (operator.type === 'generalGroup15') { if (operator.value === 'G96' || operator.value === 'G97') { View.sinumerikView.parseData.spindleSpeed.type = operator.value @@ -603,7 +602,7 @@ function parseRows(programText, programName, variables, firstCall) { } const calcValue = (value, programName, row) => { - return value[0] === '=' ? mathParse(value.substring(1), programName, row) : value + return value[0] === '=' ? mathParse(value.substring(1), programName, row) : parseFloat(value) } function checkRepeat(rowText, programName, programText, row) { @@ -2776,15 +2775,6 @@ function generatePrimitives(rowText, programName, progRowNum, programText) { } //endregion - //region LIMS - regEx = /(? { const updateMachineTime = (e) => { const textField = e.target - // textField.value = '00:00:00' const elements = View.sinumerikView.parseData.canvas.filter(el => el.X_start !== undefined) const machiningTime = elements.filter(el => el.type === 'G1').reduce((t, el) => t + getElMachineTime(el), 0) const rapidTime = elements.filter(el => el.type === 'G0').reduce((t, el) => t + getElMachineTime(el), 0) - // console.log(machiningTime) textField.value = formatTime(machiningTime) const rapidField = e.target.closest('div').querySelector('#rapidTimeDiv') rapidField.textContent = formatTime(rapidTime) @@ -45,7 +43,12 @@ const getElMachineTime = (el) => { if (el.type === 'G0') return getLength(el) / 5000 if (el.feed.type === 'G94') return getLength(el) / el.feed.value if (el.spindleSpeed.type === 'G97' || Math.abs(el.X - el.X_start) < 1) { - const spindleNums = el.spindleSpeed.value / 2 / el.X * 315 + + let spindleNums = el.spindleSpeed.type === 'G97' ? el.spindleSpeed.value : el.spindleSpeed.value / Math.abs(el.X + el.X_start) * 315 + if (Number.isNaN(spindleNums)) spindleNums = 1000 + if (spindleNums > el.spindleSpeed.limit) { + spindleNums = el.spindleSpeed.limit + } return getLength(el) / (spindleNums * el.feed.value) } else { const divider = Math.round(Math.abs(el.X - el.X_start) + 1) @@ -53,12 +56,12 @@ const getElMachineTime = (el) => { .map((el_part, idx) => { return { ...el, - X_start: el.X + (el.X - el.X_start) / divider * idx, - X: el.X + (el.X - el.X_start) / divider * (idx + 1), - Y_start: el.Y + (el.Y - el.Y_start) / divider * idx, - Y: el.Y + (el.Y - el.Y_start) / divider * (idx + 1), - Z_start: el.Z + (el.Z - el.Z_start) / divider * idx, - Z: el.Z + (el.Z - el.Z_start) / divider * (idx + 1), + X_start: el.X_start + (el.X - el.X_start) / divider * idx, + X: el.X_start + (el.X - el.X_start) / divider * (idx + 1), + Y_start: el.Y_start + (el.Y - el.Y_start) / divider * idx, + Y: el.Y_start + (el.Y - el.Y_start) / divider * (idx + 1), + Z_start: el.Z_start + (el.Z - el.Z_start) / divider * idx, + Z: el.Z_start + (el.Z - el.Z_start) / divider * (idx + 1), } })) .reduce((time, el_part) => { @@ -69,7 +72,6 @@ const getElMachineTime = (el) => { } const getLength = (el) => { - let length = 0 const axes_names = ['X', 'Y', 'Z'] return Math.sqrt(axes_names.reduce((l, ax) => l + (el[ax] - el[`${ax}_start`]) ** 2, 0)) }