Set blockheight via python

More
7 years 7 months ago #128768 by MatthiasF1210
Hello,

I am writing a python script for touch probing the blockheight but can't find a way to set the value of the blockheight inside gmoccapy.

Any ideas?

Thanks

Matthias

Please Log in to join the conversation.

More
7 years 7 months ago #128773 by rodw
Replied by rodw on topic Set blockheight via python
I'm not really good with Gcode but I think you would just touch off on the block manually and set G92 Zn. We do this with plasma machines every pierce. You may be able to program a gmoccapy macro button to help with the manual touchoff.

But maybe you can issue the G92 from within your python script with a hardcoded value. But once set, LinuxCNC should remember it between sessions.

Please Log in to join the conversation.

More
7 years 7 months ago #128802 by newbynobi
Blockheight is a hal pin
Why not make a pin in your script and connect that one to blockheight in hal?

Otherwise just check gmoccapy.py for blockheight to see how it is handled.

I use a digital gauge connected to the machine through a BOBE keyboard usb interface and on the entry of blockheight i just push the data button on the gauge to transfer the value to gmoccapy.

May be that is also a possible way to go, just simulate the key button press event in your script.

Norbert

Please Log in to join the conversation.

More
7 years 7 months ago #128812 by MatthiasF1210

Blockheight is a hal pin
Why not make a pin in your script and connect that one to blockheight in hal?


This was my first thought, but than i found out that the blockheight hal pin is an output. I want to set the blockheight....

I took a look in the gmoccapy.py an found the following:
Code:
def on_btn_block_height_clicked( self, widget, data = None ): probeheight = self.widgets.spbtn_probe_height.get_value() blockheight = dialogs.entry_dialog( self, data = None, header = _( "Enter the block height" ), label = _( "Block height measured from base table" ), integer = False ) if blockheight == "CANCEL" or blockheight == "ERROR": return if blockheight != False or blockheight == 0: self.halcomp["blockheight"] = blockheight self.halcomp["probeheight"] = probeheight self.prefs.putpref( "blockheight", blockheight, float ) self.prefs.putpref( "probeheight", probeheight, float ) else: self.prefs.putpref( "blockheight", 0.0, float ) self.prefs.putpref( "probeheight", 0.0, float ) print( _( "Conversion error in btn_block_height" ) ) dialogs.warning_dialog( self, _( "Conversion error in btn_block_height!" ), _( "Please enter only numerical values\nValues have not been applied" ) ) # set koordinate system to new origin origin = self.get_ini_info.get_axis_2_min_limit() + blockheight self.command.mode( linuxcnc.MODE_MDI ) self.command.wait_complete() self.command.mdi( "G10 L2 P0 Z%s" % origin ) self.widgets.hal_action_reload.emit( "activate" ) self.command.mode( linuxcnc.MODE_MANUAL ) self.command.wait_complete()

So basicly I can use the code of the section "set koordinate sytem" in my script to make it work the same way. If no function inside linuxcnc uses the hal pin blockheight I can leave it unchanged for the moment....

Is that correct? I am not 100% sure how the auto_tool_measurement works inside gmoccapy

Thanks

Please Log in to join the conversation.

More
7 years 7 months ago #128853 by newbynobi
Yes, that is correct, but you may need to adapt the calculation.

Norbert

Please Log in to join the conversation.

More
7 years 6 months ago #130170 by MatthiasF1210
Hi,

after some efforts I finallized my script. In the simulation it works fine, but not at the real machine ;(

here is the relevant code from my script:
Code:
origin = self.inifile.find("AXIS_2", "MIN_LIMIT") # calculate absolute position from blockheight a = self.probed_position_with_offsets() blockheight = a[2] probeheight = self.prefs.getpref("probeheight", 0, float) origin = float(origin) + blockheight self.prefs.putpref("blockheight", blockheight, float) self.prefs.putpref("probeheight", probeheight, float) # set koordinate system to new origin self.command.mode( linuxcnc.MODE_MDI ) self.command.wait_complete() self.command.mdi( "G10 L2 P0 Z%s" % origin ) self.command.mode( linuxcnc.MODE_MANUAL ) self.command.wait_complete()

When I Set the blockheight with this Code, all the G54 Codes seems to be set right. In the Simulation oll the calculations are ok. If I move to the real machine the code is working well for measuring and setting blockheight.

But when I start my Testprogramm with the autotoolchager, the tool compensation is not working and the tool is not stopping at the correct height (it's going to much lower z values)
If I just set the Blockheight manually, the testprogramm works fine.

It seems to me that nothing is "saved" when I use my script.

Any Ideas?

Matthias

Please Log in to join the conversation.

More
7 years 6 months ago #130173 by newbynobi
Your code is strange, you read probeheight and you set it again, but you did not modify it. So it will be unchanged.

Do you issue a G43 after the tool change?
It is done automatically in the sim! But will not in your config if you changed the remap!

Norbert

Please Log in to join the conversation.

More
7 years 6 months ago #130185 by MatthiasF1210

newbynobi wrote: Your code is strange, you read probeheight and you set it again, but you did not modify it. So it will be unchanged.

Yes I know, this is a left over from Testing. Probeheight does not change anyway.

newbynobi wrote: Do you issue a G43 after the tool change?
It is done automatically in the sim! But will not in your config if you changed the remap

Yes I think so, will check the Maschine tonight. But the Testprogramm works perfekt if I use manual Setting blockheight.

Please Log in to join the conversation.

More
7 years 6 months ago #130307 by MatthiasF1210
Hi,

after a lot of test at the machine and reading thrue all that code, I have an Idea wath the error could be.

@newbynobi

Can it be that the tool change program uses the hal pin blockheight?

This is my only posible explaination. If I use my new script this testprogram:
Code:
% (Test File Auto Tool Measure) N10 G64 P0.015 (Setzen des Path Blending) N15 G90 G94 G17 G91.1 N20 G21 N25 G28 G91 Z0. N30 G90 (BOHREN2) N17455 M1 N17460 T200 M6 N17465 T2008 N17470 S2865 M3 N17475 G54 N17480 G0 X10. Y-10. N17485 G43 Z15. H200 N17490 G0 Z5. N17495 Z2. N17500 M0 N17590 Z15. N17595 M5 N17600 G28 G91 Z0. N17605 G90 (2D FASE1) N17610 M1 N17615 T2008 M6 N17620 T2004 N17625 S7500 M3 N17630 G54 N17635 G0 X10 Y-10 N17640 G43 Z15. H2008 N17645 G0 Z5. N17650 Z2 N17655 M0 N17720 G0 Z15. N17725 G28 G91 Z0. N17730 G90 N17735 M30 %

the machine allways stops 2mm above the table surface (with tool 200, 2008). When I use the same Testprogramm after I manually edited the Blockheigt via the gmoccapy button, everthing works fine.

While I'am writing this I found the
Code:
#<blockheight> = #<_hal[gmoccapy.blockheight]>
inside change.ngc.:ohmy: :ohmy: :evil:

As gmoccapy.blockheight is an output, I can't write it... So I have to add a workarount to change.ngc

Please Log in to join the conversation.

More
7 years 6 months ago #130433 by newbynobi
You do not need to use blockheight!
You can do everythink you like just with hal and your own remap file, in this case change.ngc.

You ngc code is IMHO a mess,
Code:
N17460 T200 M6 N17465 T2008 N17470 S2865 M3 N17475 G54 N17480 G0 X10. Y-10. N17485 G43 Z15. H200

First you change to tool 200 with T200 M6
after that you prepare tool 2008, what is OK, but why do you mix around with G43, Z values and H values

Just do you code as follows and it will be more readable:
Code:
T200 M6 G43 T2008 S2865 M3 G54 G0 X10. Y-10. Z15

G43 : without an H word uses the currently loaded tool from the last Tn M6.

Do you use wear offsets? (such large tool numbers are not common)

Norbert

Please Log in to join the conversation.

Time to create page: 0.444 seconds
Powered by Kunena Forum