TIA TIA 1500er Meldungen

Zuviel Werbung?
-> Hier kostenlos registrieren
Puh, das riecht aber nach S5-Style. Erst werden von irgendwoher Daten in ein Stör-Array geschrieben, das Array einzeln beschriftet und dann Durchgriff auf die Instanzdaten (SIG) eines FBs um dann anschließend ProgramAlarm anzuflanschen.
Meiner Meinung nach verschenkst du sehr viele elegante Möglichkeiten die mit ProgramAlarm möglich sind, wenn man damit objektorientiert arbeitet. Aber das ist vielleicht nicht in jeder Branche so einfach möglich.

Der Einwand ist berechtigt, und natürlich von der Branche abhängig.

Im konkreten Fall, wo genau das zitierte System mit den BOOL-Arrays im Einsatz ist, gehts um eine steuerungstechnisch unabhängige Einheit, die einerseits bei Neuanlagen (Hauptsteuerung S7-1500, S7-300 oder Rockwell Compact; Visu nach Kundenwunsch), andererseits als Retrofit-Einheit (Ersatz einer Microcontroller-Lösung, Hauptsteuerungen und Visus in verschiedensten Ausprägungen) genutzt wird.

Die Einheit ist von mal zu mal ca. zu 95% gleich, im Wesentlichen wird die Schnittstelle zur Hauptsteuerung und zur Visu angepasst - klassischer MVC-Ansatz. Ist die Visu nicht OPC- oder S7-1500 tauglich, werden die Meldungen gepackt über die Hauptsteuerung geschleust - aber trotzdem am Webserver als ProgramAlarm angezeigt.
Die Einheit kann auf diese Weise wunderbar ohne Visu in Betrieb genommen werden - ob der Kunde dann Zenon oder Intouch oder FactoryTalk View oder WinCC oder was weiß ich einsetzen will, ist somit offen.

Bei klassischen Sondermaschinen bringt dieser Array-Ansatz nichts, und wird folglich auch nicht eingesetzt. Das bedingte bearbeiten des ProgramAlarm kommt aber auch hier zum Einsatz.

Bei dem bedingten Aufruf von ProgramAlarm würde ich mal das Verhalten bei SPS-Neuanlauf prüfen. Bei den Alarm8 der S7-400 mache ich den Aufruf auch bedingt, aber zusätzlich einmal bei SPS Neuanlauf im OB100.
Danke für den Hinweis, das werde ich mir noch genauer ansehen.
 
Die Performance ist leider ein Problem. An einer 1516-3F hängen:
1x tp1500 comfort
1x wincc advanced mit 2048 powertags
4x wincc advanced mit 128 powertags (reine Anzeigen von ein paar Werten)
12 RFID Lesegeräte
10-12 ET200s mit insgesamt ca. 500 EAs
2 Buskoppler für Fremdgewerke
und über 30 Antriebe die über je 6 E/A Worte angesprochen werden.
Alles über Profinet...

Zykluszeiten dürfen nicht über 25 ms sein.

Ich habe leider keine Erfahrungen mit der 1500er. Hat jemand Erfahrung mit einer solchen Menge an Devices und den sich ergebenden Zykluszeiten?

Die 1516 ist Performance-mäßig leider ein ziemlich lahmes Ding. Laut Datenblättern sollte zwischen 1516 und 1518 bei der Rechenzeit ein Faktor von 10 sein, tatsächlich beträgt er 30-40. Laut Datenblatt sollten der 1515SP Open Controller und die 1516 gleich schnell sein - tatsächlich sind beim gleichen Programm die Zykluszeiten der 1516 um Faktor 3 höher als beim 1515SP Open Controller. Wo hier der "Fehler" ist, sei dahingestellt.

Bei der Performance hängt viel von der Programmierweise ab, Bremsen sind vor allem IN und OUT-Parameter mit Strukturen oder UDTs (besser INOUT) - und das Mischen optimiert/nicht optimiert - speziell bei Strukturen. Zudem ist der Variant-Datentyp mit Vorsicht zu genießen. Mit dem Update von Firmware 1.8 auf 2.1 haben sich die Zykluszeiten übrigens um 15-30% reduziert (Trotz V13SP1 und projektierter Firmware 1.8).

Im Vergleich zur S7-300 schöner umsetzen lässt sich das Multitasking-Konzept. Heuer hatte ich ein Projekt, wo die Regelungen und alle Bewegungen in einem 7ms- und in einem 50ms-Interrupt Task bearbeitet wurden, die ganze Datenaufbereitung, Visu-Schnittstelle usw. in MAIN (OB1) - dass die MAIN-Zykluszeit vereinzelt 250 ms betrug ist hier völlig egal.

Um ein Gefühl für die Performace zu bekommen: zieht man ein S7-300 Programm 1:1 auf die S7-1500 hoch, erreicht die 1516 ziemlich genau die gleiche Zykluszeit wie eine 317 V3.
Dazu sei gesagt, dass das genannte S7-300 Programm so geschrieben wurde, dass alle Operanden direkt referenzierbar sind - also keine Multiinstanzen, keine indizierte Programmierung, alle Daten global.
Entwirft man das gleiche Programm neu, und nutzt dabei die Möglichkeiten der S7-1500 aus (Multiinstanzen, Datenkapselung und Information Hiding, ProgramAlarm, ....), muss man mit höheren Zykluszeiten rechnen.


Wir hier schon angesprochen wurde, programmiere ich auch eher aus Sicht auf Objekte. D.h. es wird später ca. 8 verschiedene Standardfbs geben, die ich dann mit den entspechenden EAs verschalte.
Um indirekte Adressierung und multiplexen im HMI zu vermeiden, weil das ja absolute Adressierung vorraussetzt (Stichwort optimierte DBs), setze ich auf Bildbausteine, an die eine Stuktur übergeben wird, in der die Signale gesammelt übergeben werden.
Hier frage ich mich, ob es "zulässig" wäre auf die Struktur direkt in den Instanzen der Objekte (Ventile, Motoren etc.) zuzugreifen. Würde viel Performance sparen, weil ich keine Bereiche an Bausteine übergeben müsste, sondern Sollwerte, Istwerde, Steuer und Statusbits aus dem HMI direkt in die Instanz schreibe/lese... Wobei ich dazu tendiere, wenigstens die Sollwerte zu übergeben, damit bei einem Initialisieren der Instanz diese Werte bleiben.

Ich persönlich würde konsequent auf Kapselung setzen, und nicht auf Instanzdaten zugreifen. Alles was die Visu braucht, per PLC-Datentyp und INOUT-Parameter mitgeben. Nutzt Du PLC-Datentypen (UDTs), ist auch das Leben an der Visu leichter. Willst du Bildbausteine nutzen, musst du ohnehin Datentypen nutzen.
Bewusst machen muss man sich halt, dass die Visu asynchron auf die PLC-Variablen zugreifen kann, d.h. Daten können sich auch während des MAIN ändern.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen herzlichen Dank für deine Ausführungen. Ich gewinne immer mehr den Eindruck, dass du ein Skript benutzt, welches aus verschiedenen Wörtern (Sinus, Kosinus, plus, minus, Excel, Telefonbuch, C, bunt, ...) Random-Standardsätze zusammenbaut, und dann 80% des Eintrags ergeben. Der Rest setzt sich zusammen aus purem Hass, Ignoranz und aus dem Zusammenhang gerissenen Zitaten.
Dabei bin ich von uns beiden hier derjenige, der überhaupt mal Sachargumente anbringt. Während von deiner Seite zuletzt verstärkt schwer beleidigte Repliken kommen, wo mir Haßverbrechen, Ignoranz und Todsünden unterstellt werden. Ich würde gerne wissen, wie du deine Behauptung belegen kannst, daß 15xx bis 1516 Zitat "Lahme Enten" sind. Ich hatte mal ne 1511F im EInsatz, die war vollgepackt bis an die Kotzgrenze und hatte 3-4 ordentliche mehrfach gezweigte Graph-Ketten mit je 150-200 Schritten, einen gehörigen Safety-Anteil, vollumfängliche PRODIAG-Ebene für die Analyse der Schrittketten, einige ET-Stationen und bisschen Antriebe. Zykluszeit am Ende - 15mS. Und die Hälfte der Bausteine war nicht optimiert. FCs habe ich dabei fast keine verwendet, die Übergabe der Daten fand immer über die Schnittstelle eines FB statt. Ich würde gerne wissen, was Du da so betreibst, daß Du am Ende auf das von Dir beschriebene Verhalten kommst.

Schade nur dass die Basic-Panels einem hierbei den ganzen Spaß verderben. Wenn Siemens bei den Kleinen das Mengengerüst einschränken würde anstatt den Funktionsumfang, wäre es ok. Was nützt mir denn das tollste Konzept, wenn ich es in nur in zehn Prozent meiner Projekte nutzen kann? Das betrifft nicht nur das Meldekonzept, sondern auch Wertebereiche von Balkenanzeigen, Bildbausteine und vieles andere.
Das ist leider in der Tat so! Basic-Panels sind bei modularen und komplexeren Anlagen, die über das Steuern einer kleinen Pumpeneinheit hinaus gehen, schlicht nicht verwendbar.
 
Zuletzt bearbeitet:
Ich poste nochmal meinen eigenen Beitrag, weil ich Angst habe, dass der in der teilweise OffTopic-Debatte hier unterzugehen scheint:

Ich klinke mich mal hier ein, derzeitig arbeite ich auch mit dem ProgramAlarm Bausteinen, das grundlegende Verhalten habe ich (glaube ich :rolleyes:) verstanden, zu dieser Diskussion hier eine Frage:

Kann ich die ID einer Meldung ebenfalls beeinflussen?

Sobald ich einen ProgramAlarm verwende, wird unter PLC-Überwachungen & -Meldungen unter dem Reiter Meldungen und dann Programmmeldungen ein Eintrag erstellt, in dem ich die Einstellungen nochmal adaptieren kann. Hier kann ich auch über @Begleitwert und t#Textliste dynamisch reagieren.
Jetzt haben wir allerdings Störmeldelisten (yippie, - na klar, in Excel), bei denen jeder Störmeldung eine einzigartige ID zugeordnet ist - diese ID identifiziert die Meldung auch in übergeordneten System (bspw. sollen wir diese von WinCC an einen OPC Server senden, bei der Meldungen von allen angebunden Anlagen in dem Bereich auflaufen). Spanne ich den Bogen zu meiner Frage zurück: Muss diese ID nun als eigener Begleitwert (und damit Text) mit übergeben werden oder kann ich auch die integrierte Melde-ID-Verwaltung dazu nutzen?

Viele Grüße!

Könnt ihr den Kindergarten wo anders abfeuern (an alle Beteiligten) und hier wieder zurück zum Thema 1500er Meldungen kommen - danke.
 
Sein Problem ist, daß der vereehrte Kollege, nebst der Ablehnung von Graph aus Gründen der Firmenphilosophie, offensichtlich auch nicht immer, oder nach Möglichkeit wahrscheinlich auch gar nicht, Siemens-Visualisierungen verwenden möchte. Da es aber bei Nichtsiemens Visus wie "Phönix zwei plus minus sinus kosinus", InTouch etc. weder vernünftige Meldungsgenerierung, noch Möglichkeiten zur Anbindung von Instanzen und FacePlates, noch irgendwelche andere Datentypen wie INT, BOOL und REAL gibt, müssen die verehrten Kollegen gezwungenermaßen im S5 Style arbeiten.

Es ist irgendwie bezeichnend, daß es immer wieder dieselbe Personengruppe ist, die regelmäßig mit umreißenden eigenentwickelten Automatisierungskonzepten um die Ecke kommt, Siemens-Panels ablehnt und verteufelt, und gleichzeitig aber selber im S5-Style wie 1982 programmiert. Zu dem umreißenden Automatisierungskonzept gehören in der Regel noch zahlreiche in C oder C++ eigengeschriebene Tools, die angeblich bei der Arbeit mit "völlig unzulänglichem Siemens-Shit" helfen sollen, sowie seltsame Excel-Tabellen mit Telefonbuch von Makros dahinter, um daraus etwa Datenbausteine zu generieren, und möglichst viel unterschiedliche bunte Hardware, die in etwa so zusammenpasst wie Ostereier und Glühwein. Alles zusammen wird dann anschließend als sehr fundierte und durchdachte Vorgehensweise verkauft.

Geschenkt, daß Hersteller darum bemüht sind, ein ganzheitliches Automatisierungskonzept aus einer Hand anzubieten, wo einzelne Komponenten miteinander interagieren, und sich gegenseitig ergänzen. Stattdessen nimmt man Fremdkomponten von seltsamsten Random-Firmen, und beschwert sich darüber daß diese nicht vernünftig mit einer 1516 CPU zusammenarbeiten wollen.

Da muss ich auch mal meinen Senf dazu geben. Du siehst die Angelegenheit meiner Meinung nach zu engstirnig.
Nicht jeder der eine der Siemens Programmierumgebungen nutzt, arbeitet in einer großen Firma bei der die Kunden die gesamte Anlage kaufen, bzw. das Anwendungsgebiet es bedingt dass sowohl Visualisierung, Steuerung und überlagerte Systeme aus ein und der selben Firma mit einem durchdachten einheitlich anwendbaren System kommen.
Was passiert zum Beispiel, wenn der Kunde weil er schon 30 dieser Panels einsetzt, lieber welche von Firma XY hätte?
Dein Ach so schönes auf Program- Alarm zugeschnittenes Meldungskonzept das so tief in der Struktur des Programms verwoben ist, kannst du dann in die Tonne treten und musst ein System außen rum programmieren.
Das System mit dem Program-ALarm ist toll und nimmt einem bei der Visuerstellung viel Arbeit ab, vor allem wenn man die Anlage X- Mal verkaufen kann, aber sobald es nicht mehr möglich ist jedes Bauteil dieser Kette zu verwenden, z.B. wenn man sich an andere Systeme anpassen muss, ist dieses System von Siemens nicht mehr verwendbar.

Wäre doch Schade wenn man einen Auftrag verliert, weil das Visupanel nicht zum Automatisierungskonzept passt.

In meinem Arbeitsumfeld kommt es z.B. in 50% der Fällen vor, dass die Kunden bereits eine Visualisierung haben, die sie gerne weiterbenutzen würden. Ich hatte auch schon Kunden, die uns vorgeschrieben haben, dass wir die Anlage mit Step7 5.5 programmieren sollen damit das Wartungspersonal nicht TIA benutzen/ lernen muss (und keine Lizenz gekauft werden muss), aber die Panels, "wegen Farbe" doch bitte die neuen sein sollten. Kann die 300er überhaupt mit TIA den Program- Alarm? Kann man den in Step 7 5.5 nutzen?

Ich habe in der kurzen Zeit die ich das bisher mache folgendes festgestellt, wenn man bei der zehnten Anlage die zehnte komplett unterschiedliche Zusammenstellung hat, sodass es keine Möglichkeit gibt, irgendwas zu Standardisieren, muss man sich andere Wege suchen um seine Effizienz zu steigern und wenn das nun deine Excel Telefonbuch Makros sind, was solls.

Wir benutzen für kleine wiederkehrende Aufgaben ein selbstgeschriebenes Tool bei der die Fehlermeldungen zusammen mit dem Triggerbit aus der Steuerung in eine Liste eingetragen werden. Aus der Liste kommen dann die DBs als Quelle raus (mit Fehlermeldungstext als Kommentar) die die Störmeldungs- Schnittstelle zum Visupanel darstellen, zusammen mit einer Importliste der Störmeldungen die von TIA Portal oder WinCC flex oder WinCC importiert werden kann. Der Baustein der das Befüllen der Stör- DB's übernimmt kann auch aus dem Tool geholt werden, muss aber nicht.

Bei dieser Verwendung kann ich im Supportfall, wenn ich hunderte KM weit weg sitze (manchmal auch auf der anderen Seite der Erde) ohne Panel zu haben direkt in der Schnittstelle sehen, welche Störungen gerade aktiv sind. Kann ich das mit den Program- Alarm auch? Da ich das noch nicht getestet habe, wäre es nett wenn mir darauf einer eine Antwort geben könnte.

Falls die vom Kunden gewünschte Visu ein anderes Importformat will, kann ich diese Listen auch noch händisch anpassen, sodass ich nicht jede der Xtausend Meldungen von Hand eintragen muss.

Das mag S5 Style sein und auch dem entsprechen worüber du dich aufregst, aber das ist flexibel und direkt an den Kundenwunsch anpassbar.
Wie schon gesagt, ich weigere mich anzuerkennen, einen Auftrag zu verlieren weil der Kunde sich X wünscht, mein Automatisierungskonzept aber so eingefahren ist, dass ich nicht reagieren kann.
Und bevor jetzt jemand schreit " das gibts nicht, das glaub ich nicht", glaubt es, ich war dabei als es einmal daran scheiterte weil eine zusätzliche Meldungslampe auf der anderen Hallenseite nicht mit dem Automatisierungskonzept vereinbar war.
Ich hätte das Ding einfach händisch im Programm eingebaut, aber der Standard war ja heilig und sah nur einen einzigen Ausgang als Meldungsausgang vor.

Natürlich war die jetzt nicht ausschlaggebend für die Nicht-vergabe des Auftrags, aber eine Firma die so engstirnig und eingefahren ist, dass schon einfachste Änderungen nicht mehr möglich sind, wer will sich denn mit dieser Firma rumschlagen.

€dit: Sagtmal, seit wann werden denn ä ö ü nicht mehr richtig dargestellt? Oder liegt das wiedermal nur an meinem Browser?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
@Zombie:

Der Punkt ist, Du kannst dich nicht als Wunschkonzert-Zirkus (besser gesagt, Bestell-Bordell) aufstellen, wo unterschiedslos alle noch so bescheuerte Kundenwünsche gleich gut und am besten noch zum selben Preis bedient werden müssen, und das zum generellen Geschäftskonzept erklären. Oder, es wird dich früher oder später in den Ruin bringen.

Ein funktionierendes Geschäftskonzept kann sein, zu sagen, das sehr effiziente und am weitesten entwickelte Firmenstandard sieht vor, daß man ein zusammenhängendes aufeindander abgestimmtes Konzept einsetzt, zu dem bereits ausgereifte und erprobte Soft- und Hardwaregerüste existieren, die dem Kunden ein optimalmögliches Komfort und Servicefreundlichkeit zu einem vernünftigen Preis garantieren. Sollte er jedoch unbedingt wünschen, dann könnte man ggf. auch Anpassungen treffen, wird für ihn aber im gleichen Maße teurer und ggf. mit längeren Lieferzeiten verbunden, in dem es eben den Firmenstandard aufbricht. Dann wird diese Maschine ganz klar als Wunschkonzert mit einem entsprechenden Preisaufschlag verkauft.

Alles und jeden Mist zu bedienen, ist in der Regel weder sinnvoll noch erforderlich. Das machen nur solche Ramschbuden, wo die Automatisierungstechnik grundsätzlich weder wertgeschätzt noch respektiert wird, und die Manager so einen extrem herablassenden und verächtlichen Umgang mit der Materie pflegen, daß deren Bereitschaft, sich mit den technischen Details in der Entwicklung auseinanderzusetzen, gegen Null tendiert.

Im Gegensatz dazu, habe ich schon zig mal erlebt, wo Firmen mit vernünftigem Standing beim Kunden, entsprechender Überzeugungskunst und gutem Zureden für sich schier unmögliche Zugeständnisse erzwungen haben. Daß etwa Beckhoff Steuerungen mit eingenentwickelten Java- oder InTouch Visus nach VW geliefert werden, und die Planer sich mit den, ansonsten für alle Lieferanten verbindlichen, VW-Vorschriften mehr oder weniger den Hintern abputzen durften. Noch nichtmals die vorgeschriebenen E1-E22 Schließungen oder üblichen RAL-Farben der Schaltschränke hat es da gegeben. Weil man das nämlich vorab berechnet hat, was es kosten würde, einen Wunschkonzert zu bauen. Und sich das hat bezahlen lassen.
 
Zuletzt bearbeitet:
Hallo und Dank für die umfangreiche Antwort,

Ich persönlich würde konsequent auf Kapselung setzen, und nicht auf Instanzdaten zugreifen. Alles was die Visu braucht, per PLC-Datentyp und INOUT-Parameter mitgeben. Nutzt Du PLC-Datentypen (UDTs), ist auch das Leben an der Visu leichter. Willst du Bildbausteine nutzen, musst du ohnehin Datentypen nutzen.
Bewusst machen muss man sich halt, dass die Visu asynchron auf die PLC-Variablen zugreifen kann, d.h. Daten können sich auch während des MAIN ändern.

Mindestens bei den Störmeldungen, die ich z.Z. als UDT für jedes "Objekt" angelegt habe, komme ich ja kaum um die Mischung von optimiert/nicht optimiert herum, wenn ich im Baustein und im externen DB für die Meldungen mit den UDTs arbeite. Wincc möchte ein word. Ein optimierter Baustein macht aber aus meinem 16 Bit-Struct irgendwas anderes, so dass ich das word nicht übergeben kann. Mit einem Array of struct im globalen DB und einem einem absolutem Zugriff in Wincc geht das, aber da müsste ich ja wieder Daten aus einem nicht optimierten, globalen DB an einen optimierten FB als In/Out übergeben.

Da die Störmeldungen evtl. per OPC weitergegeben werden sollen, komme ich um Bits sowieso nicht rum?
 
Moin SPSPSchlumpf,

Da die Störmeldungen evtl. per OPC weitergegeben werden sollen, komme ich um Bits sowieso nicht rum?

muss man nich sowieso (auch für den Program_Alarm) ein Triggerbit erzeugen? Bitte korrigier mich, wenn ich falsch liege, aber wenn man sowieso ein Triggerbit benötigt, ist es doch egal, ob ich damit ein Program_Alarm, eine WinCC-Meldung oder eine Meldung in irgend einem anderen System anstosse?

VG

MFreiberger
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Jain, denke ich. Program_Alarm kann ich ja auch ohne den "Umweg" über ein Bit aufrufen. Das wäre allerdings nicht das Problem. Es dürfte auch auf der anderen Seite der SPS/OPC etwas leichter sein sich die Meldungen aus einem einzelnen DB abzuholen, als auf jede Instanz der "Objekte" zuzugreifen. D.h. rausgeben an einen DB sollte ich sie auch dann. Und wenn sie eh im DB stehen kann ich sie auch an das hmi weiterreichen. Ich könnte beides Projektieren und gucken ob die Performance reicht und dann im Zweifel Program_Alarm wieder löschen. Aber das ist wieder eine zusätzliche Baustelle. Mir fehlt da bisher leider die Erfahrung zu den Zykluszeiten. Ich muss leider einige Eingänge mit maximal 80 ms Verzögerung abfragen, um einen Flankenwechsel mitzubekommen.
Ob die SPS als auch der Bus überhaupt schnell genug dafür sind, ist mir noch völlig unbekannt.
 
Ein wichtiger Punkt für ProgrammAlarm kann sein, wenn man Mehrsprachige Projekte hat.

Die Fehlermeldungen kommen ja aus der CPU und dort kann man dann unter den Eigenschaften
anklicken welche Sprache verwendet werden soll, lt. Siemens Support holen sich dann die Teilnehmer
des ProgrammAlarm ihre Meldung dann in der Online Sprache ab. Dh. wenn ich am Panel A Englisch
eingestellt habe holt dieses sich das Panel die Meldung in Englisch ab, Wenn Panel B auf Französich
steht holt sich das Panel die Meldung in Französich ab, kann sogar sinnvoll sein wenn in Kanada der
eine Maschinenbediener aus Toronto kommt und der andere an Panel B aus Montreal.

Das blöde an der ganzen Sache ist, das man an der CPU nur bestimmte Sprachen einstellen kann:
  • Deutsch
  • Englisch
  • Französich
  • Spanisch
  • Italienisch
  • Japanisch
  • Chinesisch
  • Koreanisch
  • Russisch
  • Türkisch
  • Portugiesisch

Wie man unschwer erkennen kann sind das die Sprachen, wo die Automobilindustrie ihre Fertigung hat,
alle anderen Länder fallen unter dem Tisch. Maschine nach Griechenland, Norwegen oder Schweden
kannste vergessen. Ist irgendwie Blöd für einen Maschinenbauer der die ganze Welt versorgen soll.

Jetzt kommt die zweite Einschränkung, man kann nur 3 Sprachen gleichzeitig anwählen, ansonsten
heißt es immer ich muss an die Hardwarekonfig.
Wenn, wie es im Maschinenbau vorkommt (bei uns auf jedem Fall) eine Maschine von Spanien oder Italien
nach Japan weiterverkauft wird, kann es sein, obwohl die Fremdsprache auf den Geräten ist, ein Service
Einsatz erforderlich wird, weil die Fremdsprache in der Konfiguration nicht angewählt ist.

Wer denkt sich so etwas aus?
 
Im Vergleich zum reinen Bitmeldeverfahren hast du bei sehr vielen Meldungen einen Performanceverlust, der im einstelligen Prozentbereich liegt. Die Vorteile liegen aber auf der Hand. Vor allem wenn an der CPU der Webserver aktiv ist, bekommst du deine Fehlermeldungen schon ohne Visu am Webserver angezeigt.

Wenn du schlau anfängst, lässt sich prinzipiell auch schnell wieder auf das Bitmeldesystem wechseln, vor allem wenn du Visualisierungen nutzen möchtest, die nicht von Siemens kommen.

Ich hab mir beispielsweise angewöhnt, dass ich meine Meldungen in ein Bool-Array lege - für jede Fehlerklasse oder jeden Fehlerbereich ein eigenes Array. Die Kommentare der Array-Elemente lassen sich ab V14 SP1 einzeln beschriften, wodurch jede Fehlermeldung sauber bezeichnet werden kann. Anschließend lege ich in einem FB ein Array von ProgramAlarm-Instanzen an und löse den ProgramAlarm mittels Schleife aus - jedes Array für sich.
Durch geschicktes Aufteilen in Meldungen ohne Begleittexte und welche mit, lässt sich die Sache mit den Textlisten recht elegant lösen - ein bisschen Planung und Tests sind aber erforderlich.

Falls man später auf irgendein Bit/Bool-basiertes Fehlersystem gehen will, liegen die Fehlerinformationen in Bool-Form vor und müssen nur gepackt oder umformatiert werden - diesen Rechenaufwand schluckt jede S7-1500 locker weg.

lg

Wieso so kompliziert?
Der Programm Alarm ist doch nicht ohne Grund ein FB, der als Multiinstanz an genau der Stelle aufgerufen werden kann an der er Alarmieren soll und die notwendigen Begleitwerte zur Verfügung stehen.
Bei der hier beschriebenen Lösung werden die Alarme anscheinend Zentral bearbeitet, der Program_Alarm wird also wie eine Bitmeldung zentral an einer Stelle gesammelt.
Alles in allem scheint mir das mehr Nach- als Vorteilhaft.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wieso so kompliziert?
Der Programm Alarm ist doch nicht ohne Grund ein FB, der als Multiinstanz an genau der Stelle aufgerufen werden kann an der er Alarmieren soll und die notwendigen Begleitwerte zur Verfügung stehen.
Bei der hier beschriebenen Lösung werden die Alarme anscheinend Zentral bearbeitet, der Program_Alarm wird also wie eine Bitmeldung zentral an einer Stelle gesammelt.
Alles in allem scheint mir das mehr Nach- als Vorteilhaft.
Der optionale Umstieg bzw. die Rückkehr zur Bitmeldung war ja eine der Fragen bzw. Anforderungen.
 
Der optionale Umstieg bzw. die Rückkehr zur Bitmeldung war ja eine der Fragen bzw. Anforderungen.

Jeder Program_Alarm brauch einen Trigger i.d.R ein Bit. Damit kann ich sowohl Program_Alarm als auch Bitmeldung triggern.
Anbei ein Beispiel einer Grenzwertüberwachung mit 4 Meldungen die Program_Alarm, Bitmeldung oder beides gemischt erlaubt.
Alles in einem Baustein ohne das irgendwas wohin kopiert werden muss und von Schleifen bearbeitet wird.


Code:
//----------------------------------- ### Message delaying / Meldungsverzögerung ### ----------------------------------- 


  #delayAlarmHigh(IN := (#ui.EngineeringUnitValue > #ui.AlarmHighLimitValue)
                  AND #ui.AlarmHighActive AND #AlarmRelease,
                  PT := DINT_TO_TIME(REAL_TO_DINT(#ui.AlarmHighDelayTime * 1000.0)));
  #delayWarningHigh(IN := (#ui.EngineeringUnitValue > #ui.WarningHighLimitValue)
                    AND #ui.WarningHighActive AND #AlarmRelease,
                    PT := DINT_TO_TIME(REAL_TO_DINT(#ui.WarningHighDelayTime * 1000.0)));
  #delaySwitchpointHigh(IN := (#ui.EngineeringUnitValue > #ui.SwitchpointHighLimitValue)
                        AND #ui.SwitchpointLowActive AND #AlarmRelease,
                        PT := DINT_TO_TIME(REAL_TO_DINT(#ui.SwitchpointHighDelayTime * 1000.0)));
  #delaySwitchpointLow(IN := (#ui.EngineeringUnitValue < #ui.SwitchpointLowLimitValue)
                       AND #ui.SwitchpointLowActive AND #AlarmRelease,
                       PT := DINT_TO_TIME(REAL_TO_DINT(#ui.SwitchpointLowDelayTime * 1000.0)));
  #delayWarningLow(IN := (#ui.EngineeringUnitValue < #ui.WarningLowLimitValue)
                   AND #ui.WarningLowActive AND #AlarmRelease,
                   PT := DINT_TO_TIME(REAL_TO_DINT(#ui.WarningnLowDelayTime * 1000.0)));
  #delayAlarmLow(IN := (#ui.EngineeringUnitValue < #ui.AlarmLowLimitValue)
                 AND #ui.AlarmLowActive AND #AlarmRelease,
                 PT := DINT_TO_TIME(REAL_TO_DINT(#ui.AlarmLowDelayTime * 1000.0)));
  
  //------------------------------ ### Messages ### / ### Meldungen ### ----------------------------------------------------------//
  
  IF #ui.AlarmingMode = #PROGRAM_ALARM OR #ui.AlarmingMode = #MIXED_ALARM THEN
        #msgAlarmHigh(SIG:=#delayAlarmHigh.Q, SD_2 := #ui.AlarmHighLimitValue, SD_3 := #ui.EngineeringUnitValue);
        Get_AlarmState(Alarm:=#msgAlarmHigh,
                       AlarmState=>#stateAlarmHigh.AlmState,
                       Error=>#stateAlarmHigh.Err,
                       STATUS=>#stateAlarmHigh.Status);
        #msgWarningHigh(SIG:=#delayWarningHigh.Q, SD_1 := #ui.WarningLowLimitValue, SD_2 := #ui.EngineeringUnitValue, SD_3 := #ui.WarningHighLimitValue);
        Get_AlarmState(Alarm:=#msgWarningHigh,
                       AlarmState=>#stateWarningHigh.AlmState,
                       Error=>#stateWarningHigh.Err,
                       STATUS=>#stateWarningHigh.Status);
        #msgWarningLow(SIG:=#delayWarningLow.Q, SD_1 := #ui.WarningLowLimitValue, SD_2 := #ui.EngineeringUnitValue);
        Get_AlarmState(Alarm:=#msgWarningLow,
                       AlarmState=>#stateWarningLow.AlmState,
                       Error=>#stateWarningLow.Err,
                       STATUS=>#stateWarningLow.Status);
        #msgAlarmLow(SIG:=#delayAlarmLow.Q, SD_1 := #ui.AlarmLowLimitValue, SD_2 := #ui.EngineeringUnitValue);
        Get_AlarmState(Alarm:=#msgAlarmLow,
                       AlarmState=>#stateAlarmLow.AlmState,
                       Error=>#stateAlarmLow.Err,
                       STATUS=>#stateAlarmLow.Status);
    ELSE
        ; // Nothing else
    END_IF;
    
    CASE #ui.AlarmingMode OF // Bit alarm handling / Bit Alarm Verarbeitung
      0: // Only program alarm / Nur Program Alarm
        #BitAlarm.AlarmHigh := false;
        #BitAlarm.WarningHigh := false;
        #BitAlarm.WarningLow := false;
        #BitAlarm.AlarmLow := false;
      1: // Bit alarm only; alarm is triggered by delay timer / Nur Bitalarm; der Alarm wird vom Verzögerungstimer ausgelöst
        IF #delayAlarmHigh.Q THEN // Alarm coming and active 
          #BitAlarm.AlarmHigh := true;
        ELSIF NOT #delayAlarmHigh.Q AND #BitAlarm.AlarmHigh AND (#ACK OR #BitAlarm.AlarmHighACK) THEN
          #BitAlarm.AlarmHigh := false;
        END_IF;
        IF #delayWarningHigh.Q THEN // Alarm coming and active 
          #BitAlarm.WarningHigh := true;
        ELSIF NOT #delayWarningHigh.Q AND #BitAlarm.WarningHigh AND (#ACK OR #BitAlarm.WarningHighACK) THEN
          #BitAlarm.WarningHigh := false;
        END_IF;
        IF #delayWarningLow.Q THEN // Alarm coming and active 
          #BitAlarm.WarningLow := true;
        ELSIF NOT #delayWarningLow.Q AND #BitAlarm.WarningLow AND (#ACK OR #BitAlarm.WarningLowACK) THEN
          #BitAlarm.WarningLow := false;
        END_IF;
        IF #delayAlarmHigh.Q THEN // Alarm coming and active 
          #BitAlarm.AlarmHigh := true;
        ELSIF NOT #delayAlarmHigh.Q AND #BitAlarm.AlarmHigh AND (#ACK OR #BitAlarm.AlarmLowAck) THEN
          #BitAlarm.AlarmHigh := false;
        END_IF;
      2: // Program alarm sets and resets bit alarm / Die Bitalarme werden vom Programm Alarm aus gesetzt und quittiert
        IF #stateAlarmHigh.AlmState = #ALARM_ACTIVE
          OR #stateAlarmHigh.AlmState = #ALARM_ACTIVE_ACKNOWLEDGED
          OR #stateAlarmHigh.AlmState = #ALARM_GONE_UNACKNOWLEDGED THEN
          #BitAlarm.AlarmHigh := true;
        ELSIF
          #stateAlarmHigh.AlmState = #NO_ALARM THEN
          #BitAlarm.AlarmHigh := false;
        END_IF;
        IF #stateWarningHigh.AlmState = #ALARM_ACTIVE
          OR #stateWarningHigh.AlmState = #ALARM_ACTIVE_ACKNOWLEDGED
          OR #stateWarningHigh.AlmState = #ALARM_GONE_UNACKNOWLEDGED THEN
          #BitAlarm.WarningHigh := true;
        ELSIF
          #stateWarningHigh.AlmState = #NO_ALARM THEN
          #BitAlarm.AlarmHigh := false;
        END_IF;
        IF #stateWarningLow.AlmState = #ALARM_ACTIVE
          OR #stateWarningLow.AlmState = #ALARM_ACTIVE_ACKNOWLEDGED
          OR #stateWarningLow.AlmState = #ALARM_GONE_UNACKNOWLEDGED THEN
          #BitAlarm.WarningLow := true;
        ELSIF
          #stateWarningLow.AlmState = #NO_ALARM THEN
          #BitAlarm.WarningLow := false;
        END_IF;
        IF #stateAlarmLow.AlmState = #ALARM_ACTIVE
          OR #stateAlarmLow.AlmState = #ALARM_ACTIVE_ACKNOWLEDGED
          OR #stateAlarmLow.AlmState = #ALARM_GONE_UNACKNOWLEDGED THEN
          #BitAlarm.AlarmLow := true;
        ELSIF
          #stateAlarmLow.AlmState = #NO_ALARM THEN
          #BitAlarm.AlarmLow := false;
        END_IF;
      ELSE
        ; // Nothing else
    END_CASE;
 
Zuletzt bearbeitet:
... mehrsprachige Projekte ...
... kann sogar sinnvoll sein wenn in Kanada der eine Maschinenbediener aus Toronto kommt und der andere ... aus Montreal...
... Das blöde an der ganzen Sache ist, das man an der CPU nur bestimmte Sprachen einstellen kann ...
... die Sprachen, wo die Automobilindustrie ihre Fertigung hat,..

Genau, jedenfalls fast. So gesehen fehlen insbesondere
- Bayrisch
- Schwäbisch
- Sächsisch
(- Fränkisch für die Erlangen-basierten SiemensMitarbeiter)
aber auch
- Schwedisch
- Polnisch
- Rumänisch
- Tschechisch
- Ungarisch
(- Indisch, was immer das sein mag, für TaTaMobil)

... man kann nur 3 Sprachen gleichzeitig anwählen ...
... immer muss ich an die Hardwarekonfig ...
Nicht nur die Konfig, sondern die HW selbst: Schilderwald und Tastaturen! Und da kann man nicht einmal die Auswahl auf grosszügige 3 einschränken.
Und wie schaut's mit Windows? Recht mager, fast ein ent oder weder.
Und das Universal-HilfsProgramm Excel? Na ja, das ist von Hause aus 2-sprachig, wenn man nicht die englische Variante hat.
Hast Du schonmal versucht, in VBA (englisch durch und durch) den englischen Namen einer "TabellenBlattFunktion" zu erraten?

Wer denkt sich so etwas aus?
Na, die VertriebsLeute natürlich. Die sagen alles zu, was sich in der CheckListe bequem abhaken lässt.
Was aber technisch dahinter hängt, damit müssen sich andere herumschlagen.
Und den Übersetzern, die nicht einmal verstehen, was sie da übersetzen sollen, werden unglaubliche ImprovisationsFähigkeiten abverlangt.

Wer nur eine Handvoll Nägel hat, für den ist jedes Problem der Hammer (frei nach rate mal ...)

Gruss, Heinileini
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Das blöde an der ganzen Sache ist, das man an der CPU nur bestimmte Sprachen einstellen kann:
  • Deutsch
  • Englisch
  • Französich
  • Spanisch
  • Italienisch
  • Japanisch
  • Chinesisch
  • Koreanisch
  • Russisch
  • Türkisch
  • Portugiesisch
Wer denkt sich so etwas aus?

Ganz so ist es meiner Meinung nach nicht. Die oben angegebenen Sprachen beziehen sich nur auf das CPU Display.
Die Systemmeldungen stehen fertig übersetzt, für eine Menge der Sprachen zur Verfügung. Bei den exotischen Sprachen zumindest in Englisch. Der Program_Alarm kann sowieso in jeder Sprache projektiert werden.

Ich kann also für jede Sprache Systemmeldungen und Program_Alarm projektieren, habe aber nur die oben genannten Sprachen für das Display zur Verfügung.
 
Zuletzt bearbeitet:
Ganz so ist es meiner Meinung nach nicht. Die oben angegebenen Sprachen beziehen sich nur auf das CPU Display.
Die Systemmeldungen stehen fertig übersetzt, für eine Menge der Sprachen zur Verfügung. Bei den exotischen Sprachen zumindest in Englisch. Der Program_Alarm kann sowieso in jeder Sprache projektiert werden.

Ich kann also für jede Sprache Systemmeldungen und Program_Alarm projektieren, habe aber nur die oben genannten Sprachen für das Display zur Verfügung.

Wenn das stimmt währe es in Ordnung für mich, 3 Sprachen im Display reichen ja aus.
Aber ist das wirklich so das die Meldungen übersetzt werden wenn man diese mit den
Projekttexten übersetzt. Deine Aussage widerspricht den des Siemens Support und den
traue ich zur Zeit nicht viel zu.
 
Wenn das stimmt währe es in Ordnung für mich, 3 Sprachen im Display reichen ja aus.
Aber ist das wirklich so das die Meldungen übersetzt werden wenn man diese mit den
Projekttexten übersetzt. Deine Aussage widerspricht den des Siemens Support und den
traue ich zur Zeit nicht viel zu.

Ich verstehe das Inhaltlich nicht genau. Kannst Du vielleicht ein Beispiel nennen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich muss da auch noch einmal nachhaken.

Wo werden den die Meldetexte für Program Alarm gehalten?

Meiner Meinung nach in der Steuerung.

Wie kann diese übersetzen?

Zum ersten aus den Editor für die Meldungen in der PLC.
Oder gesamt mit den Projekttexten.
 
Wir verwenden bei uns auch den ProgrammAlarm, für Fördertechnikanalagen mit über 1000 ProgramAlarm Instanzen. Wir haben halt vor jeden Aufruf Logik gebaut, das der ProgramAlarm nur bearbeitet wird, wenn er sich geändert hat, d.h. er saß und ist nun weg, oder er war weg und kommt. Auch haben wir noch eine Begrenzung gebaut wieviel ProgramAlarme Pro Zyklus ausgelöst werden dürfen. (wir nutzen GetAlarmState um zu prüfen ob ersitzt oder gegangen ist)

Für die Unterstützung von Alt. bzw Fremdvisualisierungen nutzen wir den GetAlarm Baustein. Für unsere eigene Visu senden wir die Störungen per TCP/IP als Text an unser System. Für Bitmeldungen wandeln wir die mit GetAlarm ausgelesene Störnummer in eine Bitmeldung um!
 
Nutzt denn hier wirklich niemand ProDiag? Es ist ja wirklich ein Wahnsinn wie einfach es damit geht, und die Preise sind auch überschaubar mit 150 Euro pro 250 Meldungen und maximal 750 Euro für bis zu 10.000 Meldungen.
 
Zurück
Oben