Benchman XT 20 tool ATC

05 Jan 2017 22:37 - 06 Jan 2017 00:56 #85311 by MacGalempsy
The Benchman XT VMC was manufactured by Light Machine Corp and has several configurations using a common chassis. The most common variations between the models are spindle type, ATC and 4th axis kit. Once common issue with these units is the failure of the In-Move controller system, which is how many of us have ended up in the LinuxCNC workspace. The cards are obsolete and are difficult (at best) to source. When they are available the price can be well over $1000US. In another thread , the discussion has been focused on learning the general details about the system and how to retrofit the machine to utilize LinuxCNC at a minimal cost. That thread includes schematics, PID tuning, controller setup, and other hard to find information. You are encouraged to start there. Since that thread is now over 150 posts spanning several years of discussion, we have decided to start this thread to discuss configuring the ATC.

As mentioned above, the purpose of this thread is to unify the effort towards getting the Benchman 20-tool ATC functional, so that work effort is marginalized for future retrofitters. The idea is to standardize HAL and ClassicLadder variables and programming, so that minimal changes are needed to get it up and running. Steve_a is using a Kflop controller, and I am using a Mesa card configuration, so the results will obviously be biased towards these two platforms. We aim to set things up so that the user only has to modify the controller card variables in the HAL file for full integration with LinuxCNC. When the project is complete, the sequence should look something like this ! Please remember we are trying to aim this discussion towards novice users, and any insight is always welcomed and appreciated!

Suggested Background Reading
ClassicLadder Manual
ClassicLadder Programming
ClassicLadder Examples
JT's Turret Sim

System and Mechanical Components
The system is a 20 tool turret, with various electrical and pneumatic components.

Electrical components:
1) Spindle motor
2) Spindle encoder
3) Shaft encoder
4) Low Air Pressure Alarm
5) Solenoid valve 1 - Turret Down
6) Solenoid valve 2 - Turret Right
7) Solenoid valve 3 - Tool holder Up
8) Solenoid valve 4 - Power Draw Bar Open
9) Hall effect sensor 1 - Power Draw Bar Open
10) Hall effect sensor 2 - Spindle in position
11) Limit switch 1 - Turret Up
12) Limit switch 2 - Turret Down
13) Limit switch 3 - Turret Left
14) Limit switch 4 - Turret Right
15) Limit switch 5 - Tool holder Down
16) Limit switch 6 - Tool holder Up
17) Panel Button 1 - Platter (Carriage) Up/ Down
18) Panel Button 2 - Index Platter (Manually Change to the next tool)
19) Panel Button 3 - Open/ Close Power Draw Bar

Pneumatic Components:
17) Actuator 1 - Turret Up/Down
18) Actuator 2 - Turret Left/Right
19) Actuator 3 - Tool Holder Down/Up
20) Actuator 4 - Power Draw Bar Closed/ Open
21) Air Pressure Regulator
Last Edit: 06 Jan 2017 00:56 by MacGalempsy. Reason: Added electrical components
05 Jan 2017 23:55 #85317 by andypugh
Have you looked at the config sim/axis/vismach/vmc-toolchange?

That is an example config using the carousel component with the tool change sequence written as a G-code subroutine.

If the tool change needs axis movements then this is likely to be rather easier (you can't really move axes from Classic Ladder).
The following user(s) said Thank You: MacGalempsy
06 Jan 2017 00:57 - 06 Jan 2017 01:11 #85318 by MacGalempsy
Thank you Andy for pointing out that package. As this is my first time attempting to setup a tool changer in LCNC, anything is helpful.
From the little understanding that I have, the envisioned approach recognizes the carousel as an axis and the z-axis will need to go to the home position. The axis will home at the machine startup just like the others. Tool pocket locations are set to encoder values (pocket # = n/360°) which are described as HAL variable names then referenced in Ladder when the tool request is made. It appears a further looking into the Carousel component is also needed.
Last Edit: 06 Jan 2017 01:11 by MacGalempsy. Reason: Rewritten response
10 Jan 2017 03:17 - 28 Jan 2017 16:29 #85555 by MacGalempsy
Here is an updated list of classicladder ins and outs. 1-28-2017


Last Edit: 28 Jan 2017 16:29 by MacGalempsy. Reason: updated i/o list from most recent revision of the programming
10 Jan 2017 13:49 #85569 by BigJohnT
Hey Mac,

If you have an absolute encoder on the turret this might help a bit.

The following user(s) said Thank You: MacGalempsy
11 Jan 2017 22:16 #85626 by MacGalempsy
Just a quick entry to the log for making headway with the project, mostly so I don't forget. A major thanks for the insight to JT.

Everything seemed to be working out, except the z-axis movement to move the spindle into the tool change position. Initially, the line of reasoning was to make use classicladder to send an axis movement, then have axis send an in-position signal back to classicladder. However, JT pointed out this link to the INI description. One line in the INI file TOOL_CHANGE_QUILL_UP = 1 will move the z into the tool change when a tool change is requested. This is awesome because it is one less thing to figure out how to do in classicladder. HA!
18 Jan 2017 12:13 #86045 by andypugh

MacGalempsy wrote: Initially, the line of reasoning was to make use classicladder to send an axis movement, then have axis send an in-position signal back to classicladder.

I am fairly sure that CL can't send axis motion commands. (This is why my preferred toolchanger approach is a G-code subroutine).
27 Jan 2017 01:32 #86754 by MacGalempsy
Hey Folks,
I spent the last few days trying to get the logic sorted out for the tool changing sequence. This is totally new, so it was recommended to write everything in English before moving onto the programming phase. Please be gentle with the critique. lol

Classicladder Pre-Programming Logic for BenchmanXT Automatic Tool Changer

1) Start homing the turret with a Pyvcp button. Button also sets enoder.index-enable pin to True so the counter resets on the index pulse.
a) IF PYVCP button = true AND Turret-Homed = FALSE THEN motor-CCW= TRUE
i) unlatched when Turret-Homed = TRUE (Rung #2)

2) Set Turret-home criteria.
a) IF encoder.count = 0 AND = FALSE THEN Turret-Homed = TRUE
i) unlatched after = TRUE
ii) unlatched criteria met when the machine is turned off

3) Now that the machine has been homed, we want to make sure the encoder.count is reset to zero every time an index pulse in made. For this we use the hostmot2 - encoder.index-enable
a) IF Turret-Homed = True AND Compare encoder.count <> 0 THEN encoder.index-enable = TRUE

SECTION 3- Set Exit Criteria
4) set Tool-Changed Criteria
a) IF Compare: Current-Tool-Number = Requested-Tool-Number THEN Tool-Changed = TRUE
i) expression is true when the same tool is re-requested by the user
ii) expression is true after implementing Rung #26

5) Tool change fails after 20 seconds
a) IF Tool-Change-Request = True AND TON > 20 Seconds THEN Tool-Change-Fail = TRUE

6) Tool change fails if there is not sufficient air pressure
a) IF Air-OK = FALSE THEN Tool-Change-Fail = TRUE

7) Home the Spindle.
a) IF Raising Edge Tool-Change-Request = True AND Turret-Homed = True THEN Spindle-Home = TRUE
i) The Raising Edge of Tool-Change-Request pulses on the Spindle-home output (vfd-input)

8) At the spindle home position, the Hall Effect Detector will go true. The tool changed criteria have not been met, so the tool change sequence can begin. Latch until the tool change sequence is over.
a) IF Spindle-Hall-Effect-Detector = TRUE and Tool-Changed = False THEN Start-Tool-Change = TRUE
i) unlatch criteria also met on Rung #4

SECTION 6 - Current Tool Pocket in Position?
9) If the current tool pocket is not in position, then take the shortest path to the current tool pocket
a) If Start-Tool-Change = TRUE AND 2000/Current-Tool-Number < Count AND Current-Pocket-In-Position = FALSE THEN motor-CW = TRUE
i) not initiated until Start-Tool-Change = TRUE (RUNG #8)
ii) not stopped until Current-Pocket-Is-In-Position (Rung #11)

10) If the current tool pocket is not in position, then take the shortest path to the current tool pocket.
a) If Start-Tool-Change = TRUE AND 2000/Current-Tool-Number > Count AND Current-Pocket-Is-In-Position = FALSE THEN motor-CCW = TRUE
i) not initiated until Start-Tool-Change = TRUE (RUNG #8)
ii) not stopped until Current-Pocket-Is-In-Position (Rung #11)

11) Check to see of the turret position is at the current tool pocket.
a) IF 2000/Current-Tool-Number = Count AND Current-Tool-Removed = FALSE THEN Current-Pocket-In-Position = TRUE
i) unlatched when Current-Tool-Removed = True (Rung #17)

SECTION 7 - Remove Current Tool Sequence
12) Lower Turret until turret is ready to go up
a) IF Current-Tool-Pocket-Is-In Position = TRUE AND Turret-Up-Ready= FALSE THEN Turret-Down-Solenoid=TRUE
i) unlatch when Turret-Up-Ready = TRUE (Rung #25)

13) Lift Tool Holder until the current tool has been released
a) IF Turret-Down-Limit-Switch = TRUE AND Current-Tool-Is-Released = FALSE THEN Tool-Holder-Up-Solenoid = TRUE
i) unlatch when Current-Tool-Is-Released = TRUE (Rung #16)

14) Slide Turret Right until the requested tool is secure
a) IF Tool-Holder-Up-Limit-Switch = TRUE AND Requested-Tool-Is-Secure = FALSE THEN Turret-Right-Solenoid = TRUE
i) unlatch when Requested-Tool-Is-Secured = TRUE (Rung #23)

15) Open Power Drawbar until the requested tool has been inserted
a) IF Turret-Right-Limit-Switch = TRUE AND Requested-Tool-Inserted = FALSE THEN Power-Drawbar-Open-Solenoid = TRUE
i) unlatch when Requested-Tool-Inserted = TRUE (Rung #22)

16) lower tool holder by confirming the tool has been released
a) IF Power-Drawbar-Hall-Effect-Detector = TRUE AND Current-Tool-Removed = FALSE THEN Current-Tool-Released = TRUE
i) unlatch when the Current-Tool-Removed = TRUE (Rung #17)

17) Confirm Current Tool is removed
a) IF Current-Tool-Released = TRUE AND Tool-Holder-Down-Limit-Switch = TRUE AND Tool-Changed = FALSE THEN Current-Tool-Removed = TRUE
i) unlatched when the tool change is completed (Rung #4)

SECTION 8 - Requested Tool Pocket in Position?
18) Rotate to the requested tool pocket using the shortest path
a) IF Current-Tool-Removed = TRUE AND 2000/Requested-Tool-Number < Count AND Requested-Pocket-Is-In-Position = FALSE THEN motor-CW = TRUE
i) not initiated until Current-Tool-Removed = TRUE (RUNG #17)
ii) not stopped until Requested- Pocket-Is-In-Position (Rung #20)

19) Rotate to the requested tool pocket using the shortest path.
a) IF Current-Tool-Removed = TRUE AND 2000/Requested-Tool-Number > Count AND Requested- Pocket-Is-In-Position = FALSE THEN motor-CCW = TRUE
i) not initiated until Current-Tool-Removed = TRUE (RUNG #17)
ii) not stopped until Requested-Pocket-Is-In-Position (Rung #20)

20) Check that the requested tool pocket is in position
a) IF Current-Tool-Removed = TRUE AND 2000/Requested-Tool-Number = Count THEN Requested-Tool-Pocket-Is-In-Position = TRUE
i) unlatched when Current-Tool-Removed = False (Rung #17)

SECTION 9 - Install Requested Tool
21) Lift the requested tool holder into the spindle
a) IF Requested-Pocket-Is-In-Position = TRUE AND Requested-Tool-Installed = FALSE THEN Tool-Holder-Up-Solenoid = TRUE.
i) unlatched when the Requested-Tool-Installed = TRUE (Rung #24)

22) Close the power drawbar
a) IF Tool-Holder-Up-Limit-Switch = TRUE AND Turret-Up-Ready = FALSE THEN Requested-Tool-Inserted = TRUE
i) unlatches Rung #15

23) Slide Turret left to clear loaded tool
a) IF Current- Tool-Inserted = True AND Power-Draw-Bar-Hall-Effect -Detector = FALSE THEN Requested-Tool-Is-Secure = TRUE
i) unlatches Rung #14

24) Lower current Tool holder
a) IF Turret-Left-Limit-Switch AND Current-Tool-Is-Secure = TRUE THEN Requested-Tool-Installed = TRUE
i) unlatches Rung #21

25) Raise Turret up
a) IF Tool-Holder-Down-Limit-Switch = TRUE and Request-Tool-Installed = TRUE THEN Turret-Up-Ready = TRUE
i) unlatches Rung #12

26) Set current tool number to requested tool number
a) IF Current-Tool-Removed = TRUE and Turret-Up-Endstop = TRUE THEN Requested-Tool-Number = Current-Tool-Number
i) meets criteria for Rung #4
27 Jan 2017 12:38 #86771 by andypugh
How do you intend to raise the turret from CL?
27 Jan 2017 14:27 #86783 by MacGalempsy
.ini file
TOOL_CHANGE_QUILL_UP = 1 - The Z axis will be moved to machine zero prior to the tool change when the value is 1. This is the same as issuing a G0 G53 Z0
Time to create page: 0.189 seconds
Powered by Kunena Forum