You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
MarlinFirmware/E3S1PROFORKBYTT_InputShapin...

84 lines
3.6 KiB
Python

### based on https://github.com/dsdanielko/cura-ringing-tower-script/
### created for E3S1PROFORKBYTT by Thomas Toka for Cura Slicer
import json
import re
from ..Script import Script
class E3S1PROFORKBYTT_InputShaping(Script):
def __init__(self):
super().__init__()
def getSettingDataString(self):
return json.dumps({
'name': 'E3S1PROFORKBYTT InputShaping',
'key': 'E3S1PROFORKBYTT InputShaping',
'metadata': {},
'version': 2,
'settings': {
"gcode": {
"label": "Motion planning type",
"description": "Use either M593 (ZV input shaping) or M493 (Fixed-time motion)",
"type": "enum",
"options": {
"is": "M593 (ZV Input Shaping)",
"ftm": "M493 (Fixed-Time Motion)"
},
"default_value": "is"
},
'start_f': {
'label': 'Start frequency',
'description': 'Ringing compensation frequency sweep start value',
'unit': 'Hz',
'type': 'int',
'default_value': 20
},
'end_f': {
'label': 'End frequency',
'description': 'Ringing compensation frequency sweep end value',
'unit': 'Hz',
'type': 'int',
'default_value': 60
},
'linear_advance_k': {
'label': 'Reenable LA after Test with K',
'description': 'Reenable LA after Test with K',
'unit': '',
'type': 'float',
'default_value': 0.03
}
}
})
def execute(self, data):
gc = self.getSettingValueByKey('gcode')
start_hz = self.getSettingValueByKey('start_f')
end_hz = self.getSettingValueByKey('end_f')
linear_advance_k = self.getSettingValueByKey('linear_advance_k')
linear_advance_disabled = False
for i, layer in enumerate(data):
lines = layer.split('\n')
for j, line in enumerate(lines):
if line.startswith(";LAYER_COUNT:"):
max_layer = float(line.strip(';LAYER_COUNT:'))
elif line.startswith(';LAYER:'):
layer = float(line.strip(';LAYER:'))
hz = 0 if layer < 2 else start_hz + (end_hz - start_hz) * (layer - 2) / (max_layer - 3)
if gc == 'ftm':
if layer == 0:
lines[j] += '\n;TYPE:INPUTSHAPING\nM493 S11 D0 ;Enable ZVD Input Shaping'
lines[j] += '\n;TYPE:INPUTSHAPING\nM493 A%f ;(Hz) X Input Shaping Test' % hz
lines[j] += '\nM493 B%f ;(Hz) Y Input Shaping Test' % hz
if gc == 'is':
if not linear_advance_disabled:
lines[j] = 'M900 K0 ;disable Linear Advance\n' + lines[j]
linear_advance_disabled = True
lines[j] += '\n;TYPE:INPUTSHAPING\nM593 F%f ;(Hz) Input Shaping Test' % hz
data[i] = '\n'.join(lines)
# Re-enable Linear Advance with the specified K-factor after the last line
data[-1] += '\nM900 K%f ;re-enable Linear Advance with specified K-factor\n' % linear_advance_k
return data