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.