CHS block

Short summary

Name

CHS

→POU type

→function

Category

IEC-block, NumericEnh, block with internal error diagnostic

Conform to →IEC-standard

images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/add.svg not defined in IEC-standard

Graphical interface

images/download/thumbnails/414781958/CHS-version-1-modificationdate-1535031844712-api-v2.png

Available since

version 1.64.0 (for logi.CAD 3)

Functionality

The block returns the value that is connected to the input IN with a changed sign. If the value 0 is connected, the block returns 0 again.

Behavior for unsigned integer data types (= ANY_UNSIGNED – see appropriate elementary data types for glossary item →generic data type):

  • The block returns an unsigned value. This value is formed as follows: The value connected to IN (if it is > 0) is subtracted from the upper limit of the appropriate data type, then the value 1 is added: upper limit – IN + 1
    See under "Example for usage within ST-editor" .
    As background information: The value connected to IN is interpreted as bit pattern with sign. This signed value is converted (and returned as unsigned value again).

  • Furthermore, the output ENO is set to value FALSE.

Behavior for other data types :

  • Applies to ANY_SIGNED: If the lower limit of the appropriate data type is connected to IN, the block returns this value. Reason: The value with the changed sign is not allowed for the lower limit of the data type.
    See under "Example for usage within ST-editor" .

  • Applies to ANY_SIGNED and ANY_REAL: T he output ENO is always set to value TRUE .

Inputs, return value


Identifier

→Data type

Description

Inputs:

IN

REAL, LREAL, USINT, UINT, UDINT, ULINT, SINT, INT, DINT or LINT
(corresponds to →generic data type ANY_NUM)

value

Return value:

REAL, LREAL, USINT, UINT, UDINT, ULINT, SINT, INT, DINT or LINT(corresponds to →generic data type ANY_NUM)


Input EN and output ENO are available when →calling the block. See "Execution control: EN, ENO" for information on input EN and output ENO.

Internal error diagnostic for block

The block checks the data type of the connected value before the block is executed.
In case of an u nsigned integer data type (= ANY_UNSIGNED), the output ENO of the block is set to value FALSE (or an equivalent).

Example for usage within ST-editor

The calculated values are evaluated by using the Assert block .

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

When creating your application within the ST-editor, enter a call of a block by typing the text as requested by the syntax or use Content Assist.