setting up schaublin 125 cnc lathe with carousel toolchanger

More
7 years 9 months ago #125204 by trilobyte
i'm retrofitting a schaublin 125 cnc lathe. i use a 7i76e. most works well.
but i have some problemes with the carousel component.

the toolchanger uses 4 switches. every position has its own switch.
i wired these to the carousel.0.sense-0,1,2,3

if i start a toolchange with T1 M6 then the toolchanger begins to turn. but he will not stopp.
with the hal whatch list i can see the sense signals, but the current position is always 3 exept the sense 3 input is true, then the current position is for a moment 2.

here is video

and the code from the hal:

#
# HAL for Schaublin 125 Turret
#

# Load components
loadrt carousel pockets=4 encoding=single num_sense=4 dir=1
loadrt timedelay count=2
loadrt or2

# Adding function to realtime thread
addf carousel.0 servo-thread
addf timedelay.0 servo-thread
addf timedelay.1 servo-thread
addf or2.0 servo-thread

# Wire up stuff

# Setup time for air supply before toolchange, e.g 1sec
setp timedelay.0.on-delay 1
setp timedelay.0.off-delay 0
net tool_prepare iocontrol.0.tool-prepare => or2.0.in0 timedelay.0.in
net tool_prepared iocontrol.0.tool-prepared <= timedelay.0.out

# Holding time for air supply after tool change, e.g 0.5sec
setp timedelay.0.on-delay 0
setp timedelay.0.off-delay 0.5
net setup1 or2.0.out => timedelay.1.in
net setup2 timedelay.1.out => hm2_7i76e.0.7i76.0.0.output-04

net tool_change iocontrol.0.tool-change => carousel.0.enable
net tool_changed iocontrol.0.tool-changed <= carousel.0.ready
net tool_number iocontrol.0.tool-prep-number => carousel.0.pocket-number
net tc_pos_1 hm2_7i76e.0.7i76.0.0.input-15 => carousel.0.sense-0
net tc_pos_2 hm2_7i76e.0.7i76.0.0.input-14 => carousel.0.sense-1
net tc_pos_3 hm2_7i76e.0.7i76.0.0.input-13 => carousel.0.sense-2
net tc_pos_4 hm2_7i76e.0.7i76.0.0.input-12 => carousel.0.sense-3
net active_out carousel.0.active => or2.0.in1
net rotate_out carousel.0.motor-fwd => hm2_7i76e.0.7i76.0.0.output-05

Please Log in to join the conversation.

More
7 years 9 months ago #125205 by trilobyte
is "single" the correct encoding option?

btw: i am using the latest 2.8 linuxcnc...

Peter

Please Log in to join the conversation.

More
7 years 9 months ago #125210 by Mike_Eitel
Hi Peter
I have no glue about carousel, but watching your film the pros-switches seams to be always high, but one for short moment...
m5c
Mike

Please Log in to join the conversation.

More
7 years 9 months ago #125227 by andypugh

trilobyte wrote: is "single" the correct encoding option?


It looks like it:
github.com/LinuxCNC/linuxcnc/blob/master...s/carousel.comp#L184

[strike]If you look at the individual sense pins (halmeter for example) is there only ever one true at a time?[/strike]

Looking at the video, this is the problem. The switches are active-low.
(I hate how halshow uses red for false and yellow for true!)

You need to connect to the in-not (inverted) inputs of the 7i76.

I am not sure how well-tested "Single" is.

Please Log in to join the conversation.

More
7 years 9 months ago #125344 by trilobyte
it was the problem with the inverted inputs!

@andy: the toolchanger works well for position 1-2-3, but in position 0 the enable gets true but the motor fwd command not.

is there a bug in the 2.8 version?

a video of the toolchanger in action: video

this is the code from the hal:

#
# HAL for Schaublin 125 Turret
#

# Load components
loadrt carousel pockets=4 encoding=single num_sense=4 dir=1
loadrt timedelay count=2
loadrt logic count=2 personality=0x202,0x204 # 2-Input OR, 4-inputs OR gate


# Adding function to realtime thread
addf carousel.0 servo-thread
addf timedelay.0 servo-thread
addf timedelay.1 servo-thread
addf logic.0 servo-thread
addf logic.1 servo-thread

# Wire up stuff

# Setup time for air supply before toolchange, e.g 1sec
setp timedelay.0.on-delay 1
setp timedelay.0.off-delay 0
net tool_prepare iocontrol.0.tool-prepare => logic.0.in-00 timedelay.0.in
net tool_prepared iocontrol.0.tool-prepared <= timedelay.0.out

# Holding time for air supply after tool change, e.g 0.5sec
setp timedelay.0.on-delay 0
setp timedelay.0.off-delay 0.5
net setup1 logic.0.or => timedelay.1.in
net setup2 timedelay.1.out => hm2_7i76e.0.7i76.0.0.output-05

net tool_change iocontrol.0.tool-change => carousel.0.enable
net tool_changed iocontrol.0.tool-changed <= carousel.0.ready
net tool_number iocontrol.0.tool-prep-number => carousel.0.pocket-number
net tc_pos_1 hm2_7i76e.0.7i76.0.0.input-15-not => carousel.0.sense-0 logic.1.in-00
net tc_pos_2 hm2_7i76e.0.7i76.0.0.input-14-not => carousel.0.sense-1 logic.1.in-01
net tc_pos_3 hm2_7i76e.0.7i76.0.0.input-13-not => carousel.0.sense-2 logic.1.in-02
net tc_pos_4 hm2_7i76e.0.7i76.0.0.input-12-not => carousel.0.sense-3 logic.1.in-03
net tc_pos_valid logic.1.or => carousel.0.strobe
net active_out carousel.0.active => logic.0.in-01
net rotate_out carousel.0.motor-fwd => hm2_7i76e.0.7i76.0.0.output-04


peter

Please Log in to join the conversation.

More
7 years 8 months ago #125406 by andypugh
I think that there is a bug in single mode.

Sorry about that.

Everywhere else in the code the assumption is that pocket numbering begins at 1. But the S mode begins at 0.

Luckily carousel is a .comp, so it's something you can fix yourself.
github.com/LinuxCNC/linuxcnc/blob/master...s/carousel.comp#L184
Where it says
Code:
p = i;
it needs to say
Code:
p = i + 1;
Are you in a position to try that out?
You need to edit carousel.comp then
Code:
sudo halcompile --install carousel.comp

Please Log in to join the conversation.

More
7 years 8 months ago #125434 by inoxix
I think this is not the only problem with the S mode.

1. Senor(0) is never correct evaluated, the loop aborts at i=0 regardless of signal state
Code:
case 'S': // individual sensors for (i = inst_sense - 1; sense(i) == 0 && i > 0 ; i--) {} p = i; break;
If no sensor is active p is then always assigned 0 (or 1 as above).

2. current_position is only updated when strobe is set.
Code:
if (strobe) { current_position = p; parity_error = (pcalc != (inst_parity ^ parity_)); }
The moving state machine keeps just moving the turret. To use strobe doesn't make much sense in S mode. So, current_position is always 0. Of course we could bind all sensor signals with an or together and generate a strobe as workaround.

Regards,
Tom

Please Log in to join the conversation.

More
7 years 8 months ago #125435 by trilobyte
halcompile does not work on my computer:

trilobyte@trilobyte:~$ ls
Bilder Dokumente linuxcnc Öffentlich Videos
carousel.comp Downloads Musik Schreibtisch Vorlagen
trilobyte@trilobyte:~$ sudo halcompile --install carousel.comp
[sudo] Passwort für trilobyte:
Traceback (most recent call last):
File "/usr/bin/halcompile", line 1431, in <module>
main()
File "/usr/bin/halcompile", line 1401, in main
process(f, mode, outfile)
File "/usr/bin/halcompile", line 1267, in process
a, b = parse(filename)
File "/usr/bin/halcompile", line 424, in parse
a, b = f.split("\n;;\n", 1)
ValueError: need more than 1 value to unpack
trilobyte@trilobyte:~$

its a installation from this image:
www.linuxcnc.org/testing-stretch-rtpreempt/
i addet these stanzas:
deb buildbot.linuxcnc.org/ stretch master-rtpreempt
deb-src buildbot.linuxcnc.org/ stretch master-rtpreempt
to my sources.list.d

i updated the system with apt-get update, apt-get dist-upgrade

peter

Please Log in to join the conversation.

More
7 years 8 months ago #125467 by andypugh

inoxix wrote: I think this is not the only problem with the S mode.
1. Senor(0) is never correct evaluated, the loop aborts at i=0 regardless of signal state


Good point. Something like this is probably required
Code:
case 'S': // individual sensors for (i = inst_sense - 1; sense(i) == 0 && i > 0 ; i--) {} if (sense(i)) p = i + 1; break;

Of course we could bind all sensor signals with an or together and generate a strobe as workaround.

That would be one approach but doesn't solve the off-by-one. (Note that strobe is set TRUE by default, it can only be FALSE if it is actually connected in HAL)

Please Log in to join the conversation.

More
7 years 8 months ago #125468 by andypugh

trilobyte wrote: halcompile does not work on my computer:
...
a, b = f.split("\n;;\n", 1)
ValueError: need more than 1 value to unpackr


This indicates that your carousel.comp file has been passed through a Windows (or Classic Mac) system and the end-of-line characters are no longer a simple \n (linefeed)
The line above is looking for the ";;" delimiter in a .comp file that separates the setup instructions from the actual C code.

And halcompile really ought to deal better with this situation.

If you can correct the end-of-line characters then it ought to work.

Please Log in to join the conversation.

Time to create page: 0.066 seconds
Powered by Kunena Forum