WinCC Unified Wert im EA-Feld vervielfacht sich nach Eingabe

zaprena123

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

ich hab seit heute ein Problem mit einem EA-Feld. Wenn ich über die Simulation einen Wert von 2 eingebe und bestätige, wird statt 2 eine 32 angezeigt, bei 3 eine 48 und so weiter. Die Variable des EA-Feldes ist keine interne HMI-Variable sondern mit einer PLC-Variablen ("HMI_Pump_1_SpeedSp") verbunden.
Ich habe heute einen FC erstellt, in dem die PLC-Variable verrechnet wird (erst Addition, dann Division) und damit eine neue Variable ergibt.

Das funktioniert an sich auch! Nur, dass eben das EA-Feld jetzt jeden Wert den ich eingebe mal 16 nimmt und ich habe keine Ahnung warum...


1697018600244.png

Hat jemand eine Idee woran es liegen könnte?

Danke!
 
Ne Idee schon: Du wirst in die Variable irgendwo irgendwas reinschreiben. Poste Deinen Code. Dann könnte man weitersehen.
 
Ne Idee schon: Du wirst in die Variable irgendwo irgendwas reinschreiben. Poste Deinen Code. Dann könnte man weitersehen.
Meinst du den Code der Umrechnung? Der ist:
"Drive_DB".Target_speed_drive_1 := ("HMI_Pump_1_SpeedSp" + 0.0103) / 0.003979;

"Drive_DB".Target_speed_drive_1 ist dann der Eingang SpeedSp bei SINA SPEED.

Hast Du bei der Variable eine lineare Skalierung projektiert? (gibt es sowas bei WinCC Unified?)
Lineare Skalierungen gibt es auch in Unified, habe ich aber nicht an.
Hast du evtl. irgendwelche Überschneidungen im Merkerbereich?
Also MB2, MB3, MB4, MB5, MW2, MW4 müssen frei sein.
Überschneidungen gibt es soweit ich sehe nicht, das würde im TIA Portal ja eigentlich auch angezeigt werden oder?
MB und MW gehen dabei sowieso nicht, weil der Datentyp Real sein soll.
Ich habe den Merker als PLC-Variable angelegt und nicht in einem DB, das sollte aber auch passen oder?

Danke euch schonmal!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das sollte schon passen, fällt aber bei S7-1200/1500 eher unter Bad Practice. Hier solltest du aus Performance-Gründen auf den Gebrauch von Merkern eher verzichten.
Mein Vorschlag: Leg die Real-Variable in einen Datenbaustein und versuch es dann nochmal.
Nachteil deiner Lösung: Die CPU braucht zwei Zyklen statt einem um deine Variable einzulesen. (Ist bei kleineren Anlagen vielleicht noch vernachlässigbar. Grund ist, dass deine Variable nicht bei einer durch 4 teilbaren Adresse beginnt.)
Aber du kannst nicht auf einen Blick erkennen, ob es nicht doch zu doppeltem Zugriff kommt. In meinem Beispiel hier siehst du, dass die Variable "Test_Byte" mitten im Speicherbereich von "Test_Real" liegt. Das würde mir ziemlich die Show vermasseln. Einen Hinweis darauf gibt mir das System nicht.
1697023184716.png

Daher meine Empfehlung: Bei S7-1200 & S7-1500 konsequent keine Merker verwenden, sondern das Speicherhandling dem System überlassen, indem du optimierte DBs verwendest.
 
Das sollte schon passen, fällt aber bei S7-1200/1500 eher unter Bad Practice. Hier solltest du aus Performance-Gründen auf den Gebrauch von Merkern eher verzichten.
Mein Vorschlag: Leg die Real-Variable in einen Datenbaustein und versuch es dann nochmal.
Nachteil deiner Lösung: Die CPU braucht zwei Zyklen statt einem um deine Variable einzulesen. (Ist bei kleineren Anlagen vielleicht noch vernachlässigbar. Grund ist, dass deine Variable nicht bei einer durch 4 teilbaren Adresse beginnt.)
Aber du kannst nicht auf einen Blick erkennen, ob es nicht doch zu doppeltem Zugriff kommt. In meinem Beispiel hier siehst du, dass die Variable "Test_Byte" mitten im Speicherbereich von "Test_Real" liegt. Das würde mir ziemlich die Show vermasseln. Einen Hinweis darauf gibt mir das System nicht.
Anhang anzeigen 72075

Daher meine Empfehlung: Bei S7-1200 & S7-1500 konsequent keine Merker verwenden, sondern das Speicherhandling dem System überlassen, indem du optimierte DBs verwendest.
Vielen Dank!! Es haben sich tatsächlich die Speicherbereiche von zwei Merkern überschnitten!! Wenn ich den Merker ändere funktioniert es wieder normal :)

Aber du hast Recht, an meinem Fall sieht man ja wohin das führt... dann ändere ich mal noch die Merker um in Variablen von Datenbausteinen..
Merci! :)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Logik, DBs zu verwenden, weil sich Merker überschneiden können, kann ich zwar nicht ganz nachvollziehen, aber grundsätzlich ist es keine gute Idee, Merker fürs HMI zu verwenden, weil man da keinen ordentlichen Querverweis drauf machen kann. Fürs HMI ists vorteilhaft einen oder mehrere klar definierte Schnittstellen-DB zu nehmen...
 
Aber du hast Recht, an meinem Fall sieht man ja wohin das führt... dann ändere ich mal noch die Merker um in Variablen von Datenbausteinen..
Könntest Du das bitte etwas genauer angeben? Mir will nämlich beim besten Willen keine Erklärung für eine Verschiebung um 4 Bit (= mal 16) einfallen, die mit einer übersehenen Überscheidung von MerkerBelegungen zu erklären wäre.
Auch eventuelle Indianess-Probleme können eine Verschiebung um 4 Bit nicht erklären.
Da müsste/könnte ausserdem noch etwas mit einer BCD- bzw. Hexadezimal-Darstellung mit im Spiel sein.

Merci Vielfalt! :)

PS und off topic:
Funktioniert Dein VervielfachungsTrick bei allen E-/A-Feldern? Auch bei E-/A-Feldern für Gehalt bzw. KontoStand?
Apropos, negative Zahlen werden auch verfielfacht?
 
Zurück
Oben