Wprowadzenie do instrukcji CMP PLC
Możesz użyć instrukcji „Equal” do określenia, czy pierwsza wartość porównawcza (<Operand1>) jest równa drugiej wartości porównawczej (<Operand2>).
Jeśli warunek porównania jest spełniony, instrukcja zwraca wynik operacji logicznej (RLO) „1”. Jeśli warunek porównania nie jest spełniony, instrukcja zwraca RLO „0”. RLO instrukcji jest logicznie połączone z RLO całego rzędu w następujący sposób:
- Przez AND, gdy instrukcja porównania jest połączona w szereg.
- Przez OR, gdy instrukcja porównania jest połączona równolegle.
Określ pierwszą wartość porównawczą (<Operand1>) w miejscu na operand powyżej instrukcji. Określ drugą wartość porównawczą (<Operand2>) w miejscu na operand poniżej instrukcji.
Jeśli sprawdzenie IEC jest włączone, porównywane operandy muszą być tego samego typu danych. Jeśli sprawdzenie IEC nie jest włączone, szerokość operandów musi być taka sama.
Jeśli chcesz porównać typy danych REAL lub LREAL, zamiast instrukcji „CMP ==: Equal” zaleca się użycie instrukcji „IN_RANGE: Wartość w zakresie”.
Podczas porównywania liczb zmiennoprzecinkowych, porównywane operandy muszą mieć ten sam typ danych, niezależnie od ustawienia dla sprawdzenia IEC.
Specjalne wzory bitowe nieważnych liczb zmiennoprzecinkowych (NaN), które są wynikiem nieokreślonych wyników (np. pierwiastek z -1), nie mogą być porównywane. Oznacza to, że jeśli jeden z operandów ma wartość NaN, instrukcja „CMP ==: Equal” ma wynik FALSE.
Indywidualne znaki są porównywane na podstawie ich kodu (na przykład 'a’ jest większe niż 'A’) podczas porównywania łańcuchów. Porównanie odbywa się od lewej do prawej. Pierwszy różniący się znak decyduje o wyniku porównania.
Poniższa tabela pokazuje przykłady porównań łańcuchów:
| <Operand1> | <Operand2> | RLO instrukcji |
| ’AA’ | ’AA’ | 1 |
| ’Hello World’ | ’HelloWorld’ | 0 |
| ’AA’ | ’aa’ | 0 |
| ’aa’ | ’aaa’ | 0 |
Możesz również porównywać poszczególne znaki łańcucha. Numer znaku do porównania jest określony w nawiasach kwadratowych obok nazwy operandów. „MyString[2]”, na przykład, porównuje drugi znak łańcucha „MyString”.
Uwaga: Możliwość porównania struktur jest dostępna dla CPU serii S7-1200 od wersji oprogramowania >= 4.2, a dla CPU serii S7-1500 od wersji oprogramowania >= 2.0.
Możesz porównywać wartości dwóch złożonych operandów, gdy oba tagi są tego samego typu danych strukturalnych. Takie porównania są także istotnym elementem przy pracy z językiem scl. Programowanie w języku SCL często obejmuje obsługę złożonych struktur danych. Gdy struktury są porównywane, porównywane operandy muszą mieć ten sam typ danych, niezależnie od ustawienia dla sprawdzenia IEC. Wyjątkiem są porównania, w których jeden z dwóch operandów jest VARIANT lub ANY.
Poniższa tabela pokazuje parametry instrukcji „Equal”:
| Parametry | Deklaracja | Typ danych | Obszar pamięci | Description |
| <Operand1> | Wejście | Bit strings, integers, floating-point numbers, character strings, timers, date and time, ARRAY of <data type> with fixed and variable ARRAY limits, STRUCT, VARIANT, ANY, PLC data type | I, Q, M, D, L, P lub stała | Pierwsza wartość porównawcza |
| <Operand2> | Wejście | Bit strings, integers, floating-point numbers, character strings, timers, date and time, ARRAY of <data type> with fixed and variable ARRAY limits, STRUCT, VARIANT, ANY, PLC data type | I, Q, M, D, L, P lub stała | Druga wartość do porównania |
Przykład: Następujący przykład pokazuje, jak działa instrukcja:
Wyjście „TagOut” jest ustawione, gdy spełnione są następujące warunki:
- Operandy „TagIn_1” i „TagIn_2” mają stan sygnału „1”.
- Warunek instrukcji porównania jest spełniony, jeśli „Tag_Value1” = „Tag_Value2”.