TIA Benutzer bedingtes Ereignis über HMI

emilio20

Level-1
Beiträge
835
Reaktionspunkte
20
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo
ich möchte bedingte Ereignisse über ein HMI anlegen.
Das ganze sollte in Tia V13 mit Runtime PC umgesetzt werden.
Ich würde mir das Ganze so vorstellen das man zuerst die Auswahl, Eingang, Ausgang, Merker, DB hat.
Anschließend die Adresse . z.b M1.0 oder E2.0 DB2.DBX3.0 ,mit Symbolischen Namen.
Danach Pos Flanke,Neg Flanke,
danach eine Auswahl von Ereignissen.

Hat jemand sowas schon mal gemacht?

Meine Idee wäre das Ganze in einem String zu Packen und diesen anschließen wieder zu zerlegen und in der SPS verarbeiten?
Oder gibt es für sowas eine einfachere Lösung?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Da ich häufig frei definierbare Abläufe bei meinen Maschinen brauche, mach ich sowas öfters.
Ich pack das ganze nicht in Strings sondern definiere mir passende UDTs.
Die UDTs lassen sich leichter handeln als Strings.

Gruß
Dieter
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was sind frei definierbare Abläufe?Kratz?:D
Stell dir ein Anlage mit mehreren Bearbeitungstationen vor.
Bei den verschiedenen Werkstücken ist die Lage, die Reihenfolge und die Art der Bearbeitung unterschiedlich.
Der Bediener kann nun am Panel die Bearbeitungsabläufe frei gestalten und so neue Typen von Werkstücken selbst anlegen.

Die entsprechenden UDTs sind sehr simpel.
Code:
Aktion : int;
PosX1 : dint;
SpeedX1 : int;
PosX2 : int;
SpeedX2 : int;
Parameter1: word;
Parameter2: word;
usw.

Für jede Station gibt es dann ein Arrays mit diesen UDTs.
Vom Panel erfolgt der Zugriff dann über Multiplex-Variablen.

Gruß
Dieter
 
Das wäre dann eine frei definierbare Ablaufkette mit frei definierbaren "Rezeptparametern"?
Du kannst quasi die Schrittreihenfolge vorgeben.

Ist das dann in der Art.Du sagst Schritt 1 (kriegt eine Nummer)-> die Nummer bedeuted Funktion a mit den parametern a
 
Das wäre dann eine frei definierbare Ablaufkette mit frei definierbaren "Rezeptparametern"?
Du kannst quasi die Schrittreihenfolge vorgeben.

Ist das dann in der Art.Du sagst Schritt 1 (kriegt eine Nummer)-> die Nummer bedeuted Funktion a mit den parametern a

Auf dieser Basis hat alles mal angefangen.
Du kannst aber natürlich das System um Aktionen (Befehle) zur Schrittkettensteuerung erweitern und so bleibt letztlich nicht mal mehr das Gerüst der Kette übrig.

Gruß
Dieter
 
Hallo
zukünftig könnte ich mir auch "IFTTT" vorstellen. Aktuell benötige ich nur einfache Bedingungen.

Die Idee von mir war folgende. Eine Oberfläche zu gestalten für eine Haussteuerung. Der Endbenutzer kann dann selbst ablaufe am HMI anlegen und löschen, ähnlich der Fhem Programmierung.

Der Benutzer kann dann z.b Programmieren wenn der E1.0 drückt wird soll der A1.0 für 30 sec an sein. usw.

Für mich wäre hierzu wichtig wie das ganze am einfachsten aufzubauen wäre.

@Blockmove wo werden bei dir die Ablaufe abgelegt ? In den UDT sind ja die Parameter enthalten. Aber wo wird festgelegt welcher Ablauf zuerst erfolgt ?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo
ich habe mal eine Auflistung erstellt was für Funktionen im ersten Schritt am HMI eingegeben werden sollen.
Wenn ich das ganze über einen UDT mache müssen ja in jedem Array später alle mögliche Funktionen und Aktionen enthalten sein. Das würde das ganze sehr aufblasen.
Deswegen bin ich immer noch der Meinung eine String zu zerlegen wäre die bessere Alternative.

Somit hätte ich einen DB in ein Array of Strings mit der entsprechenden Funktionen, Aktionen und Parametern enthalten wären. Diese müsste ich dann im Programm aufschlüsseln und die entsprechenden Funktionen ausführen.

Oder hat jemand noch eine bessere Idee?

Hier mal ein Beispiel von fhem
http://www.fhemwiki.de/wiki/If-condition
 

Anhänge

  • Ereignise.JPG
    Ereignise.JPG
    63 KB · Aufrufe: 24
Also ich halte das für sehr aufwendig was du da planst.
Im prinzip ist das ja wie einen Übersetzer schreiben.Einfach stelle ich mir das nicht vor.Vor allem schlecht pflegbar und erweiterbar.
Ich würde das eher mit Bildbausteinen machen.Das ganze muss ja auch gepflegt und erweitert werden.
Speicherplatz ist ja heute kein problem mehr.Also selbst wenn du hunderte solcher datensätze anlegst, wäre das kein problem.

Ich würde das mit Bildbausteinen machen.Ein Bildbaustein kriegt eine Funktion zugeordnet.Mithilfe einer Textliste wählst du dann ein Objekt(datensatz)
aus.Es wird dann ein Präfix übergeben.Verschiedene Funktionen bedeuten dann verschiedene Bildbausteine.Wenn man gleich alle Variablen in einem Datensatz unterbringt
holt man sich das raus was man braucht für das entsprechende Bildfenster.man kann auch schön Texte zuordnen pro Objekt.
Oder übersehe ich da was?Kraaaatz?
 
Wenn ich das ganze über einen UDT mache müssen ja in jedem Array später alle mögliche Funktionen und Aktionen enthalten sein.
Ich habe eine Aktions-Nr. und Parameter.
Also z.B. :
Code:
1 Pos. Flanke
2 Neg. Flanke
3 Timer
4 Schaltuhr

Dann gibt es z.B. 8 mal DWORD als Parameter.
Parameter 1 enthält die Adresse des Eingangsoperanten
Parameter 2 enthält die Adresse des Ausgangsoperanten
Bei Aktion 3 ist Parameter 3 eben die Zeitdauer.
Bei Aktion 4 ist Parameter 3 die Enschaltzeit und Parameter 4 die Ausschaltzeit.

Vor knapp 20 Jahren haben wir damit experimentiert, dass man für sehr einfache Maschinen das Programm im Prinzip am Panel eingeben kann.
Hat auch soweit funktioniert, nur war halt die Programmerstellung langwieriger als am Notebook und somit war kein Vorteil gegeben.
Das reizvolle an der Aufgabe ist, dass du quasi eine SPS-Laufzeitumgebung in der SPS programmieren musst.
Du brauchst also Befehlscode, Statusregister und Datenregister und all der gleichen mehr
Mit SCL heute eine schöne Sache ... Wir haben es damals komplett in AWL umgesetzt.

Gruß
Dieter
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also ich halte das für sehr aufwendig was du da planst.
Im prinzip ist das ja wie einen Übersetzer schreiben.Einfach stelle ich mir das nicht vor.Vor allem schlecht pflegbar und erweiterbar.
Ich würde das eher mit Bildbausteinen machen.Das ganze muss ja auch gepflegt und erweitert werden.
Speicherplatz ist ja heute kein problem mehr.Also selbst wenn du hunderte solcher datensätze anlegst, wäre das kein problem.

Ich würde das mit Bildbausteinen machen.Ein Bildbaustein kriegt eine Funktion zugeordnet.Mithilfe einer Textliste wählst du dann ein Objekt(datensatz)
aus.Es wird dann ein Präfix übergeben.Verschiedene Funktionen bedeuten dann verschiedene Bildbausteine.Wenn man gleich alle Variablen in einem Datensatz unterbringt
holt man sich das raus was man braucht für das entsprechende Bildfenster.man kann auch schön Texte zuordnen pro Objekt.
Oder übersehe ich da was?Kraaaatz?

So in etwa lässt es sich schon lösen.
Bildbausteine brauchst du gar nicht viele. Es sei denn du willst eine Eingabe ala KOP / FUP.
Wenn du das ganze in Tabellenform machst, dann reichen Textlisten.

Gruß
Dieter
 
Bei dem Variablensatz allerdings Reserven lassen von allen Datentypen.Da ruhig großzügig sein.Frisst ja kein Brot.
Man kann auch wenn man das grafisch darstellt den Button mit der Tagnummer an das Objekt dranlegen, schreibt den Tagnamen drauf und kann mit show und hide das Fenster anzeigen oder schliessen.Da könnte man quasi dann direkt den datensatz dem Objekt zuordnen.Auch das geht.

Tagnummersysteme gibt es ja.ich kenne die aus der Verfahrenstechnik.Alles was im Feld irgendwo rumliegt kriegt ne Nummer+Buchstaben.Die Nummer taucht logischerweise wieder in der Variable auf.Man findet sie im Feld, in der Visu, im Schaltplan und im SPS-Programm.So macht es Sinn.

Bsp.TIRCSH 512=Temperature/Indication/Registration/Controlling/Switch at HighValue
 
Ich habe eine Aktions-Nr. und Parameter.
Also z.B. :
Code:
1 Pos. Flanke
2 Neg. Flanke
3 Timer
4 Schaltuhr

Dann gibt es z.B. 8 mal DWORD als Parameter.
Parameter 1 enthält die Adresse des Eingangsoperanten
Parameter 2 enthält die Adresse des Ausgangsoperanten
Bei Aktion 3 ist Parameter 3 eben die Zeitdauer.
Bei Aktion 4 ist Parameter 3 die Enschaltzeit und Parameter 4 die Ausschaltzeit.

Vor knapp 20 Jahren haben wir damit experimentiert, dass man für sehr einfache Maschinen das Programm im Prinzip am Panel eingeben kann.
Hat auch soweit funktioniert, nur war halt die Programmerstellung langwieriger als am Notebook und somit war kein Vorteil gegeben.
Das reizvolle an der Aufgabe ist, dass du quasi eine SPS-Laufzeitumgebung in der SPS programmieren musst.
Du brauchst also Befehlscode, Statusregister und Datenregister und all der gleichen mehr
Mit SCL heute eine schöne Sache ... Wir haben es damals komplett in AWL umgesetzt.

Gruß
Dieter

Der Ansatz gefält mir ganz gut. Werde mal versuche in den nächsten Wochen was zu Programmieren.
 
Wenn du nur einfache If-Then Anweisungen benötigst, bekommst du das noch relativ einfach erledigt. Wenn du auch komplexere Anweisungen benötigst, würde ich dir empfehlen dich vorher etwas in das Thema einzulesen. Auch wenn es mittlerweile fast 30 jahre alt ist, finde ich das Buch "Compilerbau" von Niklaus Wirth sehr gut für dein Einstieg. Außerdem ist es mit 60 Seiten äußerst kompakt, und es steht eigentlich alles drin was man benötigt um zumindest einen rudimentären Parser und Compiler zu schreiben.
Solche Probleme wie Klammersetzung oder Operandenvorrang (Punkt vor Strich z.B.) erledigen sich bei passendem Aufbau nämlich quasi von selber.
 
Zurück
Oben