TIA Variable beschreiben in Tia Portal

Tnhf

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

ich bin ganz neu im Bereich Automatisierung (SPS Programmierung) . Mich würde interessieren was man mit "Variable beschreiben" meint? Also wenn mir jemand frag oder sagt, dass ich eine Variable beschreibe, ich weiss nicht was er damit meint.

Kann mir jemand BITTE das kurz anhand eines kleinen Beispiels erläutern oder verdeutlichen?

Ich wäre sehr dankbar dafür

Danke im Voraus

Stefan
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin Tnhf,

eine Variable ist Datenbereich, in den ein Wert hineingeschrieben werden kann. Oder auch ein Platzhalter für einen Wert, wie das X in einer mathematischen Gleichung.

"Variable beschreiben" meint, diesem Datenbereich einen Wert zuweisen.

Also X = 5 oder X = 3...

VG

MFreiberger
 
Moin Tnhf,

eine Variable ist Datenbereich, in den ein Wert hineingeschrieben werden kann. Oder auch ein Platzhalter für einen Wert, wie das X in einer mathematischen Gleichung.

"Variable beschreiben" meint, diesem Datenbereich einen Wert zuweisen.

Also X = 5 oder X = 3...

VG

MFreiberger
Hallo MFreiberger,

erstmal danke für die zügige Antwort. Also das ist das Selbe wie "Variable deklarieren" oder ? Anders gesagt: dass ich einer Variable einen Wert zuweise oder ?
Gruß

Stefan
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also das ist das Selbe wie "Variable deklarieren" oder ?
Nein, "deklarieren" bringt dem System nur bei, daß es eine Variable gibt, wie die heißt und welchen Datentyp die hat, und ggf. auf welcher Adresse die Variable liegt.

Dann kann das System auf die Variable zugreifen, z.B. den Wert lesen (aus der Variable auslesen) oder der Variable einen Wert zuweisen (in die Variable schreiben).

Harald
 
Also das ist das Selbe wie "Variable deklarieren" oder ? Anders gesagt: dass ich einer Variable einen Wert zuweise oder ?
Nein Stefan. Mit der Deklaration definierst Du den DatenTyp der Variablen und reservierst einen Platz im Speicher dafür. Der VariablenName wird zur symbolischen "Adresse" der Variablen, unter der Du die Variable später im Programm ansprechen kannst. In der Deklaration kannst Du normalerweise auch angeben, mit welchem Wert die Variable vorbesetzt werden soll. Dies geschieht beim Compilieren des Programms und ist bereits erledigt, wenn Du das Programm in die Steuerung lädst.

Eine WertZuweisung an eine Variable ist etwas, das zur Laufzeit des Programms stattfindet, wobei z.B. per ':=' der bisherige Inhalt der Variablen mit einem "neuen" Wert (der aber zufällig auch wieder derselbe Wert sein kann) überschrieben wird.

Harald war wieder schneller. ;)
 
Nein Stefan. Mit der Deklaration definierst Du den DatenTyp der Variablen und reservierst einen Platz im Speicher dafür. Der VariablenName wird zur symbolischen "Adresse" der Variablen, unter der Du die Variable später im Programm ansprechen kannst. In der Deklaration kannst Du normalerweise auch angeben, mit welchem Wert die Variable vorbesetzt werden soll. Dies geschieht beim Compilieren des Programms und ist bereits erledigt, wenn Du das Programm in die Steuerung lädst.

Eine WertZuweisung an eine Variable ist etwas, das zur Laufzeit des Programms stattfindet, wobei z.B. per ':=' der bisherige Inhalt der Variablen mit einem "neuen" Wert (der aber zufällig auch wieder derselbe Wert sein kann) überschrieben wird.

Harald war wieder schneller. ;)
Jetzt ist es klar. Danke Heinleini.

Also der Hintergrund meiner Frage ist Folgendes:

Ich muss in Tia Portal ein Datum programmieren. Die Aufgabe ist folgendermaßen definiert:


bitte programmiere einen Funktionsbaustein, der eine Tagesabfrage vornimmt.

Es werden als Eingänge das „Startdatum“, das „aktuelle Datum“ und die abzufragende
„Tageszahl“ beschaltet. Der Ausgang „Zeit überschritten“ soll gesetzt werden, wenn
das „aktuelle Datum“ größer als das „Startdatum“ + „Tagesabfrage“ ist.

Beispiel: Eingänge „Startdatum“ = 01.05.2022

„Tagesabfrage“ = 5 Tage

„Aktuelles Datum“ = 07.05.2022

Ausgang „Zeit überschritten“ = TRUE

Ich habe es selbst programmiert und im Beobachtungsmodus den Steuerwert von jeder Variablen ein bisschen geändert um zu schauen, wie oder ob der Ausgang reagiert wie ich will. Das Funktioniert soweit. Jetzt will ich aber das Ganze auch mit Wincc Visualisieren. Ziel Damit ist dass ich bei der Simulation, die Werten in der Beobachtungstabelle ändern kann sodass Diese auch in die entsprechenden Felder von HMI ändern und Umgekehrt (also dass wenn ich auch in die entsprechenden Felder des HMI etwas eingebe, ändert sich der Wert auch im Programm/Beobachtungstabelle). Ich habe schon geschafft, die Werten in der Beob-Tabelle zu ändern sodass es auch ins HMI in das entsprechende Feld geändert wird.


ABER JETZT KOMMT MEIN PROBLEM:

Wenn ich die Werten ins HMI ändere mit der Hoffnung dass es auch im Programm geändert wird, geht es nicht. Es ändert sich nichts im Programm/Beob-Tabelle. Startdatum habe ich als Datentyp DTL deklariert. Und automatisch wird es wie eine Struktur erzeugt wo Year, Day, Month, Minute, Second etc... stehen. Aber ich kann nicht auf die Daten der Variable (oder auch Struktur Startdatum) zugreifen.

Wie kann ich die so beschreiben, sodass ich vom HMI etwas ändere und dementsprechen den Wert im Programm geändert wird?

Ich freue mich so herzlich auf Vorschläge.

Gruß

Stefan
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei Deinem jetzt dargestellten Problem bin ich raus. Habe kein TIA und dementsprechend auch ganz viel NullAhnung davon. ;)

Ich vermute, dass Du mit dem DatenTyp DATE arbeiten musst und dass Du solche Daten auch subtrahieren und addieren kannst, ggfs, wenn Du die entsprechenden DatenTypKonvertierungen bzw. "TypeCasts" vornimmst.
Bei DATE werden die Tage gezählt seit dem 1990-01-01. Die Differenz zwischen zwei Daten (ich sage in solchen Fällen gerne "Datümer"), also neueres Datum abzüglich des älteren Datums, ist die Anzahl Tage, die zwischen diesen beiden liegt. U.s.w. ...
Die Umrechnung zwischen dieser Anzahl Tage seit 1990-01-01 und dem zugehörigen Datum (und umgekehrt) sollte man Siemens überlassen, damit man nicht noch die SchaltJahre berücksichtigen muss.
 
@Tnhf: Hast du die Variablen als "Erreichbar aus HMI" deklariert? Zeig mal bitte wo du die Deklarartion davon machst. Bei Volker im Bild sieht man das rechts im DB ein Häkchen gesetzt ist.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
das sollte eigentlich funktionieren.
Anhang anzeigen 61867

Guten Morgen Volker,

erstmal Danke für die Rückmeldung.

Fall 1:

Es ist so: Ich habe auf das HMI 2 Datum/Uhrzeit_Felder für Startdatun und AktuellesDatum hinzugefügt. Dazu habe ich auch ein Eingabefeld für Tageszahl mit Datentyp Int und noch ein Datum/Uhrzeit_feld für eine Variable Enddatum hinzugefügt. Das Enddatum ergibt sich aus der Summe des eingegebenen plus die Tageszahl. Das Ergebnis dieser Summe vergleiche ich mit dem gegebenen AktuellDatum, um am Ende ein True oder False bei Zeitüberschritten zu bekommen. Das funktionniert soweit. Aslo wenn ich das Datum manuel in den Felder des Hmi-Panel eingebe, ändert sich auch im Beobachtungsmodus im Programm. Umgekehrt, wenn ich im Beobachtungsmodus die Werten (Steuerwerte) ins Programm ändere, ändert sich auch in den Felder des Hmi-Panel. Also genau wie Volker gemacht hat, hatte ich schon probiert und es funktioniert auch gut.

Aber..Aber...Aber...

die Aufgabe muss anders gelöst werden, und zwar folgendermaßen:

Fall 2:
Ich muss ins HMI-Panel für jede Komponente des Strukturs Startdatum, ein Feld hinzufügen. Das heisst:

- Für den Tag, muss ich ein E/A-feld haben
- fürs Jahr auch ein E/A-feld haben
- Für den Monat auch ein E/A-Feld haben.
Die selbe Felder muss ich beim AktuellesDatum herstellen. Also genau so wie es auf mein Bild zu sehen ist. Das Enddatum kann ich einfach so wie im Fall 1 lassen, da es sich einfach aus der Berechnung ergibt. Somit muss da nichts eingegeben werden werden.

bei jedem dieser Felder muss ich eine Variable so hinterlegen, dass wenn ich zum Beispiel im Programm der Tag (Day) der Struktur ändere, dann wird dieser Steuerwert ins HMI in das hinterlegte E/A-Feld für den Tag des Startdatums dargestellt und umgekehrt. Selbes Spiel mit den E/A-Felder von Monat und Jahr.

Jetzt kommt das Hauptproblem:

betrachten wir erstmal den E/A-Feld von Tag für das Startdatum. Weil wenn das Problem für dieses Feld gelöst wird, mache ich einfach das Selbe für die anderen Felder.
In das E/A-Feld Tag, habe ich das Element "Day" meiner Struktur "Startdatum" hinterlegt. Das heisst, wenn ich im Online Modus gehe und in meine Beob-Tabelle einen Steuerwert für Day eingebe und steuere, dieser Wert erscheint auf mein HMI in das E/A-Feld von Tag. Das ist soweit gut.
ABER..... wenn ich jetzt auf dem Display in das E/A-Feld Tag irgendein Wert eingebe mit der Erwartung dass dieser Wert im Programm bei dem Element "Day" der Struktur Startdatum übernommen wird, geht es nicht. Warum? Es Ist genau mein Problem.
Also wie ich mir das Ganze anschaue, liegt das Problem daran, dass ich vom Display kein Zugriff auf die Elemente der Struktur Startdatum.

Also es muss eine eigene Struktur mit Elementen (Tag, Monat und Jahr) so programmieren, dass:
- Jedes 4 Jahren Februar 29 Tagen hat, ansonsten immer 28 Tagen,
- am 31.Dezember 2022 zum beispiel, wenn man 1 Tag addiert, dann taucht man ins folgende Jahr und somit kommt automatisch 01.01.2023
- Fürs Element Monat zum Beispiel, kann man nicht mehr als 12 eintragen, da es im Jahr nur 12 Monaten gibt und geben kann
-für den Tag kann man nicht mehr als 31 eintragen, da ein Monat nicht mehr als 31 Tagen haben kann. Für januar kann man nur bis 31 bei Tag eintragen, Februar max 28 eintragen und jeden 4 Jahren ( in 2020,2024,2028,2032.usw..), März max 31 Tagen , April max 30 usw... die übrigen Monaten bleiben unabhängig vom Jahr unverändert.

Wie kann ich das beheben? Hat jemand bitte einen Lösungsvorschlag?

wäre sehr dankbar dafür

VG

Stefan

1656231420474.png
 
@Tnhf: Hast du die Variablen als "Erreichbar aus HMI" deklariert? Zeig mal bitte wo du die Deklarartion davon machst. Bei Volker im Bild sieht man das rechts im DB ein Häkchen gesetzt ist.
Hallo UDP,

Ja ich habe alles wie beim Volker. Die Häkchen auch.

Ich habe alles erklärt als Antwort auf Volker
 
Wie wär's, wenn Du auf dem Bildschirm die Felder für Jahr und Tag tauschst und damit die EingabeReihenfolge änderst?
So dass zuerst die Jahreszahl eingegeben wird, dann der Monat und zuletzt der Tag.
Erst wenn die Jahreszahl bekannt/festgelegt ist, ergibt sich, wieviele Tage der Februar maximal hat.
Erst wenn der Monat bekannt/festgelegt ist, ergibt sich, wieviele Tage der Monat maximal hat.
Das DatumsFormat ist schon so lange (aus gutem Grund *) so genormt: JJJJ-MM-TT ... und keiner kann sich so recht damit anfreunden ... merkwürdigerweise ... warum eigentlich nicht? Das ist doch nicht sooo "schwierig", wie die Umrechnung von C° -> K oder K -> C°!

*) Die Sortierung von DatumsAngaben wird dadurch simpel.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
die struktur musst du in der sps manipulieren.
Also in der hmi 3 INT-Variablen für jahr, monat, tag.
der umweg über 2 startdatum's ist leider nötig da in der hmi im feld nach der manipulation nur rauten angezeigt werden.
im db wird es aber korrekt angezeigt. daher die dummy-addition mit 0ns
muss das in der steuerung gemacht werden? über ein vbscript im hmi wäre das ein einzeiler.
1656321418809.png
 
Zuletzt bearbeitet:
die struktur musst du in der sps manipulieren.
Also in der hmi 3 INT-Variablen für jahr, monat, tag.
der umweg über 2 startdatum's ist leider nötig da in der hmi im feld nach der manipulation nur rauten angezeigt werden.
im db wird es aber korrekt angezeigt. daher die dummy-addition mit 0ns
muss das in der steuerung gemacht werden? über ein vbscript im hmi wäre das ein einzeiler.
Anhang anzeigen 61917
Hallo Volker,

Danke nochmal für deine Rückmeldung. In deinem Netzwerk 5 habe ich in mein FB genau 1 zu 1 die selben Bausteinen wie n deinem Netzwerk 5 angewendet.
Ja genau das mit den Rauten habe ich auch bekommen. Aber laut deiner Erklärung und wenn ich deine Erklärung richtig verstanden habe, muss ich eine andere Variable Startdatum vom Datentyp DTL auch, die ich mit den einzelnen Felder (Tag, Monat und Jahr) synchronisiert wird sodass die Eingaben in den einzelnen Felder (Tag, Monat und Jahr) in das neue Feld Startdatum erscheinen oder?

Weisst du oder jemand vielleicht wie man ein Validator in der Sprache SCL erstellt? Mit Validator meine meine ich zum Beispiel folgendes:

Wenn ich zum Beispiel im Programm oder aufs Display (HMI) 29.02.2022 (also 29 ins Fad Tag, 02 ins Feld Monat und 2022 ins Feld Jahr) eingebe, in der Realität hatte Februar dieses Jahr 28 Tagen und nicht 29, wird trotzdem im Programm übernommen obwohl ich den Wertebereich definiert habe. Das sollte aber nicht der Fall sein. Ich will dann so ein Validator in den Else Teil meiner If Schleife rein packen, sodass bei falsches Eingabe vom Tag oder Month oder Jahr (in das unten stehende Bild zum Beispiel es ist für den Tag) das System reagiert.

Wie kriegt kann ich Sowas in SCL Tia Portal kriegen??

gibt es ein Befehl dafür?

VG

Stefan

1656400601975.png
 
Anbei nochmal ein Screenshot wo du sehen kannst welches Feld, welcher Variablen entspricht.
Wenn das Startdatum_IN ungültig ist findet die Dummyaddition nicht statt.
Durch einen Vergleich der Variablen kannst du ermitteln ob Statdatum gültig ist. sieht man im Screenshot
1656488075993.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Anbei nochmal ein Screenshot wo du sehen kannst welches Feld, welcher Variablen entspricht.
Wenn das Startdatum_IN ungültig ist findet die Dummyaddition nicht statt.
Durch einen Vergleich der Variablen kannst du ermitteln ob Statdatum gültig ist. sieht man im Screenshot
Anhang anzeigen 62005
Hallo Volker,

Danke nochmal für die explizite Erläuterung. Es hat bei mir auch geklappt. Die Rauten habe ich schlussendlich auch wegkriegen können. Mit Hilfe deiner Ideen habe ich auch neue Funktionen gelernt, was ich vorher nicht wusste. Die Idee mit dem Dummy war schon schlaue.

nochmal: herzlichen Dank

VG

Stefan
 
Zurück
Oben