TIA Codegenerierung (KOP/FUP) mit TIA Openness

Jochen Kühner

Level-3
Beiträge
4.291
Reaktionspunkte
527
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

wir nutzen die Openness Schnittstelle, um KOP FUP zu Generieren. Die XML Syntax ist ja aber recht Komplex. Wir haben das nun mit Hilfsklassen und einem Parser gelöst, wollte nur mal wissen, wie macht das der Rest hier so?
 
Habe mal den Parser von Siemens verwendet, dieser befindet sich im OpennessHelper z.B. in der OpennessDemo. Zusätzlich gibt es noch Schema files (xsd) im PublicApi Verzeichnis, aber meiner Meinung nach ist das Ganze zu komplex für eine vollständig generische Lösung...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wi haben jetzt z.B. folgenden Code:

Code:
	nw = new Network("Konturenfehler zurücksetzen");	
	nw.Add(new And(new Not(new Signal("#PlaceData.MOrder.DataPresent")),
		new Distributor(
			new Move(
				new Signal("#PlaceData.ContourErrors"),
				new Signal("XXXXData.ContourErrors")
			),
			new Move(
				new Signal("#LengthPositiv"),
				new Signal("#LengthNegativ"),
				new Signal("#WidthPositiv"),
				new Signal("#WidthNegativ"),
				new Signal("#Height"),
				new Signal("0", SignalType.ConstantInt)
			),
			new Move(
				new Signal("#BottomPanelControl"),
				new Signal("#InitBottomPanelControl")
			),
			new Move(
				new Signal("#ForkFreeSpace"),
				new Signal("#InitForkFreeSpace")
			)
		)));
	nw.Add(new RTrigCall("StartContourCheckTrig", new Signal("#startContourCheck", SignalType.Bool)));
	nw.Add(new And(new Signal("#StartContourCheckTrig.Q"),
			new Move(
				new Signal("#PlaceData.MOrder.MlogData.LELength"),
				new Signal("0", SignalType.ConstantInt)
			)));
	block.Add(nw);

Der erzeugt dann folgenden Baustein:

Bildschirmfoto 2018-07-13 um 21.30.28.jpg

Aber das es da nichts von Siemens gibt...

Wir hatten vorher versucht nur XML Templates zu verwenden, das wird aber so komplex, und überall heißen die Eingänge anders, du brauchst noch ne info, ... das war mit AWL schon einfacher
 
@Jochen

Der Code sieht komplizierter aus als der erzeugte Code, bringt das dann noch einen echten Nutzen?
 
Versuch mal den Code als XML zu erzeugen, dann bin ich mal gespannt ob das einfacher ist!

Problem ist, wir wollen KOP / FUP erzeugen, nicht scl
 
Das XML wird ganz schön komplex wenn man auch noch Funktionsaufrufe, en und eno, vergleicher,... hat
Da ist mein Code zwar auch nicht so einfach, aber vorher hatten wir es direkt versucht, also direkt xml auszuplotten, das hat nicht geklappt, da du je nach der vorigen Anweisung mal was anderes tun musst.

Wollte nur wissen, nutzt das außer mir (bzw unserer Firma) überhaupt jemand? Oder erzeugt jeder nur SCL?
Ich finde halt Kop bzw Fup ist für Servicezwecke schöner. Zumindest wenn in dem Baustein hauptsächlich Bits verknüpft werden!
 
Wi haben jetzt z.B. folgenden Code:
Aber das es da nichts von Siemens gibt...

Wir hatten vorher versucht nur XML Templates zu verwenden, das wird aber so komplex, und überall heißen die Eingänge anders, du brauchst noch ne info, ... das war mit AWL schon einfacher

Wie gesagt, kuck dir mal den XMLParser von Siemens an. Im Detail habe ich den nie getestet, aber vl ist der ja was für dich. Ich habe ehrlich gesagt die generische Erstellung von Code mit Openness aufgegeben. :ROFLMAO:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Den hab ich mir auch schon angesehen, da ist ja nichts drin um die Logik auszulesen oder zu generieren. Das interessante sind ja die Parts und Wires...

Ich hab ja schon ne Lösung, da ich es aber sehr kompliziert fand was ich entwerfen musste, wollte ich wissen wie der rest im Forum hier KOP/FUP in TIA generiert!
 
Gibt es irgendwo eine Beschreibung der XML Struktur für KOP/FUP? Oder gibt es eine C# Klasse die man in einer entsprechenden XML Datei serialisieren könnte?
Danke im Voraus.
 
Nö nicht das ich wüsste.
Man muss einfach KOP/FUP Netzwerke exportieren und das XML was dabei rauskommt anschauen.

Die Frage ist ja eher wie modeliert man seine Klassen um das richtige XML zu erzeugen.

Ist auf jeden Fall komplizierter als früher die AWL Syntax zu generieren.

Bei uns Fällt auch immer mal wieder ne Kleinigkeit auf die man vergessen hat...
 
Danke für die Info und für das Link!
Und eine allgemeinere Frage: benutzt ihr die Siemens.Engineering DLL auch in .NET Standard kompatiblen Bibliotheken? Ich habe festgestellt dass wenn die TIA Opennenss DLL aus einer .NET Core basierten Anwendung referenziert wird, dann wird beim Starten der Anwendung eine Ausnahme geworfen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wir haben uns dann Hilfsklassen gebaut um z.B. so KOP Code zu erzeugen:

Code:
	nw = new Network("Daten Platz " + place.Name + " löschen");
		
		var akAnd = new And(
			new Signal(place.Name + "Data.MOrder.DataPresent"),
			new Not(new Signal(place.Name + "Place.Signals.PlaceOccupied")),
			new Signal(place.Name + "Place.OperationMode.AutomaticMode"),
			new Not(new Signal(place.Name + "Place.Signals.MoveLock")),
			new Not(new Signal(place.Name + "Data.MOrder.SendRequest.SYSABO")));
					
			akAnd.Children.AddRange(MoveHelper.MovesToSignalArray(place.Moves, true));		
			
			akAnd.Children.Add(new TONCall("DelayDeleteData",
				pt: new Signal("T#10S", SignalType.ConstantTime),
				q:  new SCoil(new Signal(place.Name + "Data.MOrder.SendRequest.SYSABO"))
				)
			);
		nw.Add(akAnd);
 
Ich habe mich damit auch schon beschäftigt, aber habe es dann wieder aufgegeben, als ich gesehen habe, wie SCL in eine XML Datei verschachtelt wird.

Unter https://support.industry.siemens.com/cs/ch/de/view/109755218 gibt es eine "Beschreibung" des XML Aufbaus.

Des weiteren gibt es XSD Shema Beschreibungen im Installationspfad.

Falls jemand es schafft die XSD Datei in C# Klassen zu verwandeln, mit denen man auch noch arbeiten kann, wäre ich um jeden Hinweis dankbar.

Manchmal Frage ich mich wirklich, ob Siemens das absichtlich so unübersichtlich/undurchschaubar wie nur möglich macht.
 
Danke für die Infos.

@inspectorgadjet: Theoretisch kann man aus xsd Dateien mit xsd.exe (kommt mit Visual Studio) C# Klassen generieren.

@Jochen Kühner: Aktuell fast alle .NET Klassenbibliotheken die man auf github so findet sind .Netstandard kompatibel. Hoffentlich zieht auch Siemens mit Openness nach.
Danke für den Code-Snippet. Habt ihr die Hilfsklassen aus xsd generiert ? Handelt es sich um eine Open-Source Implementierung?
 
@Jochen Kühner: Ich habe nochmals den Code-Beispiel mir angeschaut. Ihr habt Hilfsklassen erstellt um den Zusammenbau von KOP Operationen (And, Not, ...) und PLC Tags/Globalen Variablen in CompileUnits zu abstrahieren. Könntest du bitte noch ein paar Details geben, wie ihr das aufgebaut habt?
 
@Jochen Kühner: Aktuell fast alle .NET Klassenbibliotheken die man auf github so findet sind .Netstandard kompatibel. Hoffentlich zieht auch Siemens mit Openness nach.
Danke für den Code-Snippet. Habt ihr die Hilfsklassen aus xsd generiert ? Handelt es sich um eine Open-Source Implementierung?

Ja aber wozu im Moment? Solange TIA noch auf FullFarmework setzt wozu wird das dann benötigt?
 
Zurück
Oben