Set_AO_Data

Overview

The Set_AO_Data function block sets the analog values for the AO module’s output channels. Each of the four channels can output either voltage or current.

Module_ID           :=  (USINT)
Ch0_mV              :=  (UINT)
Ch0_uA              :=  (UINT)
Ch1_mV              :=  (UINT)
Ch1_uA              :=  (UINT)
Ch2_mV              :=  (UINT)
Ch2_uA              :=  (UINT)
Ch3_mV              :=  (UINT)
Ch3_uA              :=  (UINT)
STS_Done            =>  (BOOL)
STS_Failed          =>  (BOOL)
STS_Fault_Code      =>  (USINT)

Interface

Inputs

NameTypeRange / UnitsDescription
Module_IDUSINT1 - 15Unique identifier of the AO module.
Ch0_mVUINT0 - 10,000 mVVoltage output for channel 0 (voltage mode).
Ch0_uAUINT4,000 - 20,000 µACurrent output for channel 0 (current mode).
Ch1_mVUINT0 - 10,000 mVVoltage output for channel 1 (voltage mode).
Ch1_uAUINT4,000 - 20,000 µACurrent output for channel 1 (current mode).
Ch2_mVUINT0 - 10,000 mVVoltage output for channel 2 (voltage mode).
Ch2_uAUINT4,000 - 20,000 µACurrent output for channel 2 (current mode).
Ch3_mVUINT0 - 10,000 mVVoltage output for channel 3 (voltage mode).
Ch3_uAUINT4,000 - 20,000 µACurrent output for channel 3 (current mode).
💡 Signal Type

Each channel uses only one signal type (V or mA), based on the module configuration. Any value set for the inactive type is ignored.

Outputs

NameTypeDescription
STS_DoneBOOLTRUE when all AO data has been successfully sent to the module.
STS_FailedBOOLTRUE if the AO data write operation failed.
STS_Fault_CodeUSINTDiagnostic code indicating the reason for failure.

Fault Codes

CodeMeaningDescription
97Module FaultedThe AO module reported an internal fault.
98Module MismatchThe detected module type does not match the expected AO module.
99Module Not FoundThe specified Module_ID is not part of the current hardware configuration.

Example:

TYPE
  AO_4CH : STRUCT
    Ch0 : UINT;
    Ch1 : UINT;
    Ch2 : UINT;
    Ch3 : UINT;
  END_STRUCT;
END_TYPE


PROGRAM PROG_Write_AO
  VAR_EXTERNAL
    Module5_AO : AO_4CH;
    Module5_AO_Done   : BOOL;
    Module5_AO_Failed : BOOL;
    Module5_AO_Fault  : USINT;
  END_VAR
  VAR
    AO_Set_Instance : Set_AO_Data;
    AO_Mode_Block : Set_AO_Mode;
  END_VAR

  AO_Mode_Block(
        Module_ID := 5,
        Ch0_Mode := TRUE,     (* 0–10V *) 
        Ch1_Mode := TRUE,     (* 0–10V *)
        Ch2_Mode := FALSE,    (* 4–20mA *) 
        Ch3_Mode := FALSE     (* 4–20mA *)
        );

  (* Write to Module 5 using voltage mode (mV) *)
  AO_Set_Instance(
    Module_ID := 5,

    Ch0_mV := Module5_AO.Ch0,
    Ch0_uA := 0,   (* Not used in mV mode *)

    Ch1_mV := Module5_AO.Ch1,
    Ch1_uA := 0,

    Ch2_mV := 0,  (* Not used in 4–20mA mode *)
    Ch2_uA := Module5_AO.Ch2,

    Ch3_mV := 0,
    Ch3_uA := Module5_AO.Ch3
  );

  (* Expose status to globals for diagnostics *)
  Module5_AO_Done   := AO_Set_Instance.STS_Done;
  Module5_AO_Failed := AO_Set_Instance.STS_Failed;
  Module5_AO_Fault  := AO_Set_Instance.STS_Fault_Code;

END_PROGRAM

CONFIGURATION Config0
  RESOURCE PLC ON PLC
    VAR_GLOBAL
      Module5_AO : AO_4CH;
      Module5_AO_Done   : BOOL;
      Module5_AO_Failed : BOOL;
      Module5_AO_Fault  : USINT;
    END_VAR
    TASK Task_50ms(INTERVAL := T#50ms, PRIORITY := 1);
    PROGRAM Write_AO WITH Task_50ms : PROG_Write_AO;
  END_RESOURCE
END_CONFIGURATION