TIA Variable beschreiben in Tia Portal

Tnhf

Member
Beiträge
6
Punkte Reaktionen
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
 

MFreiberger

Well-known member
Beiträge
1.892
Punkte Reaktionen
395
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
 
OP
T

Tnhf

Member
Beiträge
6
Punkte Reaktionen
0
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
 

PN/DP

User des Jahres 2011-2013; 2015-2017; 2020-2021
Beiträge
18.455
Punkte Reaktionen
5.490
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
 

Heinileini

Well-known member
Beiträge
4.984
Punkte Reaktionen
1.066
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. ;)
 
OP
T

Tnhf

Member
Beiträge
6
Punkte Reaktionen
0
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
 

Heinileini

Well-known member
Beiträge
4.984
Punkte Reaktionen
1.066
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.
 

UDP

Well-known member
Beiträge
140
Punkte Reaktionen
20
@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.
 
OP
T

Tnhf

Member
Beiträge
6
Punkte Reaktionen
0
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
 
OP
T

Tnhf

Member
Beiträge
6
Punkte Reaktionen
0
@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
 

Heinileini

Well-known member
Beiträge
4.984
Punkte Reaktionen
1.066
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.
 
Oben