TIA Daten in HMI eingeben und dann in DB schreiben

Kad

Level-1
Beiträge
13
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin Leute,

Folgender Hintergrund zu meinem Problem: Ich habe auf meiner SPS (1511-1 PN) vier DBs. Einen DB für Motorströme, einen für die jeweiligen Frequenzen, einen mit Daten zu den jeweiligen Betriebsstunden und dann noch einen, in dem die Dauer einer Anfahrwarnung für jeden Motor hinterlegt ist. Über mein HMI Panel (TP900 Comfort) möchte ich nun via Dropdown-Menü einen Motor auswählen und mir dann aus den DBs die jeweiligen Daten zu dem ausgewählten Motor anzeigen lassen bzw. auch durch ein Eingabefeld beschreiben ( siehe Screenshot im Anhang). Das Auslesen der Werte ist kein Problem, allerdings habe ich noch Probleme, wenn ich im Panel zB. die Dauer der Anfahrwarnung ändere und diese Änderung in den DB zu schreiben.

Um einen Wert auszulesen, habe ich folgenden AWL Code geschrieben:

Code:
OPN   "DB3_Anfahrwarnung_Zeit"
L     "Motor_Nr"            
SLW   3                   
LAR1                       
L DBW [ AR1 , P#0.0 ]
T     "Merker_Anfahrwarnung"


Durch das Panel wähle ich die jeweilige Motornummer aus und gehe dann mit einem Pointer an die jeweilige Stelle im DB, um den Wert auszulesen. Aber wie kann ich genau an diese Stelle zB einen Wert schreiben? Ich habe da irgendwie gerade eine Blockade.

Ich hoffe mein Problem ist verständlich geworden und vielleicht kann mir ja jmd. einen hilfreichen Tipp geben.

Viele Grüße
 

Anhänge

  • Unbenannt.PNG
    Unbenannt.PNG
    16,3 KB · Aufrufe: 51
Zuletzt bearbeitet:
Ich hab gerade nichts zum testen da, aber würde nicht ein Tausch der beiden Anweisungen L "Merker_Anlaufwarnung" und T DBW.... ausreichen?

Code:
OPN   "DB3_Anfahrwarnung_Zeit"
L     "Motor_Nr"            
SLW   3
UN "Merker_Beschreiben"                   
      LAR1                       
      L DBW [ AR1 , P#0.0 ]
      T     "Merker_Anfahrwarnung"
U "Merker_Beschreiben"
LAR1
L "Merker_Anlaufwarnung"
T DBW [ AR1 , P#0.0 ]

In SCL würde ich das ganze so schreiben
Code:
If NOT "Merker_Beschreiben" then
"Merker_Anlaufwarnung" := "DB3_Anfahrwarnung_Zeit".Motor[Motor_Nr].Anlaufwarnung;
Else
"DB3_Anfahrwarnung_Zeit".Motor[Motor_Nr].Anlaufwarnung := "Merker_Anlaufwarnung";
end_if
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

vielen Dank für die Antwort. Vom Prinzip her hast du mit dem Vertauschen der Operanden recht. Allerdings meckert TIA bei der AWL Variante rum: "Syntaxfehler: Der eingegebene Wert 'UN' ist ungültig."
Auch bin ich mir nicht sicher, wann und wie ich das Bit "Merker_Beschreiben" setzen soll.
 
Hallo,

Um wieviele Motoren handelt es sich bei Dir?
Du kannst das Schreiben in die richtige DB-Variable dem HMI überlassen, indem Du im HMI die Variablen multiplext. Das braucht zwar etwas höheren Projektierungsaufwand, doch dafür kann man PLC-Variablen auch symbolisch ansprechen.
schau mal in die TIA-Hilfe: multiplexen > Indirekte Adressierung von Variablen
oder Siemens Support FAQ Wie funktioniert das Variablen-Multiplexen?
oder hier im Forum Suchwort "variable multiplex"

Bei neuen Programmen für die S7-1500 sollte man dieses elende unübersichtliche AWL-rumgepointere gar nicht mehr anwenden, außerdem geht solche Adressierung nicht mit "optimierten" DB.

Harald
 
Hallo Harald,

Zur Zeit sind es 10 Motoren. Die Idee dahinter ist, dass ich später beliebig viele Motoren mit einer festen Anzahl an Variablen in WinCC verarbeiten kann (in diesem noch sehr einfachen Beispiel sind es eben vier Variablen: Motorstrom, Frequenz, Betriebsstunden und Anlaufwarnzeit).
Über das Multiplexen hatte ich auch schon nachgedacht, allerdings den Ansatz noch nicht wirklich ernsthaft Verfolgt. Ich denke ich werde es aber nun mal ausprobieren, da ich mit meinem ursprünglichen Ansatz ein wenig in eine Sackgasse geraten bin.
Vielen Dank.


EDIT: Ich hätte vielleicht erwähnen sollen, dass ich nicht Win CC flex verwende. Wenn ich das richtig verstehe ist das Multiplexen von Variablen nur bei Win CC flex möglich, oder? Bei WinCC (TIA) kann ich Variablen nur multiplexen, indem ich Arrays verwendet, sehe ich das richtig?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Was WinCC flexible konnte muß auch TIA können. Sonst könnte man das ja nicht migrieren.
Und was TIA mehr kann als WinCC flexible? da kenne ich nur Schnickschnack, den man nicht wirklich braucht. Oder kann TIA jetzt auch allgemein mit Variablen-Arrays umgehen, z.B. ein Array an ein EA-Feld anbinden? Dann könntest Du Deine Aufgabe noch einfacher lösen.

TIA kann das Variablen-multiplexen. Wie ich schon schrieb: schau in die TIA-Hilfe, da ist das Vorgehen zum Variablen-multiplexen kurz beschrieben. Im Siemens Online Support gibt es nur die Anleitung wie man bei WinCC flexible vorgehen muß, das Vorgehen in TIA unterscheidet sich aber im Grunde nicht, wohl auch deshalb erstellt Siemens keine neuen Anleitungen, nur die Bilder würden anders aussehen und Menüpunkte heißen leicht anders.

Harald
 
Zurück
Oben