WAAM Metal Printer - Control Welding Power Source via ModBus
-
Hi everyone,
I'm working on a project in WAAM (wire arc additive manufacturing). Now I was thinking about using a Duet 3 6HC Board as CNC Board. Next to a polar printer based mechanical setup I'm using a welding power source that must be controlled via ModBus rtu. Has anyone recommondations how to link the Welding power source with the cnc? I'm a mechanical Engineer so I'm not too deep in the subject but as far as I understand the ModBus I probably need an additional microcontroller (Master) like the Rasperry Pi with an RS485 interface to controll the Welding Power Source (Slave) via the G-Code from the Duet. Or is there a simplier way of controlling the axis movement and the welding power source.
I appreciate every help. -
@benjorni you could connect a RS485 driver to one of the UART-capable IO ports on the 6HC. Firmware changes would be needed to send the correct Modbus RTU commands. When commands need to be sent, and when?
-
@dc42 thank you for your fast response. Commands would be sent to start and stop the welding process and to control the wire feed rate, the Amperage and the Voltage of the power source. So theres no need for a realy fast communication. Firmware changes sound quite complicated, is that a services one can purchase from DUET3D ?
-
-
@benjorni yes it's possible to pay us to make firmware changes. But as an alternative to modifying the main board firmware, it may be possible to use a SammyC21 board attached to the CAN bus to connect to Modbus using a RS485 driver.
How often do you need to send those commands? Is it on every "printing" move; or less than that; or several times per move? I'm wondering if the existing code to control later cutters/engravers could be adapted.
-
@benjorni
What welding process are you using?
If it's GMAW then I suggest you consider a Fronius TPSi power source and if the budget allows use the CMT process.
This is what most commercially available WAAM systems use.
There are many interfaces available for TPSi ranging from basic 24v IO's through to any bus system you care to use.
It's rare in robotics these days to adjust voltage and wire speed using analog signals.
Typically, all welding parameters are saved in jobs on the power source, so you just select the correct job at the start of each weld. It's also possible to change jobs mid weld.
Likewise start and stop can be as simple as a digital output. All the weld parameters such as current ramp down and post gas flow are stored in the job on the power source.
So in its simplest form, you could use an IO interface and a logic level converter to do everything.
Start stop is simply high/low and jobs (weld parameters) require enough io's to define a binary number. So if you needed 100 different weld jobs, you'd need 7 available io's plus one for start/stop and one for an arc established signal.
If you use any of the BUS systems then there's 1000 jobs available.
Other welding systems may have similar control systems, but none have CMT.
If you're looking for any sort of fine detail then this is almost a must have. -
@dc42 in the best case one signal to start the welding process at the beginning of the print and one to stop. However it might be that it's necessary to adjust the voltage, amperage or wire feed speed once in a while but definitely not every G-Code line. Thanks for the help!
-
@OwenD hi we are not using a GMAW process. But thanks for the informations it's still interessting and some things may bay the same for our process.
-
@benjorni in that case the simplest option would be to use a SAMMYC21 connected to the CAN bus to interface to the welding power source via a RS485 driver. There is sample code for the SAMMYC21 in our Duet3Expansion github repository. You would need to choose a SERCOM-capable port to connect the RS485 driver to.
The modifications to the sample code that you would need are in file src/GPIO/GpioPorts.cpp:
- In function HandleM950Gpio, if the specified pin is the MODBUS port, initialise the pin in UART mode. You may also want to send a "welding power off" command at this point.
- In function HandleGpioWrite, if the port is the MODBUS port, write appropriate data to the UART instead of calling WriteAnalog.
As you want to control three parameters (voltage, current, wire feed speed) you might want to define 3 "pins" that write to the same UART.
In config.g you would use M950 commands to set up the connection to the SAMMYC21, then in the GCode you would use M42 commands to control the parameters.
I have it in mind to add a function similar to M260/M261 that writes to UART instead of I2C. If/when I implement this, it would simplify achieving your objective.