Ursviken Pullmax Optima 130 press brake retrofit with 4 axis backgage

More
02 Dec 2025 17:47 #339657 by NWE
I am working on an Ursviken press brake retrofit to LinuxCNC and decided to document my progress etc here, and probably ask questions along the way. If you have any hints or advice for me, feel free to say so.

This press brake came with a Compaq pc booting some form of MSDOS and a Mitsubishi FX-64M PLC. The press brake had been forgotten in a warehouse for who knows how long until the current owner ended up buying it. After installation in the shop, upon first power-up, it complained of a depleted PLC battery. Sadly, the new battery didn't recover the lost memory. After multiple unsuccessful attempts to get Ursviken to get the thing working again, they showed me this project. I said I think I can make it run on LinuxCNC.

I pulled the PC and the PLC and installed a "Fanless industrial mini-pc" with 4 ethernet ports. For i/o I am using Mesa 7i80HDT + 7i36 + 7i54 and Beckhoff ethercat EL1409 16-inputs and EL2409 16-outputs.

Original 10 axis configuration was:
Y1 and Y2 = left and right ram (top die height)
X = backgage forward/backward motion
R = backgage up/down motion
Z1 and Z2 = independent left/right motion of the two backgage fingers.
Crowning: This feature currently has a mechanical malfunction so the customer asked me if I could leave crowning as an option for later if he decides he wants it. I said yes.
VDT = variable width bottom die, appears to have been present on the machine at some point but was apparently deleted.
PSB and PSA = automatic sheet lifter with a height axis and an angular axis. My customer requested to remove that because it will be in his way more than he uses it.

Target configuration:
Y1, Y2, X, R, Z1, Z2, and optional crowning. Y2 is slave of Y1. Z1 and Z2 are independent, except they run on the same rail and must not collide.

I see this machine has tonnage control, but I do not find any electronic pressure feedback sensor on the hydraulic system. It does have two servo valves, one for each side, plus an electronic proportional valve for the entire hydraulics. The servo valves appear to pertain to motion speed for each side. I wonder if the proportional valve sets the tonnage? It might get interesting driving that proportional valve with a DC servo motor output. I plan to limit it to one polarity only and try to modulate it to about 50hz PWM. I think it might work to use a software pwmgen running at 50HZ in hal to set the hardware pwmgen to either 0% or whatever pwm % is the max mA rating of the valve coil.

X and R axis each have a Baldor 90VDC servo with tachometer feedback to the Cybelec servo amps and encoder feedback to the PC controller. The Cybelecs' drive power is set with +/-10VDC from the 7i36 card.

I will try to power the servo valves and the proportional valve using the DC servo outputs from the 7i54 card.

Z1 and Z2 axis are DC worm drive motors powered by fwd/rev contactors and basic encoder feedback to the PC.

Crowning is a common AC 3 phase induction motor on a worm gear box driving an ACME lead screw protruding from the left side of the bottom bed. It is powered by a fwd/rev contactor.
The following user(s) said Thank You: EW_CNC

Please Log in or Create an account to join the conversation.

More
02 Dec 2025 23:48 #339671 by NWE
I'm trying to figure out my options for homing everything. Originally my plan was to launch it with:
cd /home/titus/linuxcnc/configs/pullmax
halrun -I -f config.hal

within that hal I load everything else including:
loadusr gladevcp -Wn pullmax -H ui.hal pullmax.ui
also hostmot2, mesa, ethercat, etc.

This leaves me without motmod (motion), homing, etc. It is just a simple Glade + hal app.

I would like to use the full linuxcnc system instead of writing my homing and slave axis (ram control) from scratch. Maybe avoid reinventing the wheel.

I am currently studying how to load everything with like:
cd /home/titus/linuxcnc/configs/pullmax
linuxcnc pullmax.ini

Progress is coming in small increments. Currently struggling to get past this:
USRMOT: ERROR: command timeout
emcMotionInit: emcTrajInit failed
Waiting for component 'inihal' to become ready............USRMOT: ERROR: command timeout
emcMotionInit: emcTrajInit failed

full error attached
the ui comes up and works (I only got the position readouts hooked up at this point and encoder scales all at 1.0, servos all disabled yet, bumped each axis with my hands and got counts.

I'll keep poking at it. I'm learning as I go.
Attachments:

Please Log in or Create an account to join the conversation.

More
03 Dec 2025 08:30 #339680 by Aciera
Have a look at the 'extra joints' feature. You might have to configure at least one regular joint/axis for motmod to be happy but that still leaves 15 to be used as 'extra joints'. Homing extra joints is handled just like regular joints but are controlled through hal pins after homing. For more info see links in this post:
forum.linuxcnc.org/24-hal-components/577...h-push-button#338305
The following user(s) said Thank You: NWE

Please Log in or Create an account to join the conversation.

More
03 Dec 2025 19:36 #339701 by NWE
That helps. I had seen the extra joints feature but didn't know enough about it to realize that is what I need.

Progress at this point:
I used Pncconf to create a common 3 axis mill config with the default mesa cards selected, as my mesa setup does not seem listed. I edited the generated mesa configs to:
1. Match my mesa hardware.
2. Converted the XYZ axis to simulated by zeroing their [JOINT]HOME_ ini parameters and connecting their pos_cmd to pos_fb.
3. Created 6 'extra joints' that I will actually be using.

I still have not figured out how to delete the axis gui without breaking a boatload of stuff. I begin to think I will be fine with allowing axis to load minimized, and have my gladevcp ui load maximized, and maybe also modal so it stays on top. It will be most convenient for the machine operator if my gladevcp never disappears from his touchscreen. I think he knows more about bending steel than I do about computers.

Please Log in or Create an account to join the conversation.

More
03 Dec 2025 23:27 #339706 by NWE
I think I begin to see into how this 'extra joints' command flow works.

1. My ui will trigger homing via a "Home all" button. NOTE: Y1 and Y2 will need footpedal operation to complete the ram homing and they home simultaneously.

2. When homing is complete, the joint.5.homed pin enables the j5.limit3.enable to enable program control of that servo.

3. My ui sends a position to j5.limit3.in then j5.limit3.out feeds joint.5.posthome-cmd. This seems to be a position value (not velocity). If I am correct, that is what I need here.

4. The position from #3. feeds straight through to joint.5.motor-pos-cmd into j5.pid.input

5. j5.pid.output is a velocity command driving hm2_7i80.0.pwmgen.00.value

6. Feedback is in the form of hm2_7i80.0.encoder.00.position to joint.5.motor-pos-fb and hm2_7i80.0.encoder.00.velocity to j5.pid.feedback

I will draw a flowchart of this for reference.

Please Log in or Create an account to join the conversation.

Time to create page: 0.115 seconds
Powered by Kunena Forum