Digital Output, application examples

Automatic door control:

Featuring: Maximum current monitor.

A gear motor is used to open and close a door. The motor is connected to an output. Direction is selected by a second output. Each time the motor is switched on; it draws 1.5A for a maximum of 0.5 second to initiate the movement. When the door is moving, it draws a maximum of 0.6 A. If the door hits an obstacle or has reached its end position, the current increases above 0.6A.

If the current is below 0.2A an alarm is generated: “motor out of order!”

Software needed:

IF OpenDoorKey = Pressed Then
  DoorDirection:= Open;
  DoorMotor:= Start;
  While OutputStatus = True Do Nothing; (* wait for max current *)
  DoorMotor := Stop;

Detecting a blown bulb


Detecting a wire broken

Featuring: Minimum current monitor.
Connected devices normally have a minimum current when activated.
Automatically monitoring the current in the output can generate an alarm if e.g. a bulb is blown or a wire is broken to a device.
In this example, the output channel is configured to monitor for a minimum current of 200mA at 0.5 seconds after activating the output.
If the current is below 0.2A, an alarm is generated: “Temperature alarm light bulb blown!”

Software needed:

IF Temperature > MaxTemperature Then
   AlarmBulb := ON;
   IF AlarmBulb.LowCurrentAlarm = ON Then
    SendAlarm(“High temperature alarm bulb is blown !”);
  AlarmBulb := OFF;


Dosing by fixed time base

Dosing of a recipe component with a dosing pump into a mixing tank on a weight cell.
The dosing pump is controlled ON / OFF and the dosed amount depends on the ON time of the dosing pump. The output channel is configured as a one shot with a time to hold the output ON. When this time expires, the output switches to an OFF state. Timing is performed locally at the output channel and is thus completely independent of the system’s response time.
The Output status flag shows when a dose has been completed. If further dosing is needed, the output is re-activated, which will then generate another ON pulse.

Software needed:

  OutputControlFlag := ON; (*initiate one pulse*)
  While (OutputStatusFlag = True) Do Nothing; (*wait for finished *)
Until Weight >= RecipeSetpoint; (*finished ? *)
OutputControlFlag := OFF; (*reset the output *)


Dosing by pulses

Featuring: Duty cycle output, with dynamic control.
Dosing of recipe components with a stroke-dosing pump into a mixing tank on a weight cell.
The stroke dosing pump is controlled by an ON / OFF action. The dosed amount depends on the number of ON/OFF cycles.
The dosing frequency is high when the actual weight is significantly less than the set point. The frequency decreases as the gap between weight and set point narrows.
The output ON time is set to the minimum time for the stroke pump to operate. By changing the Total time, the frequency of the strokes can be adjusted. The minimum Total time is 2 x the one shot ON time to allow the stroke pump to return (50% duty cycle).

Software needed:

OutputControlFlag := ON;
While (Weight < Recipe Setpoint) Do
  OutputTotalTime := CalculateDosingSpeed;
OutputControlFlag := OFF;


Room temperature control

Featuring: Duty cycle output, with dynamic control.

If a manually adjustable radiator thermostat controls the room temperature, an automation add-on can be created.

A resistor is placed under the thermostat. If power is dissipated in the resistor, it heats up and the thermostat will “believe” the room temperature is rising and thus lower the heat from the radiator.

The heat in the resistor is controlled by duty cycle output control. The higher the duty cycle, the hotter the resistor gets, and the more the thermostat lowers the room temperature.

In the example shown, the ON time is constant, and only the total time is adjusted. Of coarse, both parameters can be adjusted if needed, e.g. to get a 100% duty cycle.

Software needed:

If WorkingHours then
  OutputControlFlag := OFF (* enable normal thermostat control*)
  OutputControlFlag := ON
  Case CurrentTime OF 
    Evening: OutputTotalTime := EveningTiming;
    Night: OutputTotalTime := NightTiming;
    WeekEnd: OutputTotalTime := WeekEndTiming;