TIA Variable springt die ganze Zeit herum.

manuelck99

Level-1
Beiträge
22
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie aus dem Titel schon ersichtlich sein sollte, habe ich das Problem, dass eine von mir angelegte Variable vom Datentyp Real aus unerklärlichen Gründen immer zwischen 0 und einem entweder riesig kleinen oder riesig großen Wert um herspringt. Das gleiche gilt auch für eine andere Variable vom Typ Bool, die auch immer zwischen 0 oder 1 um herspringt. Beide Variablen werden von mir nur gelesen.
 
Sehr aussagekräftig ist dies ja nicht.

Was für eine Software, was für eine CPU, leg doch mal einen Screenshot hier bei. Die Variable wird halt irgendwo beschrieben oder es gibt überlappende
Zugriffe, welche du nicht siehst. Von alleine ändert sich da nichts.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für deine Antwort erstmal.

Es handelt sich um eine S7-1512C-1 PN und das TIA Portal V15. Da ich die SPS nicht griffbereit habe simuliere ich diese mit PLCSIM V15. Zu deiner Antwort das es vllt. überlappende ZUgriff gibt, wollte ich noch fragen, ob man irgendwo alle Merkeraddressbereiche einsehen kann, um zu überprüfen wer aller darauf zugreift. Und zum Screenshot will ich noch fragen, wovon genau ich einen machen soll.
 
Wie wird den Variablen ein Wert zugewiesen?
Vermutung: Speicher-Überlappung von mehreren Variablen oder "vorsichtshalber" wird erstmal 0 zugewiesen und nach 27 halbgaren IF..THEN..ELSE wird der endgültige Wert zugewiesen? ;)

Für Werte, die auf HMI angezeigt werden sollen, sollte man den Variablen nur ein einziges Mal im Zyklus einen Wert zuweisen. Am besten diese Variablen als Kopien von Prozessvariablen in sauber strukturierten DB anlegen ("dokumentierte Schnittstelle zum HMI"). Von der HMI-Seite her sollte man nicht versuchen, alle möglichen Variablen anzuzeigen, deren Name oder Adresse man zufällig kennt, wenn sie nicht extra zur Verwendung am HMI gedacht sind.

Harald
 
Also mit den Systembits hattest du recht. Ich habe tatsächlich die Merkeradresse M1.x benutzt, da ich dachte solange ich die Systembits nicht aktiviere kein Problem deswegen entstehen würde. Die andere Real-Variable macht allerdings jetzt etwas ganz komisches, wenn ich sie mir in der PLC-Variablenliste anschaue steht unter Beobachtung 0, wenn ich aber im Main OB schaue steht in einem Netzwerk, dass es einen riesigen Wert hat und im nächsten Netzwerk, wo sie wieder nur zum Einlesen benutzt wird steht dann 0.
 
Variablenliste.jpgProgramm 1.PNGProgramm 2.PNG

Das erste Bild zeigt die Variablenliste in der steht für die betreffende Variable "HMI_Drehzahlsollwert Antrieb 1 REAL", dass sie 0 ist. Im zweiten Bild steht dann der riesige Wert und im dritten BIld wieder 0. Die Variable wird sonst nirgendwo im Programm benutzt und sie hat den Beisatz HMI, weil der Wert von einer HMI kommen sollte. Diese ist allerdings noch nicht projektiert und es bestehen daher keine Verbindungen und es sollte daher auch 0 (der Default-Wert) in der Variable stehen.
 
Deine Variable "HMI_Drehzahlsollwert Antrieb 1 REAL" liegt im gleichen Bereich wie einige BOOL Variablen:
M10.5 = Meldung Antrieb 1
M10.3 = Meldung Einspeisung
M10.4 = Meldung Steuereinheit
und noch viele mehr
MD10 = Drehzahlsollwert


wie soll dass funktionieren.

MD10 besteht aus
M10.0
M10.1
......
M13.6
M13.7

32 Bits halt.
 
Erstmal vielen Dank für deine Hilfe. Und zweitens bin ich noch unerfahren im Umgang mit dem TIA Portal und allgemein Programmstrukturen bzw. "saubere" Programme zu schreiben, da ich mich noch in der Schule (HTL) befinde und ich bis auf ein bisschen Erfahrung und den Siemens Handbüchern, nicht wirklich etwas habe an das ich wenden kann bei Problemen. Deswegen nehme ich nur zu gern Empfehlungen und Vorschläge von Programmierern wie in diesem Forum an. Ich werde jetzt das Programm jetzt so umbauen, dass ich mit DB-Variablen arbeite.
 
Kein Problem,
wichtig ist für dich denke ich zu verstehen, wie die Datentypen aufgebaut sind.
Das z.B. MB100 aus M100.0 / M100.1...... M100.7 besteht ( MB = Byte = 8 Bit )

Bei anderen Typen entsprechend mehr Bits:
WORD/INT 16 Bit
DWORD/DINT 32 Bit
REAL 32 Bit
 
Zurück
Oben