Opis instrukcji CMP
Możesz użyć instrukcji “Not equal” do określenia, czy pierwsza wartość porównawcza (<Operand1>) nie 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 szeregowo.
- 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.
Porównanie liczb zmiennoprzecinkowych
Jeśli chcesz porównać typy danych REAL lub LREAL, zamiast instrukcji “CMP <>: Not equal” zalecamy użycie instrukcji “OUT_RANGE: Wartość poza zakresem”.
Jeśli porównywane są liczby zmiennoprzecinkowe, porównywane operandy muszą być tego samego typu danych, niezależnie od ustawienia sprawdzenia IEC.
Specjalne wzorce bitowe nieprawidłowych 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 <>: Not equal” zwraca wynik FALSE.
Porównanie ciągów znaków
Porównanie ciągów znaków opiera się na analizie kolejnych liter według ich wartości kodów ASCII. Programowanie sterowników w SCL to nowoczesna metoda umożliwiająca wykorzystanie zaawansowanych funkcji języka, które mogą ułatwić obsługę takich danych. Poszczególne znaki są porównywane na podstawie ich kodu (na przykład, ‘a’ jest większe niż ‘A’) podczas porównania ciągó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ń ciągów:
| <Operand1> | <Operand2> | RLO instrukcji |
| ‘AA’ | ‘aa’ | 1 |
| ‘Hello World’ | ‘HelloWorld’ | 1 |
| ‘AA’ | ‘AA’ | 0 |
| ‘aa’ | ‘aaa’ | 1 |
Możesz również porównywać poszczególne znaki ciągu. Numer znaku do porównania jest określony w nawiasach kwadratowych obok nazwy operandów. “MyString[2]”, na przykład, porównuje drugi znak ciągu “MyString”.
Porównanie znaczników typu WORD z znacznikami typu S5TIME
Oba znaczniki są konwertowane na typ danych TIME podczas porównania znacznika typu WORD z znacznikiem typu S5TIME. Znacznik WORD jest interpretowany jako wartość S5TIME. Jeśli jeden z dwóch znaczników nie może być skonwertowany, porównanie nie jest przeprowadzane, a wynik to FALSE. Jeśli konwersja jest udana, porównanie jest przeprowadzane na podstawie wybranej instrukcji porównania.
Porównanie struktur
Możesz porównywać wartości dwóch operandów strukturalnych, gdy oba znaczniki są tego samego typu danych strukturalnych. Podczas porównania struktur, porównywane operandy muszą mieć ten sam typ danych, niezależnie od ustawienia sprawdzenia IEC. Wyjątkiem są porównania, w których jeden z dwóch operandów jest VARIANT lub ANY. Jeśli typ danych nie jest jeszcze znany w momencie tworzenia programu, możesz użyć typu danych VARIANT. W takim przypadku możesz również porównywać operand z oznaczeniem strukturalnym dowolnego typu danych. Możesz również porównywać dwa znaczniki typu VARIANT lub ANY ze sobą.
Parametry
Poniższa tabela pokazuje parametry instrukcji “Not equal”:
| Parametry | Deklaracja | Typ danych | Obszar pamięci | Opis |
| <Operand1> | Wejście | Ciężary bitowe, liczby całkowite, liczby zmiennoprzecinkowe, ciągi znaków, timery, daty i czasy, ARRAY typu <data type> z ustalonymi i zmiennymi granicami ARRAY, STRUKTURA, VARIANT, ANY, typ danych PLC | I, Q, M, D, L, P lub stała | Pierwsza wartość porównawcza |
| <Operand2> | Wejście | Ciężary bitowe, liczby całkowite, liczby zmiennoprzecinkowe, ciągi znaków, timery, daty i czasy, ARRAY typu <data type> z ustalonymi i zmiennymi granicami ARRAY, STRUKTURA, VARIANT, ANY, typ danych PLC | I, Q, M, D, L, P lub stała | Druga wartość do porównania |
Przykład
Poniższy 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”.