CHS-Baustein
Kurz-Information
Name |
CHS |
→POE-Typ |
|
Kategorie |
IEC-Baustein, NumericEnh, Baustein mit interner Fehlerdiagnose |
Konform zur →IEC-Norm |
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 |
Beschreibung |
|
Eingänge: |
IN |
REAL, LREAL, USINT, UINT, UDINT, ULINT, SINT, INT, DINT oder LINT |
Wert |
Ergebniswert: |
– |
REAL, LREAL, USINT, UINT, UDINT, ULINT, SINT, INT, DINT 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.
Informieren Sie sich unter:
"Bausteine für sichere Logik", ob dieser Baustein für das Entwickeln von sicherheitsrelevanten Anwendungen unterstützt wird.
"Kennzeichnung von sicherer Logik im FBS-Editor", welche Auswirkung die Verwendung des Bausteins als Baustein für sichere Logik hat.
Interne Fehlerdiagnose für Baustein
Der Baustein prüft vor der Ausführung den Datentyp des anliegenden Werts.
Bei einem v
orzeichenlosen 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.