CHS-Baustein

Kurz-Information

NameCHS
→POE-Typ→Funktion
KategorieIEC-Baustein, NumericEnh, Baustein mit interner Fehlerdiagnose
Konform zur →IEC-Norm

(plus) nicht in IEC-Norm vorgesehen

Grafische Schnittstelle

Verfügbar ab

Version 1.64.0 (für logi.CAD 3)

Funktionalität

Der Baustein liefert den Wert, der am Eingang IN anliegt, mit geändertem Vorzeichen. Falls der Wert 0 anliegt, liefert der Baustein wieder 0.

Verhalten bei vorzeichenlosen ganzen Datentypen (= ANY_UNSIGNED – siehe zugehörige elementare Datentypen beim Glossar-Eintrag →allgemeiner Datentyp):

  • Der Baustein liefert einen vorzeichenlosen Wert. Dieser Wert entsteht so: Der an IN anliegende Wert, sofern dieser > 0 ist, wird von der Obergrenze des entsprechenden Datentyps subtrahiert, dann wird der Wert 1 addiert: Obergrenze – IN + 1
    Siehe unter "Beispiel für Verwendung im ST-Editor".
    Als Hintergrund-Information: Der an IN anliegende Wert wird als Bitmuster mit Vorzeichen interpretiert. Dieser Wert mit Vorzeichen wird umgerechnet (und wieder als vorzeichenloser Wert ausgegeben).
  • Zusätzlich wird der Ausgang ENO auf den Wert FALSE gesetzt.

Verhalten bei anderen Datentypen:

  • Für ANY_SIGNED gültig: Falls die Untergrenze des entsprechenden Datentyps an IN anliegt, liefert der Baustein diesen Wert. Grund: Für die Untergrenze des Datentyps ist der Wert mit geändertem Vorzeichen nicht zulässig.
    Ssiehe unter "Beispiel für Verwendung im ST-Editor".
  • Für ANY_SIGNED und ANY_REAL gültig: Der Ausgang ENO wird immer auf den Wert TRUE gesetzt.

Eingänge, Ergebniswert


Bezeichner→DatentypBeschreibung
Eingänge:IN
REAL, LREALUSINTUINTUDINTULINTSINTINTDINT oder LINT
(entspricht dem →allgemeinen Datentyp ANY_NUM
Wert
Ergebniswert:
REAL, LREALUSINTUINTUDINTULINTSINTINTDINT oder LINT
(entspricht dem →allgemeinen Datentyp ANY_NUM


Der Eingang EN und der Ausgang ENO sind für den →Aufruf des Bausteins verfügbar. Siehe "Ausführungssteuerung: EN, ENO" für Informationen zum Eingang EN und zum Ausgang ENO.

Interne Fehlerdiagnose für Baustein

Der Baustein prüft vor der Ausführung den Datentyp des anliegenden Werts.
Bei einem vorzeichenlosen ganzen Datentyp (= ANY_UNSIGNED
wird der Ausgang ENO des Bausteins auf den Wert FALSE (oder eine Entsprechung) gesetzt.

Beispiel für Verwendung im ST-Editor

Die berechneten Werte werden mit Hilfe des Assert-Bausteins ausgewertet.

FUNCTION_BLOCK ExampleChs
  VAR
    resultSint1, resultSint2, resultSint3, resultSint4 : SINT;
    resultUsint1, resultUsint2, resultUsint3 : USINT;
    resultUint  : UINT;
    CheckENOSint1, CheckENOSint2, CheckENOSint3, CheckENOSint4, CheckENOUsint1, CheckENOUsint2, CheckENOUsint3, CheckENOUint : BOOL;
  END_VAR
  resultSint1 := CHS(IN := SINT#-5, ENO => CheckENOSint1);
  Assert(resultSint1 = 5);
  Assert(CheckENOSint1 = TRUE);
  resultSint2 := CHS(IN := SINT#0, ENO => CheckENOSint2);
  Assert(resultSint2 = 0);
  Assert(CheckENOSint2 = TRUE);
  resultSint3 := CHS(IN := SINT#5, ENO => CheckENOSint3);
  Assert(resultSint3 = -5);
  Assert(CheckENOSint3 = TRUE);
  resultSint4 := CHS(IN := SINT#-128, ENO => CheckENOSint4);  (* '-128' is the lower limit for SINT. *)
  Assert(resultSint4 = -128);                                 (* The upper limit for SINT is: 127. Therefore, value '128' is not possible. *)
  Assert(CheckENOSint4 = TRUE);
  resultUsint1 := CHS(IN := USINT#3, ENO => CheckENOUsint1);
  Assert(resultUsint1 = 253);          (* Upper limit for USINT = 255. Therefore, the block calculates: 255 - 3 + 1 = 253 *)
  Assert(CheckENOUsint1 = FALSE);
  resultUsint2 := CHS(IN := USINT#155, ENO => CheckENOUsint2);
  Assert(resultUsint2 = 101);          (* Upper limit for USINT = 255. Therefore, the block calculates: 255 - 155 + 1 = 101 *)
  Assert(CheckENOUsint2 = FALSE);
  resultUsint3 := CHS(IN := USINT#0, ENO => CheckENOUsint3);
  Assert(resultUsint3 = 0);            (* Upper limit for USINT = 255. The calculation '255 - 0 + 1' would result in the value '256' that is out of range. *)
  Assert(CheckENOUsint3= FALSE);
  resultUint := CHS(IN := UINT#3, ENO => CheckENOUint);
  Assert(resultUint = 65533);          (* Upper limit for UINT = 65535. Therefore, the block calculates: 65535 - 3 + 1 = 253 *)
  Assert(CheckENOUint = FALSE);
END_FUNCTION_BLOCK

Bei der Erstellung Ihrer Anwendung im ST-Editor erstellen Sie den Aufruf eines Bausteins, indem Sie den laut Syntax erforderlichen Text eintippen oder die Inhaltshilfe verwenden.