Zwei Wörter vergleichen?

Küffel

Level-2
Beiträge
137
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

bin einsteiger und probiere mich fast ausschließlich in FUP, vielleicht ist nun der Zeitpunkt gekommen um nach AWL überzugehen?!

Folgendes Problem:

1a) Ich habe ein Wort und möchte dieses mit einem anderen auf Gleichheit überprüfen und ein VKE=1 bei Gleichheit erhalten.
Das kann doch nicht so schwer sein...

1b) Sollte die Lösung meines Problems nur in AWL umzusetzen sein, wie kann ich dann AWL in FUB einfügen? Da gibts doch bestimmt so etwas wie bei C wenn ich Assembler einbinde, oder?

Vielen Dank für eure Bemühungen

Küffel
 
1a)
L Wort1 // lade das 1.Wort in Akku 1
L Wort2 // lade das 2.Wort in Akku 1, wobei das 1. in Akku2 "rutscht"
=I // vergleiche Akkus, Ergebnis ins VKE
= A0.4 // mit dem VKE kannst du normal weiterarbeiten...

1b) Du kannst auf AWL Darstellung umschalten und dann ein einzelnes Netzwerk in AWL schreiben.
Bei der FUP-Darstellung des ganzen Bausteins erhältst du später an dieser Stelle eine Meldung, das Netzwerk sei nicht in FUP darstellbar und bekommst es wieder in AWL angezeigt.
 
geht aber auch in fup über eine comp box.

mach mal in fup die bibliotek auf, dort findest du vergleicher...
 
Hallo Question_mark,

der Gast war ich, hatte vergessen mich anzumelden.

Habe unter Vergleicher aber nur welche die int, dint oder real erwarten. Markus schreibt was von einer comp box, wo finde ich die?

Programmieren Profis eigentlich alles in AWL?

Nochmals vielen Dank, und sorry für die sicherlich lächerlichen Fragen :?:

Küffel
 
Habe unter Vergleicher aber nur welche die int, dint oder real erwarten.
int ist schon mal ein Wortformat, dint und real sind Doppelwörter.
Programmieren Profis eigentlich alles in AWL?
Nein, Die Darstellung in FUP ist gebräuchlich weil übersichtlicher solange es nicht zu umständlich wird. Es gibt aber sicher "Coder" die alles in AWL schreiben um den Abstand zu uns normalen Programmierknechten zu verdeutlichen. :wink:
Nochmals vielen Dank, und sorry für die sicherlich lächerlichen Fragen :?:
Es gibt keine lächerlichen Fragen. Wir haben alle mal angefangen.

Schau dir mal die Hilfe an zu den "Boxen". Da kommst dann schnell drauf wie das läuft. Einfach markieren und F1 drücken.

smoe
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vergleicher

Hallo Küffel,
aber nur welche die int, dint oder real erwarten
Int = 16 Bit mit Vorzeichen (lat. Signum)
Word = 16 Bit ohne Vorzeichen
Gleiche Wordbreite, also wird der Vergleich mit Int die gleichen Ergebnisse wie bei Word liefern.
sorry für die sicherlich lächerlichen Fragen
Es gibt keine lächerlichen Fragen, nur lächerliche Antworten.
Aber ich denke mal , für eine schnelle Lösung in AWL hat Zottel Dir ja schon die Antwort geliefert.
Gruss
Qusestion_mark
 
Int = 16 Bit mit Vorzeichen (lat. Signum)
Word = 16 Bit ohne Vorzeichen
Gleiche Wordbreite, also wird der Vergleich mit Int die gleichen Ergebnisse wie bei Word liefern.
Gerade das ist NICHT der Fall:
Der Verglaich von Ints interpretiert den Inhalt der Worte als Zweierkomplement. Das tut auch mein AWL-Beispiel. Bei "gleich" ist das egal, aber nicht bei "größer" und "kleiner"!

Also:
0x7ffe =32766
0x7fff =32767
0x8000 =-32768
...
0xffff =-1

0xffff < 0x0000 !!!

Soweit ich weiß, kennt die S7 keinen Vergleich, der die Worte als positive Ganzzahl im Bereich 0..65535 interpretiert (unsigned short). Du kannst das aber nachbilden, indem du beide Zahlen in das untere Wort zweier DWORDs lädtst und deren obere Teilworte auf 0 setzt. Anschließend liefert ein DWORD Vergleich (=D) das Ergebnis.

Ein anderer Weg zur Nachbildung wäre, zunächst auszuwerten, ob eine der Zahlen negativ ist und davon abhängig das Vergleichsergebnis zu invertieren, aber das ist ist ziemlich umständlich und fehlerträchtig.
 
Vergleicher

Hallo,
Gerade das ist NICHT der Fall:
Da hat Zottel recht, das funktioniert nur bei Vergleich '==' oder '<>' oder wenn der Wert beider Zahlen <= 32767 und nicht negativ ist. Ich hatte dabei irgendwas von intelligenten Compilern im Hinterkopf, die den Datentyp automatisch erweitern. Das ist bei der S7 natürlich nicht der Fall ! :oops:
Ich denke, der beste Weg ist, wie von Zottel vorgeschlagen, den Umweg über DWORD's zu gehen.
Gruss
Question_mark
Editiert um 19.50 QM
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was genau klappt denn nicht?
Gibt es irgendwelche Fehlermeldungen oder funktioniert die Programmlogik nicht wie erwartet?

Harald

Fehlermeldung gibts keine,
von Programmlogik: "==I" vergleich Akku2 mit Akku1, werte direkt aus DB vergleichen sollte auch funktionieren da die Werte werden ins Akku geladen.
nur bei == gibts keine "1" warum?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Weil die Werte in DB10.DBW0 und DB10.DBW2 nicht gleich sind?

Harald

es ist (soll) eine Füllmengeüberwachung, über TP wird ein Soll vorgegeben und in DB10.DBW2 abgelegt, die tatsächliche Menge wird in DB10.DBW0 abgelegt.
Ist der Sollwert erreicht, schalten sich die Pumpen aus.
 
Dann würd ich aber schreiben

Code:
L DB10.dbw0
L DB10.DBW2
>=I
O Reset
=#HM2
Ansonsten würde wenn schon überfüllt sein sollte nicht abgeschaltet

compare.jpg
 
Zuletzt bearbeitet:
Jep, wie jabba schon schrieb: >=I benutzen.
(Screenshot machen hat sich Dank jabba erledigt ;) )

Harald
 
Zuletzt bearbeitet:
Zurück
Oben