:lang: en
:toc:

[[cha:pmx485]]
= Powermax Modbus Driver

// Custom lang highlight
// must come after the doc title, to work around a bug in asciidoc 8.6.6
:ini: {basebackend@docbook:'':ini}
:hal: {basebackend@docbook:'':hal}
:ngc: {basebackend@docbook:'':ngc}

This is a non-realtime HAL program, written in python, to control Hypetherm Powermax plasma cutters using the Modbus ASCII protocol over RS485.

NOTE: Since this is a non-realtime program it can be affected by computer loading and latency. It is possible to lose communications which will be indicated by a change in the status output. One should always have an Estop circuit that kills the power to the unit in case of emergency.

This component is loaded using the halcmd "loadusr" command:

[source,{hal}]
----
loadusr -Wn pmx485 pmx485 /dev/ttyUSB0
----

This will load the pmx485 component using the /dev/ttyUSB0 port and wait
for it to become ready.

It is necessary to name the port to use for communications.

== Pins

* *pmx485.mode-set* (bit, in) # set cutting mode
* *pmx485.current-set* (bit, in) # set cutting current
* *pmx485.pressure-set* (bit, in) # set gas pressure
* *pmx485.enable* (bit, in) # enable the component
* *pmx485.mode* (bit, out) # cut mode feedback
* *pmx485.current* (bit, out) # cutting current feedback
* *pmx485.pressure* (bit, out) # gas pressure feedback
* *pmx485.fault* (bit, out) # powermax fault code
* *pmx485.status* (bit, out) # connection status
* *pmx485.current-min* (bit, out) # minimum allowed current
* *pmx485.current-max* (bit, out) # maximum allowed current
* *pmx485.pressure-min* (bit, out) # minimum allowed gas pressure
* *pmx485.pressure-max* (bit, out) # maximum allowed gas pressure

== Description

To communicate with a Powermax, the component must first be enabled via
the *enable* pin and it may then initiate a request to the Powermax by
writing a valid string to the following pins:

* *mode-set*
* *current-set*
* *pressure-set*

NOTE: A *pressure-set* value of zero is valid, the Powermax will then
calculate the required pressure internally.

Communications may be validated from the Powermax display or the *status*
pin. While in remote mode, the mode, current and pressure may be changed
as needed.

To terminate the communications, do one of the following:

* Set all set pins to zero: *mode-set*, *current-set*, and
  *pressure-set*.
* Disconnect the Powermax power supply from its power source for
  approximately 30 seconds. When you power the system back ON, it will
  no longer be in remote mode.

== Reference:

* Hypertherm Application Note #807220 +
  "Powermax45 XP/65/85/105/125® Serial Communication Protocol"

// vim: set syntax=asciidoc:
