MEMCMP block

Short summary

Name

MEMCMP

→POU type

→function

Category

Standard (non-safe), MemoryEnh, block with internal error diagnostic

Conform to →IEC-standard

(plus) not defined in IEC-standard

Graphical interface

Available since

version 1.35.0 (for Neuron Power Engineer) – initial variant

version 1.38.0 (for Neuron Power Engineer) – adjusted return values

version 2.0.9 (for library Standard) – graphical interface with in-out variables

version 3.5.0 (for library Standard) – restriction "no function blocks with generic data type"

version 3.8.0 (for library Standard (non-safe)): block moved in this library

Functionality

The block compares bytes of one input value with the bytes of another input value and returns an appropriate value as information about the comparison (see the following table under "Return value").

You enter the first input value at input IN1 and the second input value at input IN2. At input LEN, enter the numer of bytes to be compared.
By default, value 0 is specified for the number of bytes.

Special cases: 

  • In case of LEN = 0, the block automatically calculates the number of bytes to compare for IN1 and IN2.

  • If the value for LEN is > than the maximally possible size of the input values IN1 and IN2, the block compares until the maximally possible size of the input value. In this case, the output ENO is set to value FALSE.

  • If a STRING element with a length is connected to IN1 or IN2 , the length of the STRING buffer is used. The length of the STRING buffer is determined by the declaration.
    STRING elements with a length are STRING variables declared by you; see "Declaration of STRING variables (incl. access)".  

  • If a STRING element without a length is connected to IN1 or IN2 , the length of the STRING buffer is also used. However, the length of the STRING buffer is determined by the resulting value.
    STRING elements without a user-defined length are resulting, if you are using STRING functions or →character string literals.

  • If you are using the MEMCMP block to compare an initialized structure variable with a variable which has been initialized identically by using the MEMSET block, the comparison of MEMCMP returns that both structures are different.

Inputs, outputs, return value

 

Identifier

→Data type

Description

In-outs
(VAR_IN_OUT):

IN1

REALLREALUSINTUINTUDINTULINTSINTINTDINTLINTTIMEBOOLBYTEWORDDWORDLWORDSTRINGCHARDATE_AND_TIMEDATETIME_OF_DAY , a →user-defined data type or a →function block
Restriction: In case of →array data types, only one-dimensional arrays are allowed.

Further restriction: In the case of function blocks, no function blocks with a →generic data type are allowed. As a result of this restriction, you cannot use the following blocks as input of the current block: LIMITER_O, LIMITER_U, FORCEMRK, MAX_HOLD, MIN_HOLD, and →vendor-function blocks that have been declared with a generic data type.
If you use instances of these function blocks anyway, a linker error will occur when building the application.

input value 1

IN2

REALLREALUSINTUINTUDINTULINTSINTINTDINTLINTTIMEBOOLBYTEWORDDWORDLWORDSTRINGCHARDATE_AND_TIMEDATETIME_OF_DAY , a →user-defined data type or a →function block
Restriction: In case of →array data types, only one-dimensional arrays are allowed.

Further restriction: In the case of function blocks, no function blocks with a →generic data type are allowed. As a result of this restriction, you cannot use the following blocks as input of the current block: LIMITER_O, LIMITER_U, FORCEMRK, MAX_HOLD, MIN_HOLD, and →vendor-function blocks that have been declared with a generic data type.
If you use instances of these function blocks anyway, a linker error will occur when building the application.

input value 2

Inputs:

LEN

UDINT

value for initialization; default value = 0

Return value:

-

SINT

0, if IN1 = IN2-1, if IN1 < IN21, if IN2 > IN1

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

See:

Internal error diagnostic for block 

The block checks the value connected to the inputs before it is executed.
If the value for LEN is > than the maximally possible size of the input values IN1 and IN2, the output ENO of the block is set to value FALSE (or an equivalent).

Example for usage within ST-editor

PROGRAM Test
    VAR
        Var1, Var2 : BYTE := 0;
        Var3 : DINT := 0;
        Var4 : DINT := 10;
        result1, result2, result3 : SINT;              
    END_VAR
    result1 := MEMCMP(IN1 := Var1, IN2 := Var2, LEN := 1);    (* The variable 'result1' evaluates to '0'. *)
    result2 := MEMCMP(IN1 := Var3, IN2:= Var4, LEN := 3);     (* The variable 'result2' evaluates to '-1'. *)
    result3 := MEMCMP(IN1 := Var4, IN2:= Var3, LEN := 3);     (* The variable 'result3' evaluates to '1'. *)
END_PROGRAM

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.