TIA nach Codesys

Blackforest

Level-2
Beiträge
109
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Abend

Ich habe in TIA eine große Funktionssammlung die ich jetzt in Codesys verwenden wollte.

Deshalb mal vorab

Kann man bei den Globalen Variablen keine leerzeichen verwenden

1. Leerzeichen
z.B Text "E0.0 Hauptschalter Zulaufpumpwerk" muß ich immer E0_0_Hauptschalter_Zulaufpumpwerk also mit _ schreiben
oder gibt es da eine Einstellung ?

2. Datenbausteine

Siemens hat ja Datenbausteine , kann man so auch etwas bauen oder geht das nur mit den Merkern ???
 
Kann man bei den Globalen Variablen keine leerzeichen verwenden
Weder bei globalen noch bei allen anderen Variablen, Strukturen, ENUMS, usw., aber das ist nicht nur bei Codesys und seinen Derivaten so.
2. Datenbausteine

Siemens hat ja Datenbausteine , kann man so auch etwas bauen oder geht das nur mit den Merkern ???
Hier solltest Du die Doku gründlich studieren um die Konzepte von Codesys und seinen Derivaten zu verstehen. Soweit ich das Siemens-Konzept noch richtig im Kopf habe werden DBs unter anderem für die Variablen und Schnittstellen von FBs verwendet. Immer wenn man einen FB instanziert wird auch ein DB angelegt das nennt sich dann, meine ich, Instanz-DB und jeder DB bekommt eine eigene Nummer. Eine andere Alternative ist dann die Lokal-Instanz dort werden die Variablen und Schnittstellen des FBs im Deklarationsteil (DB) des aufrufenden FBs aufgeführt.
Bei Codesys gibt es diese Trennung von FB und Daten nicht, wobei ich auch ehrlichgesagt nicht den Vorteil dieser Methode bei Siemens sehe. Bei Codesys hat jede Instanz eines FBs automatisch seine Schnittstelle und Variablen an Bord.
Was ich nicht verstehe ist, warum Umsteiger von Siemens das DB Konstrukt in Codesys immer mit globalen Variablen nachbilden wollen. Mal abgesehen von globalen DBs haben die doch eine völlig andere Funktion als globale Variablen. Oder übersehe ich da was.

Von irgendwas mit Internetzugang gesendet
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was ich nicht verstehe ist, warum Umsteiger von Siemens das DB Konstrukt in Codesys immer mit globalen Variablen nachbilden wollen. Mal abgesehen von globalen DBs haben die doch eine völlig andere Funktion als globale Variablen. Oder übersehe ich da was.

Es gibt eben unterschiedliche Programmierstile und Anwendungsfälle.
Die Trennung von Instanz und Daten hat bei Siemens den Vorteil bei Online-Änderungen.
Bei S7-Classic war hier doch meist deutlich mehr möglich, als bei Codesys.
Mit TIA und dem leidigen Reinitialisieren nähern sich hier die Systeme an.

Gruß
Blockmove
 
Wenn man unbedingt möchte, kann man auch in Codesys Daten und Code trennen, indem man Datenstrukturen im Programm instanziiert und sie den FBs als VAR_IN_OUT übergibt. Wenn man die Daten global deklariert, spart man sich die Übergabe an die FBs, aber dann können natürlich Hinz und Kunz darauf zugreifen. Genau das will Codesys mit der Kapselung der Daten in den FBs verhindern. Für die Neuentwicklung sollte man dann auch dieses Konzept verfolgen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
könntest Du mal bitte erläutern was Du Damit meinst?

Füge ich bei Siemens z.B. in einem FB weitere Instanz-Variablen hinzu, dann müssen die Instanz-DBs neu erzeugt und zusammen mit dem FB in die Steuerung übertragen werden.
Beim Übertragen werden die Aktualwerte der Instanzen überschrieben. So was macht bei laufender Anlage natürlich Ärger.
Habe ich die prozessrelevanten Daten in einem globalen Datenbereich, dann sind solche Änderungen bei laufender Anlage möglich.
Wichtig ist sowas z.B. bei chem. Industrie, Energie- und Wasserversrgung.

Gruß
Blockmove
 
Ohje

Eigentlich möchte ich keine Instanz FB anlegen sondern nur DB s auf die jeder Baustein im Programm drauf zugreifen kann.

z.B habe ich einen DB Array 0..500 welcher eigentlich nur die Eingänge spiegelt
programmtechnisch greife ich auf diesen DB zu und kann den Eingang drehen (invert=true im Programm) oder ich mache einen Zähler draus (zaehler=true im Programm)
oder ganz einfach stoerung = true und die Sammelstörung weiß daß sie blinken darf.
Also die ganzen Eingänge liegen im DB gefiltert


[TABLE="width: 482"]
[TR]
[TD][/TD]
[TD]Array[0..500] of Struct[/TD]
[TD][/TD]
[/TR]
[TR]
[TD][/TD]
[TD]E[0][/TD]
[TD]Struct
[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]Text[/TD]
[TD]String[50]
[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]Text_kurz[/TD]
[TD]String[10][/TD]
[/TR]
[TR]
[TD][/TD]
[TD]REA[/TD]
[TD]Bool[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]VEA[/TD]
[TD]Bool
[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]invert[/TD]
[TD]Bool[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]Einschaltverz[/TD]
[TD]Bool[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]Ausschaltverz[/TD]
[TD]Bool[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]Impuls[/TD]
[TD]Bool[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]Stoerung[/TD]
[TD]Bool[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]unbedingt_melden[/TD]
[TD]Bool[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]Zaehler[/TD]
[TD]Bool[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]Stoerung_quittiert[/TD]
[TD]Bool[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]Stoerung_gesetzt[/TD]
[TD]Bool[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]Soll_T_Verz_ein[/TD]
[TD]Int[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]Soll_T_Verz_aus[/TD]
[TD]Int[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]Soll_T_Impuls[/TD]
[TD]Int[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]Ist_T_Verz_ein[/TD]
[TD]Int
[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]Ist_T_Verz_aus[/TD]
[TD]Int[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]Ist_T_Impuls[/TD]
[TD]Int[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]int_Auto_Nr[/TD]
[TD]Int[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]int_Fern_Nr[/TD]
[TD]Int[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]int_Pegel_Nr[/TD]
[TD]Int[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]int_Pegel_zu_Nr[/TD]
[TD]Int[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]int_Res_Nr[/TD]
[TD]Int[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]int_Hand_zu_Nr[/TD]
[TD]Int[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]int_Hand_auf_Nr[/TD]
[TD]Int[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]int_Hand_Stop_Nr[/TD]
[TD]Int[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]int_Stoerung_Nr[/TD]
[TD]Int[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]int_Betr_Nr[/TD]
[TD]Int[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]int_Oertl_Nr[/TD]
[TD]Int[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]int_Stop_Nr[/TD]
[TD]Int[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]int_ist_auf_Nr[/TD]
[TD]Int[/TD]
[/TR]
[TR]
[TD][/TD]
[TD]int_ist_zu_Nr[/TD]
[TD]Int
[/TD]
[/TR]
[TR]
[TD][/TD]
[TD][/TD]
[TD]end_struct
[/TD]
[/TR]
[/TABLE]

Deshalb gibt es eigentlich nur DB oder wie löst ihr das in Codesys ???
 
Sowas kannst du in Codesys auch in Globalen Variablen ablegen.

Wenn du Codesys 3.x nimmst, dann solltest du dir auch mal die Objektorientierte Programmierung anschauen.
Ich denkmal, dein Ansatz lässt sich damit schön umsetzen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke mal

guter Ansatz, werd mich da mal einlesen, denke da komm ich weiter

Zu meiner ersten Frage noch

1. Leerzeichen
z.B Text "E0.0 Hauptschalter Zulaufpumpwerk" muß ich immer E0_0_Hauptschalter_Zulaufpumpwerk also mit _ schreiben
oder gibt es da eine Einstellung ?

Gehen wirklich keine Leerzeichen
 
Zu meiner ersten Frage noch

1. Leerzeichen
z.B Text "E0.0 Hauptschalter Zulaufpumpwerk" muß ich immer E0_0_Hauptschalter_Zulaufpumpwerk also mit _ schreiben
oder gibt es da eine Einstellung ?

Gehen wirklich keine Leerzeichen
Das Problem ist, dass Siemens außerhalb der Norm solchen Scheiß zugelassen hat.
Leerzeichen und andere Sonderzeichen außer _ haben in Variablen-Namen einfach nichts zu suchen.
E0_0_ geht zwar, ist aber auch nicht wirklich hilfreich. :rolleyes:

Der Wutbürger
 
Wie macht ihr dann das ?

Da ich keine Nähmaschinen Programiere mit 16 Eingängen, sondern Großanlagen mit bis zu 2000 Eingängen muß ich ja alle Eingänge überarbeiten
von Hand !!!!!!!!!!!!!! Da ich ja die Eingänge in der variablentabelle beschreiben muß.

Für mich ist es einfacher die EA Liste direkt aus dem Eplan zu kopieren und einzufügen
 
Füge ich bei Siemens z.B. in einem FB weitere Instanz-Variablen hinzu, dann müssen die Instanz-DBs neu erzeugt und zusammen mit dem FB in die Steuerung übertragen werden.
Beim Übertragen werden die Aktualwerte der Instanzen überschrieben. So was macht bei laufender Anlage natürlich Ärger.
Habe ich die prozessrelevanten Daten in einem globalen Datenbereich, dann sind solche Änderungen bei laufender Anlage möglich.
Wichtig ist sowas z.B. bei chem. Industrie, Energie- und Wasserversrgung.

Gruß
Blockmove
Die Probleme gibt es bei Codesys nur, wenn kein Online-Change möglich ist, was bei V3 fast immer möglich ist und bei V2 in den meisten Fällen. Wo man allerdings höllisch aufpassen muss ist bei Pointern, aber da gibt Codesys beim Online-Change ja eine Warnung aus.

Von irgendwas mit Internetzugang gesendet
 
Ich würde auch den Umweg über Excel wählen...

Symboltabelle exportieren, in Excel importieren; Alle Merker über VERKETTEN, LINKS, RECHTS, etc. so bearbeiten, dass die nachher in die GVL passen, die Eingänge zu Pragmas verketten und eine andere GVL als Ein-/Ausgänge einfügen. Ist zwar etwas Arbeit, aber besser, als das Ganze mit der Hand anzulegen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ein Funktionsblock wird definiert. Um ihn zu verwenden, braucht es eine Instanz, daher eine Deklaration wie eine Variable. Daher kann es auch 2 oder mehr Instanzen geben. Du kannst auch ein Array von einem FB instanzieren. Das ist nützlich, wenn du z.B. 10 Umformer hast. Die Variablen einer Instanz sind dann statisch, daher gehen nicht verloren, wenn die Ausführung beendet ist. Du kannst dann auch direkt IO in den FB koppeln. Das ist nützlich wenn du Sensorwerte konvertieren musst.

Weil ein FB ein Objekt ist, kannst du natürlich auch ein FB in einem FB instanzieren.
 
Zurück
Oben