Step 7 Ausführung von Funktionsbausteinen detektieren

Zuviel Werbung?
-> Hier kostenlos registrieren
Es bringt nichts, er will oder kann es nicht verstehen, denn trotz vieler Ratschläge kommt keine Erkenntnis:
Randbedingung 1: Möglichst wenig Eingriff in das bestehende Programm - am besten keiner.

Nehmen wir weiter an, dass sich diese drei Programme jeweils bezüglich der verwendeten FBs und FCs unterscheiden (was in denen genau passiert, sei an dieser Stelle irrelevant).

Und selbst wenn es so wäre, dass- komplett praxisfern- Produktionszustände anhand Ablauf/Aufruf eines FB's/FC's feststellbar wären, wäre es noch immer leichter diesen Zustand separat in ein Datenfeld (oder dgl) zu schreiben.

Um die Aufgabe zu lösen muss sich eben einer mit nem PG hinsetzen und die Bits die man haben will auf zB einen DB auflegen und diese dann abholen.
 
Für mich hört sich das so an, als ob da jemand dem TE einen Streich gespielt hat. Fast als hätte jemand dem neuen Betriebsingenieur der frisch von der Uni kommt eine total Sinnlose Aufgabe gegeben um ihn zu beschäftigen.

Also folgendes, du kannst mit verschiedenen PC Programmen auf die SPS zugreifen. Libnodave heißt z.B. eines davon.

Dann muss man noch folgendes festhalten:
Wenn du keine Informationen über das auf der SPS laufende Programm hast, kannst du nicht detektieren, welche FBs gerade abgearbeitet werden. Es gibt keine Standardmäßige Variable in der steht "Gerade wird FB1 bearbeitet".
Du musst für jeden Zugriff wissen wie die Struktur aussieht. Man kann den Speicher soweit ich weiß Byteweise auslesen, aber ohne Informationen wie die Variablen über die ausgelesenen Bytes verteilt sind, ist das nur Gibberish.

Wenn du Informationen über das Programm hast, könntest du den ausgelesenen Variablen einen Sinn geben. Wenn du nun solche Variablen ausliest, die spezifisch nur in einem bestimmten Baustein gesetzt werden, und am Ende des Zyklus schon wieder zurückgesetzt werden würden, könntest du detektieren, wann die Variable gesetzt wird. Dann könntest du sagen, gerade wird FC 2134 abgearbeitet, da gerade jetzt diese Variable kam.

Der Sinn hinter dem ganzen verstehe ich aber nun doch nicht so ganz. Es scheint mir, als ob ihr in eurer Firma Produktionsanlagen benutzt, die inkl. SPS Programm von Drittfirmen geliefert werden, und ihr hättet jetzt gerne einen komfortablen Weg um bei Störungen den etwaigen Zustand der Anlage feststellen zu können. Dazu ist jedoch aufgrund der Arbeitsweise einer SPS, der von dir vorgeschlagene Weg komplett sinnlos, wenn nicht sogar unmöglich.

Ich versuche mal zu erklären wieso:
Findet im Programmablauf ein Fehler statt, z.b. fällt eine Sicherung aus oder brennt ein Heizstab durch, wird der Arbeitsablauf der Maschine durch das Anwenderprogramm zwar an dieser Stelle unterbrochen, weil das Anwenderprogramm einen Fehler festgestellt hat, aber die SPS stoppt die Abarbeitung des Anwenderprogrammes nicht.
Man kann also nicht sagen, nur weil die Anlage steht, ist das Programm im FC34 hängengeblieben und die Bausteine die danach kommen werden nicht mehr abgearbeitet.

Eine SPS bearbeitet das Anwenderprogramm zyklisch, anders als ein PC z.B. C- Code bearbeitet. Die SPS wartet nicht, bis Bedingung XY erfüllt ist, sondern schaut nach, ist Bedingung XY erfüllt, falls ja mache ich was ich dann machen soll, falls nicht mache ich mit der nächsten Anweisung weiter. Bei einem PC würde z.B. der Code in Zeile 45 unterbrochen werden und alles was danach kommen würde, würde nicht mehr bearbeitet.

Ich versuche es nochmal anders aufzuschreiben. Stelle dir folgende Situation vor:
Im Anwenderprogramm werden im OB1 die folgenden FCs in dieser Reihenfolge aufgerufen:
Code:
FC1
FC34
FC76
FC123
FC567
FC4
FC2

Jetzt passiert ein Fehler und die Sicherung fällt/ Brennt durch. Nun kann die Heizung, welche von FC76 ausgesteuert wird, nicht mehr die Zieltemperatur erreichen. Dein Anwenderprogramm stoppt nun nicht im FC76, sondern die Bedingung "Zieltemperatur erreicht" die für die etwaige Bearbeitung der nachfolgenden Bausteine notwendig ist, wird einfach nicht mehr erfüllt. Soll heißen, die SPS bearbeitet FC76, beendet ihn, öffnet FC123, und fängt an die Anweisungen in diesem Baustein abzuarbeiten. Ist eine der Bedingungen in dem Baustein "Zieltemperatur erreicht", wird dieser Anweisungsteil nicht bearbeitet, aber andere Anweisungen die nicht diese Vorbedingungen haben werden bearbeitet. Ist sie durch die letzte Anweisung im Baustein FC123 durchgelaufen, schließt sie den Baustein und öffnet den nächsten. Und auch dort bearbeitet sie alle Anweisungen für die die Bedingungen erfüllt sind. Ist das Anwenderprogramm durch alle Bausteine gelaufen und hat die Anweisungen ausgeführt, deren Bedingung erfüllt war, beginnt sie die Abarbeitung wieder von vorne bei FC1.

Sie wird also niemals an der Fehlerstelle "stehenbleiben", weshalb die Information, gerade wird Baustein XC abgearbeitet keine wirklichen Informationen bringt.

Wenn du nun diese Wartungsoption trotzdem haben möchtest, kannst du dir eine Schnittstelle schaffen, in der du die Fehlermeldungen sammelst und welche du dann nach außen herausgibst. Diese Schnittstelle kann aus einem separaten DB bestehen, in den du die vom Anwenderprogramm bereitgestellten Variablen hineinkopierst und dann mit deinem µ- Controller darauf zugreifen, diese auslesen und dann auf deinem Smartphone anzeigen lassen, Bit XY kommt, das steht für den "Fehler 102: Sicherung Heizelement 2b gefallen". Aber weißt du was das verrückte an der ganzen Sache ist?
Die Hersteller haben diese Schnittstelle sicherlich schon auf die eine oder andere Art erstellt, denn die Visualisierungen dieser Hersteller greifen vermutlich alle auf diese Schnittstelle zu. Jedoch hat jeder Hersteller seine eigene Art dun Weise diese Informationen zu sammeln und bereitzustellen. Du kannst hier im Forum fragen, 30 Programmierer werden dir sicherlich 25 verschiedene Arten beschreiben können. Wenn du das Programm auslesen kannst oder dir von der Firma bereitgestellt wurde (was nicht immer der Fall ist) kannst du nach dieser Schnittstelle suchen und die dann mit einem anderen Programm/ Rechner/ µ- Controller auslesen. Wenn dem nicht so ist, musst du dich wohl oder übel an die Firma wenden und sie bitten gegen ein Entgeld die Anlage umzuprogrammieren, sodass dies möglich ist.

Manche Visualisierungen, sofern sie an ein Netzwerk angeschlossen sind, können Mails verschicken wenn bestimmte Vorraussetzungen erfüllt sind. Sofern ich weiß, kann eine SPS auch SMSen verschicken, insofern ein Modul dafür vorhanden ist. Es gibt viele Wege, wie man komfortabel Informationen aus der SPS bekommen kann. Sie müssen jedoch vom Anwenderprogramm bereitsgestellt werden. Welche Information nicht exisitert, kann nicht ausgelesen werden und wie ich am Anfang schon schrieb, gibt es keine Variable die da sagt "Gerade wird FC1 abgearbeitet". Diese müsste man sich erst erstellen, was aber vermutlich niemand machen wird, da es keinen Mehrwert hätte. Der Grund dafür ist in meinen Augen simpel, denn wie schon gesagt, bearbeitet eine SPS innerhalb eines Zyklusses, der bei unkomplizierten Programmen schonmal nur 1ms lang sein kann, ALLE Bausteine. Du würdest, selbst wenn du dir ein Progamm baust, dass dir die Informationen bereitstellt welcher FC gerade bearbeitet wird, innerhalb einer einzigen ms, 1000µs oder 0,001 Sekunden eine Information bekommen, die sich X- Mal ändert, wobei X die Anzahl an Bausteinen ist.
Das menschliche Auge ist nicht so schnell, diese Zahl zu erfassen, weshalb Variablenwerte in der Live- Einsicht der Programmierumgebung nur alle so und so viele Zyklen aktualisiert werden. D.h. die Variable hätte dort den Wert 76 für FC76, das Programm wäre aber bereits 100µs später schon bei FC123, wäre also schon beim nächsten bzw. übernächsten Baustein bis du einen Variablenwert bewusst erfasst hättest.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zombie,

vielen Dank für die Antwort! Nein, es ist kein Streich - die Variante mit dem Drittanbieter ist zutreffend. Und auch die Problematik, dass beim vorliegenden sehr heterogenen Maschinenpark die "Fehlerbehandlung" - oder besser, das "Eventhandling" - unterschiedlich ist, macht es nicht leichter.

Das Fazit für mich (was auch die vorangegangenen Posts aussagen) ist somit, dass es keine Möglichkeit gibt, ohne eine geeignete Erweiterung des Programmcodes die gewünschte Funktionalität zu bekommen. Als Lösungsansatz erscheint die Nutzung von DBs mit einheitlicher Anordnung in Kombination mit einem WLAN-Modul sinnvoll. Das Problem mit den kurzen Zyklen ist nicht so tragisch, solange ich z.B. bei einem Fehler zumindest einmal kurz eine 1 im zugehörigen DB habe und das detektiere...

Vielen Dank - aus meiner Sicht habe ich nun die notwendigen Informationen :)
 
Zurück
Oben