TIA PLC-Meldetextliste: Inhalt in string schreiben

stepgerste

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

ich suche nach einer PLC Funktion, um PLC-Meldetextlisten-Inhalt in einen String zu schreiben. Kann mir jemand hier weiterhelfen?

Hintergrund:
TIA V15.1 / CPU 1516-3 PN/DP
Ich schreibe Bibliotheken-Bausteine für unsere Inbetriebnehmer. Fehlermeldungen generiere ich innerhalb der Funktionsbausteine mit Program_Alarm und dynamischen Textlisten.
In den Meldetextlisten stehen die Namen der z.B. Aktoren. Bei Alarme wird der Name für exakte Zuordnung mit ausgegeben. Zzgl. nutze ich die Sprachumschaltung, d.h. die Namen sollen entsprechen auch in andere Sprachen umgeschaltet werden können. Zu den Funktionsbausteinen habe ich ein Bildbaustein erstellt, das mit entsprechenden Datenstruktur versehen wird und somit direkt mit dem jeweiligen Funktionsbaustein-Aufruf verbunden ist. In dieser Struktur ist eine String-Variable, die im Bildbaustein als Titelausgabe genutzt wird.
Meine Idee ist es jetzt, um FB auf den jeweiligen Meldetextlisteneintrag in der jeweiligen Sprache zuzugreifen und als String-Variable im HMI als Titel auszugeben.
Ich möchte nicht parallel zur PLC-Meldetextliste noch eine HMI-Textliste pflegen. Es soll bei der Projektierung nur an einer Stelle der Name eingetragen werden.

Leider finde ich dazu nirgends Beiträge.

Vielen Dank!

LG, stepgerste
 
Ich habe nicht ganz verstanden was du geschrieben hast. Mit Programm_Alarm generierst du eine Meldung welche in einem Meldefenster angezeigt werden kann. Was passiert denn in dem FB und dem Bildbaustein noch? Was meinst du mit 'dynamischen Textlisten'?
Es gibt die Funktion 'Get_Alarm', mit der du auch die Texte der kommenden und gehenden Meldungen in bis zu drei Sprachen geliefert bekommst.

Frank
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für die schnelle Antwort; Sorry für meine unverständliche Beschreibung!

Nochmal:
Ziel ist es, den Textinhalt einer PLC-Meldetextliste in eine String-Variable zu schreiben! Geht das? Wenn ja, wie?

Zu meinem Hintergrund:
Hier der Inhalte der Grundeinstellung meiner Program_Alarm-Instanz: Anmerkung 2020-01-30 131412.jpg
Beispiel eines Alarms auf dem HMI (TP1200 Comfort): Zylinder 1 (Adaption Motor): LZF NOK
Dieses will ich auch in anderen Sprachen haben. Z.B. Englisch: cylinder 1 (adaption motor): LZF NOK
Das funktioniert auch gut! Alles in Ordnung!

Aber jetzt will ich den Text (hier: Adaption Motor) als Titel in meinem Bildbaustein nutzen. Dafür habe ich im UDT eine string-Variable, die ich gern mit dem aktuellen Inhalt der Textliste (hier: Adaption Motor) beschreiben möchte. Diese benannte string-Variable wird in einem E/A-Feld im Bildbaustein als Titel ausgeben.

Möglichkeit A:
Ich kann diese String-Variable in der PLC direkt beschreiben:
#sName := 'Adaption Motor';
So kann ich aber keine Sprachumschaltung nutzen!

Möglichkeit B:
Ich erstelle eine Textliste im HMI (mit entsprechender Sprachumschaltung) - muss aber bei jeder Inbetriebnahme zwei Listen pflegen (PLC-Meldetextliste für Program_Alarm und HMI-Textliste für die Titel der Bildbausteine) - und gerade das möchte ich umgehen.

Die momentan für mich einfachste Lösung wäre mit irgendeiner Funktion aus der PLC-Meldetextliste (mit entsprechender ID) den aktuellen Namen in die string-Variable zu schreiben und im HMI auszugeben.

Oder gibt es dafür einen generell besseren Lösungsansatz, der keine weitere Lizenz erfordert?

Vielen Dank.

LG, stepgerste
 
Eventuell die Texte in einem DB (angelegt als array of string) speichern (oder in mehreren DB's für verschiedene Sprachen), und dann im Programm_Alarm mit deiner #usiNr als Indexvariable arbeiten, im HMI kann man dann synchron dazu eine Mux-Variable anlegen?
 
Schau dir mal die Funktion Get_Alarm an.
Damit kann man die u.a. Texte der anstehenden Alarme auslesen. Man bekommt auch alle Sprachen, muß dann aber selbst die Richtige zur Anzeige bringen.
Wenn ich recht erinnere, geht das aber nur für anstehende Meldungen. Ich hab das genutzt, um die Fehler mit Text in eine Liste einzutragen, die dann an einen PC gesendet wurde.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich recht erinnere, geht das aber nur für anstehende Textmeldungen ...

Der Haken wäre dann, dass ich den Text erst bekomme, wenn ein Alarm auftritt. Für die Beschriftung brauche ich den sofort (Beim Start der Runtime).

Eventuell die Texte in einem DB (angelegt als array of string) speichern (oder in mehreren DB's für verschiedene Sprachen), und dann ...

Das bringt mich auf die Idee ohne PLC-Meldetextlisten zu arbeiten --> nur mit mehrdimensionalem Array of string, den ich einmalig beschreibe. Bekomme ich in der PLC mit, welche Sprache gerade aktiviert ist? Über eine Zahl, oder so? Kann mir das jemand ad hoc sagen?


LG, stepgerste
 
Bekomme ich in der PLC mit, welche Sprache gerade aktiviert ist?

Für die von mir gestellte Frage gibt es auch schon eine Antwort.
Beitrag: Bereichszeiger für Sprachumschaltung?

Nein, es geht nicht! Siemens hat dafür leider nichts vorgesehen. Schade!!!

Leider komme ich mit diesem Thema nicht weiter!

Die Idee von Fireman_Frank ist gut, aber ich werde die Sprachumschaltung von WinCC für diverse andere Texte trotzdem nutzen wollen. Um die Muxvariable entsprechend zu setzen, muss ich wissen, welche Sprache gerade aktiv ist ... und das weiß ich nicht :(

Momentan das beste wäre aus meiner Sicht immer noch das Schreiben einer string-Variable aus der PLC-Meldetextliste. Wahrscheinlich kann das Siemens auch nicht!
Gibt es noch Ideen?

Danke!

LG, steppgerste
 
Wie machst du denn die Sprachumschaltung auf dem Panel? Dafür gibt es doch bestimmt nen Taster, mit dem du dir parallel zur Sprachumschaltung auch ein Bit in der SPS setzen kannst?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da die CPUs der Reihe S7-1500 mit Display ausgeliefert werden und auch der Web-Server integriert ist, kann die Melde-Liste bei Verwendung eines Panels auf 3 verschiedenen Geräten dargestellt werden. Für welches Gerät soll jetzt die Sprachvariable gesetzt werden?

Grüße
Ralph
 
Bekomme ich in der PLC mit, welche Sprache gerade aktiviert ist?
Für die von mir gestellte Frage gibt es auch schon eine Antwort.
Beitrag: Bereichszeiger für Sprachumschaltung?

Nein, es geht nicht! Siemens hat dafür leider nichts vorgesehen. Schade!!!
In dem von Dir gefundenen sehr alten Beitrag ging es um ein OP77B und WinCC flexible ...

Bei TIA Panels bzw. RT, welche VBS-Skripte können, kann man die gerade aktive RT-Sprache in einem Skript abfragen:
Code:
SmartTags("MyPLCvar") = HMIRuntime.Language

Harald
 
Ich habe aus allen Beiträgen für meine Problemstellung eine Lösung.
Vielen Dank an alle für konstruktive Beiträge!

Hier eine Kurzbeschreibung:

Wie PN/DP (Harald) gesagt hat, habe ich eine Funktion als VB-Skript (VB_GetCurrentLanguage) geschrieben, mit der entsprechenden Zeile:
Code:
Sub VB_GetCurrentLanguage()

SmartTags("iCurrentLanguage") = HmiRuntime.Language

End Sub
Die Variable "iCurrentLanguage" ist mit einer PLC Variable verlinkt (Erfassungsart der HMI-Variable: Zyklisch fortlaufend).
Bei Betätigung der Sprachumschaltung wird dieses Skript einmal ausgeführt und schreibt mir je nach eingestellter Sprache einen entsprechenden Wert zurück (Beispiel für Deutsch-Deutsch wird der Wert 1031 zurückgegeben). Die Werte und Sprachkürzel der jeweiligen Sprache sind laut Hilfe unter dem Thema "Gebietsschema-ID (LCID)-Diagramm" zu finden (Das habe ich in der Hilfe leider nirgends gefunden :( ) ... aber im Netz gibt es Tabellen, woran man sich orientieren kann.

Den zurückgegebenen Wert fange ich in einer Case-Anweisung ab und beschreibe eine int-Variable mit Zahlen 0..Anzahl der aktiven Sprachen.

Die Namen der Titel trage ich in einen mehrdimensionalen Array DB ein. Die erste Dimension steht für Sprache, die zweite Dimension für die entsprechende Instanz.
Als Schnittstelle zum Baustein habe ich im InOut ein grenzloses Array vom Typ Array[*,*] of string. Von "außen" verbinde ich diese Schnittstelle mit dem entsprechendem DB (d.h. jede Instanz mit der gleichen Schnittstelle). Entsprechend dem Sprach-Index und der Instanz-Nummer wird der Name aus dem DB als Titel im HMI und in den Fehlermeldungen genutzt!

Funktioniert!

Um es optimal zu machen, müsste ich im Baustein die Grenzen des Arrays erfragen um Laufzeitfehler zu vermeiden. Zum anderen wäre eine Funktion sehr hilfreich, um den Index eines verbundenen Array-Elements zu erfragen.
Das müsste ich aber unter einem neuen Thema machen. Ich habe dazu einen Beitrag aus 2008 gefunden. Es könnte sich inzwischen bei Siemens ja was gemacht haben ;)

Vielen Dank nochmal.

Herzlicher Gruß
stepgerste
 
Zurück
Oben