Analoge Eingänge

Aufgabenstellung

Ähnlich den digitalen Eingängen sollen die analogen Eingänge des Hubo eingelesen werden.

Lösung

Dazu wird der FB HuboAnalogInput instanziiert. Dabei können der Typ des zu verwendenden AD-Wandlers (MCP3208/12Bit oder MCP3008/10Bit) und andere Betriebsparameter spezifiziert werden.

Deklarationsteil

PROGRAM PLC_PRG
VAR
    // Anmerkung: Die Einstellung "diBitsPerWord" des SPI_master device sollte auf 8 lauten. 
    // Gleichsam sollte der Wert der Variable "speedHz" nicht über 1MHz liegen, damit der 
    // Sample & Hold Kondensator der MCP3x08 genügend Zeit zur Ladung erhält.
    myADC       :    Hubo.HuboAnalogInput := (adcType := Hubo.ADC_TYPE.MCP3208, speedHz := 1000000, referenceVoltage := 2.5, pSPIMaster := ADR(SPI_Master));
    adValue0    :    UINT;
    voltage0    :    REAL;
    bResult     :    Hubo.ERROR           := Hubo.ERROR.NO_ERROR;
END_VAR

Funktionsrumpf

// Einmalige Initialisierung des ADC Objekts. Folgeaufrufe sind unschädlich und werden ignoriert. 
IF (myADC.Initialize() <> Hubo.ERROR.NO_ERROR) THEN
    RETURN;
END_IF

// Alle Eingangspuffer (MCP3x08) für diesen Zyklus füllen.
IF (myADC.ReadBuffer() <> Hubo.ERROR.NO_ERROR) THEN
    RETURN;
END_IF

// Auf einzelne AD-Kanäle mittels GetChannel() zugreifen.
// So kann auf die raw-Werte des AD-Wandlers zugegriffen werden, sowie auch auf die Spannungen. 
bResult := myADC.GetChannel(adChannel:=0, digit => adValue0, voltage => voltage0);

Auch hier erfolgt die Umsetzung dem Muster Initialisierung, Eingangspuffer lesen und dem anschließenden Zugriff auf die Werte. Ein Schreiben der Werte entfällt natürlich.

Kommentare sind geschlossen.