In this section are described the advanced commands, such as trigger and waveform.

The `TRIGGER` command allows to set and read the **trigger configuration**.

- The trigger option can be used only when the **Optional Board** with **Trigger input** is installed on the device - see {ref}`Optional Boards`.
- The information regarding the Trigger level and relative logic thresholds are present in the **User's Manual**

The trigger option can be used only when the **Optional Board** with **Trigger input** is installed on the device - see {ref}`Optional Boards`.

The information regarding the Trigger level and relative logic thresholds are present in the **User's Manual**

The information regarding the Trigger level and relative logic thresholds are present in the 

**OFF**: Trigger input is ignored, the trigger event is not detected

**POS**: The trigger event is detected at **positive edge** of the trigger input signal

**NEG**: The trigger event is detected at **negative edge** of the trigger input signal

**BOTH**: The trigger event is detected at **both edges (positive + negative)** of the trigger input signal

**LOW**: The trigger event is detected when the trigger input signal **is low** (acts as a "gate signal")

**HIGH**: The trigger event is detected when the trigger input signal **is high** (acts as a "gate signal")

The trigger functionality is related also to the **Update Mode** (see {ref}`UPMODE Command`).

When a trigger event is detected, the device action are the following:

The action of the waveform depends over the Waveform Trigger configuration - see {ref}`WAVE Command`

The action of the waveform depends over the Waveform Trigger configuration - see 

Last analog setpoint is applied (available only when optional board are installed - see {ref}`Optional Boards`)

Last analog setpoint is applied (available only when optional board are installed - see 

Read the detected trigger level of the trigger input signal (only for debug)

Trigger functionality is enabled - Trigger event is detected at **positive edge** of the trigger signal

Trigger functionality is enabled - Trigger event is detected at 

Trigger functionality is enabled - Trigger event is detected at **negative edge** of the trigger signal

Trigger functionality is enabled - Trigger event is detected at **both edges** of the trigger signal

Trigger functionality is enabled - Trigger event is detected when the trigger signal **is low**

Trigger functionality is enabled - Trigger event is detected when the trigger signal 

Trigger functionality is enabled - Trigger event is detected when the trigger signal **is high**

TRIGGER:POS  
#AK

TRIGGER:?
#TRIGGER:POS

TRIGGER:LEVEL:?
#TRIGGER:HIGH

The `WAVE` command allows to upload and reproduce a **buffer of pre-stored setpoints**. Using this command properly it is possible also to generate a **waveform** or to reproduce a **sequence of setpoints**.

. Using this command properly it is possible also to generate a 

The device takes a new setpoint from the buffer, at every PID calculation cycle (*Update Frequency*).

The device takes a new setpoint from the buffer, at every PID calculation cycle (

To verify the Update Frequency, see the {ref}`UPFREQ Command`. The length of the Buffer of setpoints is limited, and so it is possible to use a **Prescaler** in order to reduce the *Update Frequency* - {math}`f_{update}`. This can be useful in the case of waveform in order to enlarge the waveform length or to generate very slow waveforms.

. The length of the Buffer of setpoints is limited, and so it is possible to use a 

. This can be useful in the case of waveform in order to enlarge the waveform length or to generate very slow waveforms.

Setting properly the *buffer points* it is possible to reproduce a **waveform**. To load the waveform points it is enough to put in the buffer the points of the desired waveform, sampled with {math}`f_{sampling} (f_s)`:

. To load the waveform points it is enough to put in the buffer the points of the desired waveform, sampled with 

```{warning}
```

The trigger events can be configured in the following ways:
- **OFF**: Trigger input is ignored, the trigger event is not detected
- **POS**: The trigger event is detected at **positive edge** of the trigger input signal
- **NEG**: The trigger event is detected at **negative edge** of the trigger input signal
- **BOTH**: The trigger event is detected at **both edges (positive + negative)** of the trigger input signal
- **LOW**: The trigger event is detected when the trigger input signal **is low** (acts as a "gate signal")
- **HIGH**: The trigger event is detected when the trigger input signal **is high** (acts as a "gate signal")

![interlock_logic](./images/trigger.png)

| **Update mode** | **Action @ Trigger Event**                                                                                      |
| --------------- | --------------------------------------------------------------------------------------------------------------- |
| NORMAL          | Last setpoint or ramp are applied                                                                               |
| WAVE            | The action of the waveform depends over the Waveform Trigger configuration - see {ref}`WAVE Command`            |
| AIN             | Last analog setpoint is applied (available only when optional board are installed - see {ref}`Optional Boards`) |
| SFP             | Last SFP setpoint is applied                                                                                    |

![interlock_logic](./images/trigger_example.png)

 TODO:
 | R       | WAVE:PERIODS:<*period-index*>  | #AK / #NAK                      | Set the number of periods setting  | -> verify if available
 | R       | WAVE:POINTS:<*p1*>:<*p2*>:...:<*pN*>: | #AK / #NAK                      | Fill the internal buffer with setpoints |
 | W       | WAVE:POINTS:RAW:<*p1_raw*>:<*p2_raw*>:...:<*pN_raw*> | #AK / #NAK                           | Fill the internal buffer with setpoints |

TODO:

Indicates the number of times (periods) that the buffer has to be reproduced; if equal to 0 -> Infinite periods (The waveform can be stopped with `WAVE:STOP` command)

Indicates the number of times (periods) that the buffer has to be reproduced; if equal to 0 -> Infinite periods (The waveform can be stopped with 

Setpoints sequence - The min number of points is 5; the max number of setpoints is 500.000

Start to reproduce the content of the buffer on trigger event. To stop the execution of the waveform it is necessary to use the `WAVE:STOP` command or to wait the end of the buffer (The buffer will be reproduced for the <*period-number*> times).

Start to reproduce the content of the buffer on trigger event. To stop the execution of the waveform it is necessary to use the 

 command or to wait the end of the buffer (The buffer will be reproduced for the <

Reproduce the next point on trigger event. To arm the execution it is necessary to send the `WAVE:START` command. This mode is meant to be used to reproduce a sequence of pre-defined points, **for this reason in this mode the prescaler setting is bypassed**.

Reproduce the next point on trigger event. To arm the execution it is necessary to send the 

 command. This mode is meant to be used to reproduce a sequence of pre-defined points, 

In this configuration the buffer is reproduced on trigger event. This mode is meant to be with `TRIGGER` set to `HIGH` or `LOW` setting in order that the trigger acts as enable signal (in this mode the prescaler is **not bypassed**). To arm the waveform execution it is necessary to send the `WAVE:START` command.

In this configuration the buffer is reproduced on trigger event. This mode is meant to be with 

 setting in order that the trigger acts as enable signal (in this mode the prescaler is 

This option has the same behavior as `GATE` option, but when the trigger event is not more active, the waveform index is reset to 0 (the waveform is rearmed).

 option, but when the trigger event is not more active, the waveform index is reset to 0 (the waveform is rearmed).

- The `WAVE:TRIGGER` mode is related to the `TRIGGER` mode, please refer to {ref}`TRIGGER Command`.

The `WAVE:TRIGGER` mode is related to the `TRIGGER` mode, please refer to {ref}`TRIGGER Command`.

For the next examples, the internal buffer was filled with a sine waveform points with the following settings:

In this example, the preloaded waveform **starts** when a trigger event is detected. In this example the trigger is set to `POS` and so the trigger event is generated at *positive edge* of the trigger signal.
![trigger_start_pos](./images/trigger_start_pos.jpg)

 when a trigger event is detected. In this example the trigger is set to 

In this example, the preloaded waveform points are loaded when a trigger event is detected. In this example the trigger is set to `POS` and so the trigger event is generated at *positive edge* of the trigger signal, which in this example is a square waveform of 50 KHz. When the square waveform is not executed, the trigger event is not generated and so the setpoint is not updated.
![trigger_points_pos](./images/trigger_points_pos.jpg)

In this example, the preloaded waveform points are loaded when a trigger event is detected. In this example the trigger is set to 

 of the trigger signal, which in this example is a square waveform of 50 KHz. When the square waveform is not executed, the trigger event is not generated and so the setpoint is not updated.

In this example, the preloaded waveform points are loaded when a trigger event is detected. In this example the trigger is set to `HIGH` and so the trigger event is generated when the *trigger level is high*. In this example the trigger signal is a square waveform of 1 Hz. When the trigger signal is *high*, the trigger event is generated and so the setpoint is updated.
![trigger_gate_high](./images/trigger_gate_high.jpg)

. In this example the trigger signal is a square waveform of 1 Hz. When the trigger signal is 

, the trigger event is generated and so the setpoint is updated.

The configuration of this example are the same of the previous one, but the `GATERESET` mode resets the buffer index when the trigger event is not valid, and so at next trigger level, the waveform starts from the beginning. 
![trigger_gatereset_high](./images/trigger_gatereset_high.jpg)

The configuration of this example are the same of the previous one, but the 

 mode resets the buffer index when the trigger event is not valid, and so at next trigger level, the waveform starts from the beginning.

- The `WAVE` and `TRIGGER` commands allows also particular combinations, that does not make any sense for example:
  - When `TRIGGER:OFF` is set, the trigger sensing is disabled and so the trigger event never occurs, thus the waveform is never updated.
  - When the `WAVE:TRIGGER:GATERESET` is used with `TRIGGER:POS` configuration, the waveform is reset at every *negative edge* of the trigger -> the buffer index is constantly in reset.

The `WAVE` and `TRIGGER` commands allows also particular combinations, that does not make any sense for example:

 commands allows also particular combinations, that does not make any sense for example:

When `TRIGGER:OFF` is set, the trigger sensing is disabled and so the trigger event never occurs, thus the waveform is never updated.

 is set, the trigger sensing is disabled and so the trigger event never occurs, thus the waveform is never updated.

When the `WAVE:TRIGGER:GATERESET` is used with `TRIGGER:POS` configuration, the waveform is reset at every *negative edge* of the trigger -> the buffer index is constantly in reset.

WAVE:PERIODS:5 
#AK

WAVE:PERIODS:?
#WAVE:PERIODS:5

WAVE:POINTS:1:2:3:4:5:6:7:8:9:10
#AK

WAVE:POINTS:NUM:?
#WAVE:POINTS:NUM:10

WAVE:PRESCALER:2
#AK

WAVE:PRESCALER:?
#WAVE:PRESCALER:2

WAVE:TRIGGER:START
#AK

WAVE:START
#AK

WAVE:STOP
#AK

The values stored in the internal buffer may slightly differ from the set ones, because the string values, are internally converted to float numbers and so the stored number is the closest floating number to the given value.

In this chapter are listed the power supply commands with its description.

- Every command should be followed by the termination sequence CRLF `\r\n`.
- The replies from the power source are also terminated with the same sequence CRLF `\r\n`.

Every command should be followed by the termination sequence CRLF `\r\n`.

Every command should be followed by the termination sequence CRLF 

The replies from the power source are also terminated with the same sequence CRLF `\r\n`.

The replies from the power source are also terminated with the same sequence CRLF 

In the next examples the termination sequence will be not shown for a better readability of the code.

 TODO: legacy is now internal, put it as external?
legacy/legacy.md

TODO: legacy is now internal, put it as external?

The `FLOATMODE` command allows to read or modify the *Floating Mode*.

By factory configuration the unit minus terminal is grounded to the Mains-Earth (protective ground) trough a fuse.

To allow the floating operation of the power unit it is necessary to **remove the Earth Fuse** from the fuse-holder on the back-panel of the unit and to set the *Floating Mode* to **Floating**; otherwise to use the module connected to ground (default mode), it is necessary to set the *Floating Mode* to **Grounded** and to **insert the Earth Fuse**.

To allow the floating operation of the power unit it is necessary to 

 from the fuse-holder on the back-panel of the unit and to set the 

; otherwise to use the module connected to ground (default mode), it is necessary to set the 

- More detailed information regarding the fuse, its position, floating mode etc. can be found in the **User's Manual**.

More detailed information regarding the fuse, its position, floating mode etc. can be found in the **User's Manual**.

More detailed information regarding the fuse, its position, floating mode etc. can be found in the 

FLOATMODE:FLOATING
#AK

FLOATMODE:?
#FLOATMODE:FLOATING

FLOATMODE:GROUNDED
#AK

The `GET` command allows to read the current/voltage/power value at the output of the power unit and its ground current.

 command allows to read the current/voltage/power value at the output of the power unit and its ground current.

Return the output power read  [W] (*output current\*output voltage*) - *averaged values*

Return the output current read [A] - the returned value is calculated using only 1 sample of the ADC

Return the output voltage read [V] - the returned value is calculated using only 1 sample of the ADC

Return the output power read  [W] - the returned value is calculated using only 1 sample of the current ADC and 1 sample of the voltage ADC

Return the voltage read on the aux input [V] - see {ref}`Optional Boards` to verify which boards have this input

- To improve the signal-to-noise ratio, the `GET:I:?` / `GET:V:?` / `GET:P:?` commands return values that are calculated using a **2-stage moving average filter**.  
  - The first moving-average stage has the length of *8* samples, the second filter has the length of *1024* samples.
  - The first filter is running at "native" frequency, which is for example 100 KHz for the FAST-Bi-1K5 family (see {ref}`UPFREQ Command`); the second filter is receiving decimated data (by a factor *4*) from the first filter, the frequency is therefore for example: 100/4 = 25 KHz for FAST-Bi-1K5 family.
- The **AUX Input signal is optional**, so verify the {ref}`Optional Boards` section to verify which extension boards mount it. The AUX measuring range is bipolar: AUX ∊ [-10V, +10V].

To improve the signal-to-noise ratio, the `GET:I:?` / `GET:V:?` / `GET:P:?` commands return values that are calculated using a **2-stage moving average filter**.

The first moving-average stage has the length of *8* samples, the second filter has the length of *1024* samples.

The first filter is running at "native" frequency, which is for example 100 KHz for the FAST-Bi-1K5 family (see {ref}`UPFREQ Command`); the second filter is receiving decimated data (by a factor *4*) from the first filter, the frequency is therefore for example: 100/4 = 25 KHz for FAST-Bi-1K5 family.

The first filter is running at “native” frequency, which is for example 100 KHz for the FAST-Bi-1K5 family (see 

) from the first filter, the frequency is therefore for example: 100/4 = 25 KHz for FAST-Bi-1K5 family.

The **AUX Input signal is optional**, so verify the {ref}`Optional Boards` section to verify which extension boards mount it. The AUX measuring range is bipolar: AUX ∊ [-10V, +10V].

 section to verify which extension boards mount it. The AUX measuring range is bipolar: AUX ∊ [-10V, +10V].

GET:I:? 
#GET:I:5.48712

GET:V:SAMPLE:?  
#GET:V:SAMPLE:3.87698

GET:GC:?  
#GET:GC:0.1

The Ground Current read returns: a) the actual value when the module is in normal operation mode; b) the maximum read ground current value once the unit is in Ground Current fault state (so see which is the max ground current that tripped the fault). To restore the normal operation (module not in fault), it is necessary to reset the unit (`REG:RESET` command - see {ref}`REG Command` section).

The Ground Current read returns: a) the actual value when the module is in normal operation mode; b) the maximum read ground current value once the unit is in Ground Current fault state (so see which is the max ground current that tripped the fault). To restore the normal operation (module not in fault), it is necessary to reset the unit (

The `ID` command can be used to read or set the **Identification name** of the module (see {ref}`Internal Memory`) - to easily identify the power supply among the other ones connected in the same network.

) - to easily identify the power supply among the other ones connected in the same network.

- The default ID is the module serial number.  
- To change the module ID, the **ADMIN** privileges are needed (see {ref}`PASSWORD Command`) 

To change the module ID, the **ADMIN** privileges are needed (see {ref}`PASSWORD Command`)

ID:?
#ID:MAGNET_POWER_SUPPLY

ID:LAB_POWER_SUPPLY
#AK

ID:?
#ID:LAB_POWER_SUPPLY

The `INTERLOCK` command allows to configure the **external interlock** inputs that are present on the unit's back panel.

In case of an external interlock event, the output is disabled (see the {ref}```Power Supply Finite State Machine``` chapter) and the fault is signaled in the {ref}```Fault Register```.

In case of an external interlock event, the output is disabled (see the 

set interlocks polarity (direct- detect interlock when it is high; inverse - detect interlock when it is low)

change the related interlocks name (name associated to the interlock)

The logic to detect a single interlock is represented in the following figure:

The interlock intervention time specifies how many time the interlock condition should be valid in order to trip the interlock fault. It is also possible to set the intervention time to 0 -> in this case the fault trips immediately, when a interlock condition is detected.

Verify the enable status of the single interlock at specified id

Verify the polarity status of the single interlock at specified id

Integer that specifies the number of available interlocks (for example "4")

Integer that specifies the number of available interlocks (for example “4”)

Hex string that indicates the enable status for all the interlocks (1 - enabled; 0 - disabled)

Indicates the id of the interlock, for example 1 -> indicates interlock #1, 2 -> interlock #2 etc.

Similar to *enable_mask*, it is a mask that indicates the polarity status for all the interlocks (1 - direct polarity; 0 - inverse polarity)

, it is a mask that indicates the polarity status for all the interlocks (1 - direct polarity; 0 - inverse polarity)

Intervention time, that is associated to the specified interlock. The time is specified in [ms].

- The *enable_mask* and *polarity_mask* are represented by a hex mask. For example if the *enable_mask* is 0xB -> in binary: b'1011 -> it means that interlock #4, #2 and #1 are enabled and the interlock #3 is disabled. The same for the *polarity_mask*, so for example if the *polarity_mask* is 0x3 -> in binary: b'11 -> it means that interlock #2 and #1 use direct polarity and the interlock #3 and #4 use the inverse polarity.
- The interlock name (*int_name*) is a associated name to the interlock, that is visualized on the local display and on the integrated web interface in case of interlock.

The *enable_mask* and *polarity_mask* are represented by a hex mask. For example if the *enable_mask* is 0xB -> in binary: b'1011 -> it means that interlock #4, #2 and #1 are enabled and the interlock #3 is disabled. The same for the *polarity_mask*, so for example if the *polarity_mask* is 0x3 -> in binary: b'11 -> it means that interlock #2 and #1 use direct polarity and the interlock #3 and #4 use the inverse polarity.

 is 0xB -> in binary: b’1011 -> it means that interlock #4, #2 and #1 are enabled and the interlock #3 is disabled. The same for the 

 is 0x3 -> in binary: b’11 -> it means that interlock #2 and #1 use direct polarity and the interlock #3 and #4 use the inverse polarity.

The interlock name (*int_name*) is a associated name to the interlock, that is visualized on the local display and on the integrated web interface in case of interlock.

) is a associated name to the interlock, that is visualized on the local display and on the integrated web interface in case of interlock.

- Check the number of the available interlocks and the relative input circuity in the **User's Manual**.

Check the number of the available interlocks and the relative input circuity in the **User's Manual**.

Check the number of the available interlocks and the relative input circuity in the 

INTERLOCK:NUM?   
#INTERLOCK:NUM:4

INTERLOCK:ENABLE:0x3
#AK

INTERLOCK:ENABLE:?
#INTERLOCK:ENABLE:0x3

INTERLOCK:ENABLE:1:0
#AK

INTERLOCK:ENABLE:1:?
#INTERLOCK:ENABLE:1:0

#INTERLOCK:ENABLE:0x2

INTERLOCK:POLARITY:0x2
#AK

INTERLOCK:NAME:2:MAGNET_INTERLOCK
#AK

INTERLOCK:NAME:2:?
#INTERLOCK:NAME:2:MAGNET_INTERLOCK

INTERLOCK:INT:2:1000
#AK

INTERLOCK:INT:2:?
#INTERLOCK:INT:2:1000            

The `LIMITS` command can be used to query the unit's current, voltage and slew-rate limits.

 command can be used to query the unit’s current, voltage and slew-rate limits.

Return the **Current hardware limits** of the power unit (defined by the unit's hardware)

Return the **Voltage hardware limits** of the power unit (defined by the unit's hardware)

Return the **Power hardware limits** of the power unit (defined by the unit's hardware)

Return the **Current software limits** of the power unit (defined by the user)

Return the **Voltage software limits** of the power unit (defined by the user)

LIMITS:I:HW:?
#LIMITS:I:HW:-100:100

LIMITS:V:SW:?
#LIMITS:V:SW:-20.1:20.1

LIMITS:V:SR:?
#LIMITS:V:SR:0:2000

The `LOOP` Command is used to select or get the regulation mode of the power supply.

 Command is used to select or get the regulation mode of the power supply.

- *Loop Mode* can be set only when the module is in **OUT OFF State**.

*Loop Mode* can be set only when the module is in **OUT OFF State**.

The `OUT` command can be used to enable/disable the power supply output and to monitor the status of the power supply. The power supply output state is not controlled **only** by the `OUT` command, but its state depends on the related **Finite State Machine** (see {ref}`Power Supply Finite State Machine`). For this reason the `OUT` command do not control directly the power supplies output, but it evolves the related FSM, that controls the power supply output.

 command can be used to enable/disable the power supply output and to monitor the status of the power supply. The power supply output state is not controlled 

 command do not control directly the power supplies output, but it evolves the related FSM, that controls the power supply output.

FSM is in **ON state**, power stage is enabled and the PID controller is running, following the selected setpoint

, power stage is enabled and the PID controller is running, following the selected setpoint

FSM is in **OFF state**, power stage is disabled and the PID controller is in reset

Makes it evolve the FSM is in **Wait for OFF state**, when the FSM is in **ON state**; and makes it evolve the FSM is in **OFF state**, when the FSM is in **Wait for OFF state**

FSM is in **Wait For OFF state**, power stage is enabled and the PID controller is running, the module performs a fast ramp to zero. The module remains in this state until the output current is about 0A and then the FSM evolves automatically in **OFF state**.

, power stage is enabled and the PID controller is running, the module performs a fast ramp to zero. The module remains in this state until the output current is about 0A and then the FSM evolves automatically in 

The `REG` command allows **read the status/fault registers** and to **reset the fault register**.

The status register is a *32-bit register* that contains the general information of the status of the unit such as on/off status, update mode etc. See {ref}`Status register` section for the detailed description of the register's bits.

 that contains the general information of the status of the unit such as on/off status, update mode etc. See 

The fault register is a *32-bit register* that contains the fault information of the unit such (if any). See {ref}`Fault register` section for the detailed description of the register's bits.

 that contains the fault information of the unit such (if any). See 

Return the fault register in hexadecimal representation [^fault]

Return which was the first fault that occurs (this is useful in case of multiple faults)

Reset the fault register [^reset] and the relative *Fault bit* in the status register

TODO:
REG:WARNING:? -> No
REG:FAULT:0:?
REG:FAULT:1:?
REG:FAULT:2:?
REG:FAULT:3:?
REG:FAULT:NAME:?  -> internal
REG:FAULT:ALL:?  -> internal
REG:FAULT:VERBOSE:?  -> internal

REG:STATUS:? 
#REG:STATUS:0x14

REG:FAULT:? 
#REG:FAULT:0x9

REG:FAULT:FIRST? 
#REG:FAULT:0x8

REG:FAULT:RESET
#AK

#REG:STATUS:0x10       

The fault register is **latching**, so if a fault condition happens, its information is stored in the **fault register** until the reset of the status register (so if for example a fault condition occurs and after a while is solved, the relative bit in the fault register remains valid, until the reset command).

, so if a fault condition happens, its information is stored in the 

 until the reset of the status register (so if for example a fault condition occurs and after a while is solved, the relative bit in the fault register remains valid, until the reset command).

In order to put the module in ON (see {ref}`OUT Command`), it is necessary to solve all the fault conditions and reset the fault register before powering ON the module.

), it is necessary to solve all the fault conditions and reset the fault register before powering ON the module.

The `SET` command allows to set and read the current or voltage setpoint and the relative slew-rate that is used during the ramp.

 command allows to set and read the current or voltage setpoint and the relative slew-rate that is used during the ramp.

Set the current setpoint [A] - it is applied with a **ramp** (last set slew-rate is used)

Set the voltage setpoint [V] - it is applied with a **ramp** (last set slew-rate is used)

Set the current setpoint [A] and specify the ramp slew-rate [A/s] - it is applied with a **ramp**

Set the current setpoint [A] and specify the ramp slew-rate [A/s] - it is applied with a 

Set the voltage setpoint [V] and specify the ramp slew-rate [A/s] - it is applied with a **ramp**

Set the voltage setpoint [V] and specify the ramp slew-rate [A/s] - it is applied with a 

Set the current setpoint [A] - the setpoint is directly applied (it doesn't use ramp)

Set the current setpoint [A] - the setpoint is directly applied (it doesn’t use ramp)

Set the voltage setpoint [V] - the setpoint is directly applied (it doesn't use ramp)

Set the voltage setpoint [V] - the setpoint is directly applied (it doesn’t use ramp)

- The standard set commands: `SET:I:<setpoint-I`/ `SET:V:<setpoint-V>` / `SET:I:<slew-rate-I>:<setpoint-I>` / `SET:V:<slew-rate-V>:<setpoint-V>` perform a **ramp** to reach the selected setpoint. The applied slew-rate is the command or the last set slew-rate (in case that it is not passed).
- The commands `SET:I:DIRECT:<setpoint-I>` and `SET:V:DIRECT:<setpoint-V>` applies directly the setpoint without a ramp. The slope to reach the selected setpoint depends over the power supply ranges, PID parameters and load characteristics.
- If the system dynamics (that depends on the power supply ranges, PID parameters and load characteristics) is slower respect to the selected slew-rate, then the ramp will not follow exactly the slew-rate, but it will rise with the system dynamics.
- To apply a setpoint the unit has to be:
  - in **ON State** (see {ref}`OUT Command`) and 
  - in **Normal Update mode** (see {ref}`UPMODE Command`).
- To apply a **current setpoint** the **CC mode** has to be applied; vice versa to apply a **voltage setpoint** the **CV mode** has to be applied (see {ref}`LOOP Command`).
- The slew-rate set should be inside the allowed range. To verify the allowed range see the {ref}`LIMITS Command`.

The standard set commands: `SET:I:<setpoint-I`/ `SET:V:<setpoint-V>` / `SET:I:<slew-rate-I>:<setpoint-I>` / `SET:V:<slew-rate-V>:<setpoint-V>` perform a **ramp** to reach the selected setpoint. The applied slew-rate is the command or the last set slew-rate (in case that it is not passed).

 to reach the selected setpoint. The applied slew-rate is the command or the last set slew-rate (in case that it is not passed).

The commands `SET:I:DIRECT:<setpoint-I>` and `SET:V:DIRECT:<setpoint-V>` applies directly the setpoint without a ramp. The slope to reach the selected setpoint depends over the power supply ranges, PID parameters and load characteristics.

 applies directly the setpoint without a ramp. The slope to reach the selected setpoint depends over the power supply ranges, PID parameters and load characteristics.

If the system dynamics (that depends on the power supply ranges, PID parameters and load characteristics) is slower respect to the selected slew-rate, then the ramp will not follow exactly the slew-rate, but it will rise with the system dynamics.

To apply a **current setpoint** the **CC mode** has to be applied; vice versa to apply a **voltage setpoint** the **CV mode** has to be applied (see {ref}`LOOP Command`).

The slew-rate set should be inside the allowed range. To verify the allowed range see the {ref}`LIMITS Command`.

The slew-rate set should be inside the allowed range. To verify the allowed range see the 

- If the module is in some particular modes, for example in the **Trigger mode**, the current or voltage setpoint becomes active only after a **trigger event** (see {ref}`TRIGGER Command`).

If the module is in some particular modes, for example in the **Trigger mode**, the current or voltage setpoint becomes active only after a **trigger event** (see {ref}`TRIGGER Command`).

SET:I:5.4  
#AK

SET:I:?  
#SET:I:5.4

SET:I:SR:?
#SET:I:SR:10

SET:I:SR:50
#AK

#SET:I:SR:50

SET:I:0.5:10
#AK

#SET:I:SR:0.5

The `SWITCH` command allows to enable or disable the switches present on the module.

 command allows to enable or disable the switches present on the module.

Up to now, only the **Persistent Switch** is present on the module (additional switches could be added in the future).

 is present on the module (additional switches could be added in the future).

The **Persistent Switch** is a switch present on the rear of the power unit and can be used in **superconducting magnets** applications.

 is a switch present on the rear of the power unit and can be used in 

- More detailed information regarding the persistent switch can be found in the **User's Manual**.

More detailed information regarding the persistent switch can be found in the **User's Manual**.

More detailed information regarding the persistent switch can be found in the 

SWITCH:PERSISTENT:ENABLE
#AK

SWITCH:PERSISTENT:?
#SWITCH:PERSISTENT:ENABLE

SWITCH:PERSISTENT:DISABLE
#AK

The `TEMP` command allows to read the power supplies internal and external temperatures.

 command allows to read the power supplies internal and external temperatures.

Read the temperature of the **External Thermocouple** (available only when optional board is installed - see {ref}`Optional Boards`)

 TODO: add on regul8or
*   - SV
    - Read the temperature of the **Voltage Sensing Shunt Resitor**
| DR              | Read the temperature of the **Dissipation Resistors** (available only on FAST-PS+ model)                           |

TODO: add on regul8or
*   - SV

TODO: sensing shunt resistor is private
TODO: add optional board table in another file

- The `TEMP:TC:?` command is available only if the optional board is installed - see {ref}`Optional Boards`

The `TEMP:TC:?` command is available only if the optional board is installed - see {ref}`Optional Boards`

 command is available only if the optional board is installed - see 

 TODO: add these
 - The `TEMP:DR:?` command is available only on `FAST-PS+` model.

TODO: add these

The `UPFREQ` command returns the power supply *Update Frequency* used for the ADC reads and PID calculation.

Update frequency that indicates the ADC reads, PID calculation and Waveform update rate [Hz]

- The ADC reads, PID calculation frequency and the PWM period, are all related and equal to the *Update Frequency*.
- For the FAST-PS+ and FAST-Bi-1K5 families, the update frequency is 100 KHz.

The ADC reads, PID calculation frequency and the PWM period, are all related and equal to the *Update Frequency*.

The ADC reads, PID calculation frequency and the PWM period, are all related and equal to the 

For the FAST-PS+ and FAST-Bi-1K5 families, the update frequency is 100 KHz.

The `UPMODE` command allows to select or read the setpoint *Update Mode*.

%         |                 |                  | R | UPMODE:LIST:? | #UPMODE:<*mode_0*>:<*mode_1*>:...: <*mode_n*> |

| **<*mode*>** / **<*mode_n*>** | **Description**                                                         |

Setpoint is set using analog input [-10V,+10V] (available only when optional board are installed - see {ref}`Optional Boards`)

Setpoint is set using analog input [-10V,+10V] (available only when optional board are installed - see 

Setpoint is taken from a dedicated custom command sent to SFP interface

- When *AIN* mode is selected, the relative Analog input signal [-10V,+10V] is converted to the module full-scale value. So for example when a module has a full-scale of 150A - 10V, then in CC mode the +10V is is converted to +150A; otherwise in CV mode the +10V remains +10V.

When *AIN* mode is selected, the relative Analog input signal [-10V,+10V] is converted to the module full-scale value. So for example when a module has a full-scale of 150A - 10V, then in CC mode the +10V is is converted to +150A; otherwise in CV mode the +10V remains +10V.

 mode is selected, the relative Analog input signal [-10V,+10V] is converted to the module full-scale value. So for example when a module has a full-scale of 150A - 10V, then in CC mode the +10V is is converted to +150A; otherwise in CV mode the +10V remains +10V.

The `VER` command returns the power supply model and the actual installed firmware version.

 command returns the power supply model and the actual installed firmware version.

 ====================================================================================================
 Internal documentation
```{only} full
**Additional Internal command(s):**

| **R/W** | **Command** | **Response**                                        |
| ------- | ----------- | --------------------------------------------------- |
| R       | VER:FULL:?  | #VER:FULL:<*name*>:<*version*>:<*compilation_time*> |
| R       | VER:MS:?    | #VER:MS:<*main_server_version*>                     |
```

====================================================================================================

```

In this section are listed the command that can be used to turn `ON` or `OFF` the power unit, change its setpoint, read the voltage, current, power etc.

In this section are listed the command that can be used to turn 

 the power unit, change its setpoint, read the voltage, current, power etc.

Here is a fast recap table of all available commands (only for internal use):

Return the **Current hardware limits** of the power unit (hw defined)

Return the **Current software limits** of the power unit (sw defined)

Return the **Voltage hardware limits** of the power unit (hw defined)

Return the **Voltage software limits** of the power unit (sw defined)

Get the detailed capabilities list (list of single functionalities as AIN etc.)

Get the list of available features, that has to be tested during the calibration

| PARALLEL:MODE:?                        | R       | #PARALLEL:MODE<MASTER\|SLAVE\|DISABLE>                                | [*]          | Get the parallel mode                      |
| PARALLEL:MODE<MASTER\|SLAVE\|DISABLE>  | W       | #AK / #NAK                                                            | [*]          | Set the parallel mode                      |
| PARALLEL:NUM:?                         | R       | #PARALLEL:NUM:<_parallel-num_>                                        | [*]          | Get the number of the modules connected in parallel [1-4]            |
| PARALLEL:INDEX:?                       | R       | #PARALLEL:INDEX:<_parallel-index_>                                    | [*]          | Get the index of the parallel connection Slaves[1-3], Master[0]      |

| PARALLEL:MODE:?                        | R       | #PARALLEL:MODE<MASTER|SLAVE|DISABLE>                                | [

]          | Get the parallel mode                      |
| PARALLEL:MODE<MASTER|SLAVE|DISABLE>  | W       | #AK / #NAK                                                            | [

| PARALLEL:NUM:?                         | R       | #PARALLEL:NUM:<

]          | Get the number of the modules connected in parallel [1-4]            |
| PARALLEL:INDEX:?                       | R       | #PARALLEL:INDEX:<parallel-index>                                    | [

| PARALLEL:INDEX:?                       | R       | #PARALLEL:INDEX:<

]          | Get the index of the parallel connection Slaves[1-3], Master[0]      |

 TODO on main server:
 modify the CHANGELOG command
maybe capabilities is not clear enough

TODO on main server:

The support with the older command format, used in the previous families is still supported, but **it is strongly suggested to use the new command format for new projects.**

The support with the older command format, used in the previous families is still supported, but 

it is strongly suggested to use the new command format for new projects.

- After a successful write of the memory parameter, the parameter is immediately applied, but it is not automatically stored in the non-volatile memory. 
- To save the written parameter(s) in the non-volatile memory, use the `MEM:SAVE` command.

After a successful write of the memory parameter, the parameter is immediately applied, but it is not automatically stored in the non-volatile memory.

To save the written parameter(s) in the non-volatile memory, use the `MEM:SAVE` command.

To save the written parameter(s) in the non-volatile memory, use the 

MEM:30:?
#MEM:30:FAST-BI-1K5-UNIT

MEM:12:?
#MEM:12:1.000456

MEM:30:POWER_UNIT_ON_MAGNET_01
#AK

MEM:30:?
#MEM:30:POWER_UNIT_ON_MAGNET_01

MEM:SAVE
#AK

The `PASSWORD` command can be used to change the user privileges in order to allow to modify the internal memory fields, that are password protected.

 command can be used to change the user privileges in order to allow to modify the internal memory fields, that are password protected.

The default user privileges is **USER** level; inserting the correct password it is possible to access to **ADMIN** level.

 level; inserting the correct password it is possible to access to 

- See {ref}`Internal Memory` for the whole memory description, with related privileges level.
- Note: some fields are factory defined and so they cannot be changed (read-only).

See {ref}`Internal Memory` for the whole memory description, with related privileges level.

 for the whole memory description, with related privileges level.

Note: some fields are factory defined and so they cannot be changed (read-only).

Change the user's privileges, inserting the correct password word

Change the user’s privileges, inserting the correct password word

This command allows to restore the default admin password word in case that the customized password word was lost.

Lowest privileges level: it can use the unit (setting the mode of operation, put the module in on, set the current or voltage etc.), but it can change only the basic configuration parameters

Highest privileges level: it can modify all available parameters and use all commands

This word can be used to exit from the *ADMIN* mode and lock again the privileges to *USER*

- The default Admin password is **"PS-ADMIN"**
- To modify the password (command: `PASSWORD:NEW:<new-psw>`) the user has to have already the *ADMIN* privileges.

To modify the password (command: `PASSWORD:NEW:<new-psw>`) the user has to have already the *ADMIN* privileges.

- Pay attention: if the custom password is lost it will not be possible to access with *ADMIN* privileges to the power unit.  
- To restore the default password see `PASSWORD:RESET:<pin-code>` command.  To get the `<pin-code>` it is necessary to **contact the CAENels support team** indicating the MAC address of the device.
- After the password reset, the default **PS-ADMIN** password is restored.
- The password is **case insensitive**

Pay attention: if the custom password is lost it will not be possible to access with *ADMIN* privileges to the power unit.

Pay attention: if the custom password is lost it will not be possible to access with 

To restore the default password see `PASSWORD:RESET:<pin-code>` command.  To get the `<pin-code>` it is necessary to **contact the CAENels support team** indicating the MAC address of the device.

After the password reset, the default **PS-ADMIN** password is restored.

PASSWORD:?
#PASSWORD:USER

PASSWORD:PS-ADMIN
#AK

#PASSWORD:ADMIN

PASSWORD:NEW:NEW_PASSWORD
#AK

PASSWORD:RESET:0123456789ABCDEF0123456789ABCDEF
#AK

## Password Related Commands

These commands are used to change the power supply privileges.

The power supply has two levels of privileges:

- **USER**
- **ADMIN**

With *USER* privileges it is possible to write only basic parameters (such as slew-rate etc.), otherwise with *ADMIN* privileges, it is possible to configure the power supply parameters (such as the PID parameters, interlocks etc.).

For the whole list of parameters and of previleges needed to modify them see attachment *Internal Memory*.

- **USER**

The following commands can be used to read and write the **Memory parameters**, that are stored in the non-volatile memory (disk).
The write-access to several parameters is password protected. To modify these parameters, it is necessary to have the `admin` privileges, that can be obtained using the `PASSWORD Command` (see {ref}`PASSWORD Command`).

The write-access to several parameters is password protected. To modify these parameters, it is necessary to have the 

Certain parameters are read-only, and so they are factory defined and it is not possible to modify them (such as calibration parameters etc.).

To read or write the memory parameters use the {ref}`MEM Command`.

The memory parameters are listed on the following page: {ref}`Internal Memory`.

 TODO: <!-- Some commands are case sensitive (EPICS and NTP) -->

Commands are in *ASCII format* and are **NOT CASE SENSITIVE** and therefore the command string can be sent either using uppercase or lowercase characters.

 and therefore the command string can be sent either using uppercase or lowercase characters.

Each command is composed by one or more fields, the fields are separated by colons `:`.

Each command is composed by one or more fields, the fields are separated by colons 

Each command has to be terminated with the **CRLF** ("Carrige return, line feed") termination sequence `\r\n`.

- In this documentation the commands are represented only in **uppercase**.
- To facilitate the reading, **the termination sequence is not included in the code examples**, but it is necessary to include it at the end of every command.

In this documentation the commands are represented only in **uppercase**.

To facilitate the reading, **the termination sequence is not included in the code examples**, but it is necessary to include it at the end of every command.

, but it is necessary to include it at the end of every command.

`command name`, followed by **one or more optional sub-commands** separated by colons `:`;

`command name echo` is the echo of the command that was sent, without the question mark;

 is the echo of the command that was sent, without the question mark;

`command name` (which could be followed either by one or more optional sub-commands separated by colons);

 (which could be followed either by one or more optional sub-commands separated by colons);

`#NAK` (*Not Acknowledged*): when the command is **NOT accepted**, followed by the corresponding `error code` and the `error description` separated by a space character ` `.

By default the **NAK** (*Not Acknowledged*) reply returns also the error description. The error description can be disabled acting on the `Error Code Description` field, which is enabled by default (see {ref}`Internal Memory`).

) reply returns also the error description. The error description can be disabled acting on the 

- iI the later sections the termination sequence will not be displayed for better readability, but it must be always present otherwise the commands are not parsed.

- Before sending the next command, it is necessary to wait the response of the unit to the previous one.

iI the later sections the termination sequence will not be displayed for better readability, but it must be always present otherwise the commands are not parsed.

Before sending the next command, it is necessary to wait the response of the unit to the previous one.

In this chapter are listed the basic characteristics of the remote communication interface.

The control interface is based on ASCII commands over the `TCP` or `UDP` protocol on the **port 10001**.

The Ethernet configuration can be changed upon the customer needs using the local interface menu.

The Ethernet Configuration can be changed, but it is not possible to modify the communication protocol port, which remains **10001**.

The Ethernet Configuration can be changed, but it is not possible to modify the communication protocol port, which remains 

In this example it is shown how to establish a simple socket communication with the module and request its firmware version (see {ref}`VER Command`).

In this example it is shown how to establish a simple socket communication with the module and request its firmware version (see 

#!/usr/bin/env python3

import socket

IP = "192.168.0.10"

try:
    # Create sockets
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)     # TCP
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    s.connect((IP, 10001))

    # Set psw
    print("Get Version")
    s.sendall("VER:?\r\n".encode())      
    data = s.recv(2048).decode()
    print(repr(data))

    # Close socket
    s.close()

except :
    print("Error: Error in communication with the module")

Putty it is a **free telnet client** that is available for both Windows and Linux OS. Putty allows to send commands to the power unit and receive the relative replies.

 that is available for both Windows and Linux OS. Putty allows to send commands to the power unit and receive the relative replies.

To establish the communication socket with the unit, it is necessary to configure Putty in the following way:

Once the configuration has been completed, it is possible to send the ASCII command directly to the unit:

 TODO: update the image (now the version reply is for an old module with beta firmware)

TODO: update the image (now the version reply is for an old module with beta firmware)

 Test section
```{card} Card title
:header: The _Header_
:footer: Footer

Card content
```

Test section

```

It is possible to install on the module some optional boards, to extend the module's functionality.

It is possible to install on the module some optional boards, to extend the module’s functionality.

The following Optional boards effects the available functionalities and so the relative associated commands.

The behaviour of the power unit output is determinated by a **Finite State Machine (FSM)**.

**OFF State**: in this state the output drivers and PID controller are disabled. This is the default state at machine startup.

: in this state the output drivers and PID controller are disabled. This is the default state at machine startup.

**ON State**: in this state the output drivers and PID controller are enabled and the unit can accepts a new setpoint. The default setpoints are:

: in this state the output drivers and PID controller are enabled and the unit can accepts a new setpoint. The default setpoints are:

**Wait for Off State**: in this state the unit performs a ramp-down to 0A in *CC mode* (or 0V in *CV mode*) and waits until the output current reaches 0A. When the current is about 0A, the FSM evolves automatically to **OFF State**.

) and waits until the output current reaches 0A. When the current is about 0A, the FSM evolves automatically to 

The **Wait for Off State** is useful with superconducting magnets, when the output needs a longer amount of time to reach the 0A. In this case the unit ramps down in a controlled way and switch off the power stage only once the 0A are reached.

 is useful with superconducting magnets, when the output needs a longer amount of time to reach the 0A. In this case the unit ramps down in a controlled way and switch off the power stage only once the 0A are reached.

**Command-related transitions** (in blue): that are defined by software commands (see {ref}`OUT Command`)

**Fault-related transitions** (in red): that are defined by a **Fault condition**. When a fault occurs, the machine starts a transaction to a "save state", this is the **OFF State** in which the power stage is disabled.\
There are two types of *Fault conditions*:

. When a fault occurs, the machine starts a transaction to a “save state”, this is the 

**Soft Fault:** faults that does NOT impact the functionality of the power unit (for example a *temperature fault*). In this case it is possible to switch-off the unit in a controlled way and so the FSM evolves in the **Wait for Off State**.

 faults that does NOT impact the functionality of the power unit (for example a 

). In this case it is possible to switch-off the unit in a controlled way and so the FSM evolves in the 

**Hard Fault:** faults that impact directly the correct functionality of the power unit (for example a *crowbar fault*). In such case the FSM evolves directly in the **Off State** in which the power stage is immediately disabled.

 faults that impact directly the correct functionality of the power unit (for example a 

**Internal transitions** (in green): there is only one internal transition that is related to the output current. This transition is used only when the *OUT FSM* is in **OUT Wait for Off State** and the output current is close to 0A, at this point the *OUT FSM* automatically evolves to **OUT OFF State**.

 (in green): there is only one internal transition that is related to the output current. This transition is used only when the 

 Control Manual documentation master file, created by
 sphinx-quickstart on Mon Nov  6 16:48:46 2023.
 You can adapt this file completely to your liking, but it should at least
 contain the root `toctree` directive.

Control Manual documentation master file, created by

 Insert a markdown with relative images in this position
```{include} ../notes.md
:relative-images:
```

Insert a markdown with relative images in this position
```

 Create a robust link to usage markdown
For further info, check out {doc}`usage`.

Create a robust link to usage markdown

 Create a link to document subsection (sphinx.ext.autosectionlabel enable):
Read installation instructions in {ref}`Installation`.

Create a link to document subsection (sphinx.ext.autosectionlabel enable):

commands/commands_description
 commands/generic_monotoring_commands
commands/00_Remote_Commands_Reference

# Indices and tables

- {ref}`genindex`
- {ref}`modindex`
- {ref}`search`

## JLab Internal memory

```{include} ./internal_memory_jlab.md
```

The architecture of the FAST-Bi-1K5 Power sources allows to put in parallel up to 4 units with the **same current and voltage ratings** in a _master-slave_ configuration. The system acts as a single power unit, where the _master_ controls the _slave(s)_ and shares with them functional information. To control the system it is necessary to connect properly the _slave(s)_ to the _master_ and then it is possible to communicate with the _master_ to control the whole system.

The architecture of the FAST-Bi-1K5 Power sources allows to put in parallel up to 4 units with the 

 configuration. The system acts as a single power unit, where the 

 and shares with them functional information. To control the system it is necessary to connect properly the 

This section describes how to properly connect and configure the parallel of multiple units:

Connect the power cables of each power supply to the load in parallel, “+” output of both modules has to be connected on the same terminal of the load, as well as “-” output.
There ate two recommended ways to perform this connection:

Connect the modules "+" terminals together with a bus bar as well as the "-" terminals tog

Connect the modules “+” terminals together with a bus bar as well as the “-” terminals tog

The **Fault Register** indicates the unit's fault register. To read it, see the {ref}`REG Command`.

Indicates a over-temperature fault or that the temperature sensor is disconnected

Quench Detection Fault - see {ref}`Internal Memory` *id:130-134*

Output Over-Current Fault - Output current exceeded OVC Threshold (see {ref}`Internal Memory` *id: 100*)

Output Over-Current Fault - Output current exceeded OVC Threshold (see 

Output Over-Voltage Fault - Output voltage exceeded OVV Threshold (see {ref}`Internal Memory` *id: 101*)

Output Over-Voltage Fault - Output voltage exceeded OVV Threshold (see 

Model or Firmware mismatch between the _Master_ and _Slave_ unit(s)

 TODO:
 | [12]       | Parallel link fault      | Parallel link fault                                                       |
 | [16]       | External Interlock #1 | *Soft or Hard* | External Interlock #1 Fault (see {ref}`INTERKOCK Command`)                                              |
 | [17]       | External Interlock #2 | *Soft or Hard* | External Interlock #2 Fault (see {ref}`INTERKOCK Command`)                                              |
 | [18]       | External Interlock #3 | *Soft or Hard* | External Interlock #3 Fault (see {ref}`INTERKOCK Command`)                                              |
 | [19]       | External Interlock #4 | *Soft or Hard* | External Interlock #4 Fault (see {ref}`INTERKOCK Command`)                                              |
 TODO: add a link to the User's Manual?
 TODO: indicate that not all models have the DCCT error (for example the FAST-PS-Plus does not have it)

TODO:

- For a detailed description of the faults, please refer to the **User's Manual**

For a detailed description of the faults, please refer to the **User's Manual**

The **Status Register** indicates the unit's status. To read it, see the {ref}`REG Command`.

Indicates that a fault happen; to verify the fault reason, see the {ref}`Fault Register`

Indicates that a fault happen; to verify the fault reason, see the 

Indicates that the PID is saturation state and it is limiting the device output

00: Normal; 01: Analog input; 10: Waveform; 11: SFP (see {ref}`UPMODE Command`)

000: Trigger disabled; 001: Pos. Edge; 010: Neg. Edge; 011: Both Edges; 100: High Level; 101: Low Level (see {ref}`TRIGGER Command`)

000: Trigger disabled; 001: Pos. Edge; 010: Neg. Edge; 011: Both Edges; 100: High Level; 101: Low Level (see 

00: Start; 01: Point; 10: Gate; 11: Gate reset (see {ref}`WAVE Command`)

00: Parallel Disabled; 01: Parallel - Master; 11: Parallel - Slave (see **User's Manual** for additional information)  [^par_remote]

00: Parallel Disabled; 01: Parallel - Master; 11: Parallel - Slave (see 

 TODO: add these bits when done
 | [3]        | Warning bit        | Indicates that a warning happen; to verify the fault reason, see the {ref}`Warning Register`    |
 | [29:28]    | Parallel mode      | 00: Parallel mode Disabled; 01: Parallel Master; 11: Parallel Slave (see {ref}`PAR Command`)   |

TODO: add these bits when done

Local/Remote mode (bit[12]), can be only set from the local display menu. When the unit is in **Local mode**, the unit accepts the commands only from the local display menu and rejects the remote commands; otherwise, when the unit is in **Remote mode** it accepts the remote command and it is not possible to send the commands from the local menu.

Local/Remote mode (bit[12]), can be only set from the local display menu. When the unit is in 

, the unit accepts the commands only from the local display menu and rejects the remote commands; otherwise, when the unit is in 

 it accepts the remote command and it is not possible to send the commands from the local menu.

Parallel mode (bits[29:28]), can be only set from the local display menu. Please see the **User's Manual** for the detailed information on how to configure parallel configuration between multiple units.

Parallel mode (bits[29:28]), can be only set from the local display menu. Please see the 

 for the detailed information on how to configure parallel configuration between multiple units.

In this section are listed the meaning of all single bits of ths internal **status and fault registers**.

In this section are listed the meaning of all single bits of ths internal 