-> Hier kostenlos registrieren
Hallo Leute,
ich habe da ein Sinn-Problem.
In der Vergangenheit musste ich immer wieder viele FBs des gleichen Typs in meine Projekte kopieren.
Beispiel 30 Analogwerte (Scale Ober- und Untergrenze per Display einstellbar....), 10 Pumpen, 6 Spülkippen.
Der Arbeitsaufwand ist imens. 40 Analogwerte-Bausteine verdrahten und 40 Bilder im Display anlegen. 40-fache Variablen....
Ich bin deswegen dazu übergegangen keine FBs mit Multiinstanzen zu nutzen, sondern machte es folgendermassen:
Ich kann nochmal 40 Antriebe hinzufügen, indem ich den Array im DB von 1. einfach vergrößere. Ich muss sonst nichts beachten.
Selbst das Display muss ich bei dieser Vergrößerungaktion nicht beachten. Der Baustein unter 4. lässt nun einfach 40mal öfter den RechtsButton zu.
Nun kommt das Problem.Ich habe immer wieder Verbesserungen zu den Bausteinen oder Fehlerbehebungen, bei denen mir die Bibliotheken echt helfen würden, Stichpunkt Typisierung.
Aber: TIA mosert wegen meiner zwar Symbolischen, aber direkten Zugriffe auf Globale DBs unter 1.
Da hat es ja recht. Hübsch ist mein Programmierstil nicht.
Also habe ich die DB und die FCs alle zusammen in einen FB kopiert. Dann klappt die Typisierung sehr schön.
Allerdings verliere ich einen Vorteil:
Ich kann den Array nicht vergrößern oder verkleinern, ohne dass er mir eine neue Version draus macht.
Aber mein Archivbaustein, der es ermöglicht z.B. kWh oder m³ Impulse zu Archivieren (ein Jahr Tagesgenau, zwei Jahre monatlich und 10 Jahre jahressumme) muss sowieso sehr klein gehalten werden, denn er passt nur mit Müh und Not in den Speicher.
Neue Version heisst aber, wenn ich das nächste mal bei der Anlage bin muss ich beim Aktualisieren des Bausteins aufpassen, dass ich nicht vergesse ihn zu vergrößern oder zu verkleinern.
Meine Überlegung:
Es dreht sich im Kreise.
Hat jemand was ähnliches schon gemacht und kann mir eine Richtung geben?
Aksels
ich habe da ein Sinn-Problem.
In der Vergangenheit musste ich immer wieder viele FBs des gleichen Typs in meine Projekte kopieren.
Beispiel 30 Analogwerte (Scale Ober- und Untergrenze per Display einstellbar....), 10 Pumpen, 6 Spülkippen.
Der Arbeitsaufwand ist imens. 40 Analogwerte-Bausteine verdrahten und 40 Bilder im Display anlegen. 40-fache Variablen....
Ich bin deswegen dazu übergegangen keine FBs mit Multiinstanzen zu nutzen, sondern machte es folgendermassen:
- Ein Datenbaustein, der folgendes enthält: Array mit der benötigten Anzahl z.B. Analogwerte, darin alle Inputs Outputs, statische Variablen...
Weiterhin einmalig alles was alle Instanzen gemeinsam benötigen (Bei Pumpen z.B. SekundenimpulsFlankenMerker zum Zählen...) - Ein FC, der sich die Bausteinlänge holt, daraus die darin enthaltenen Instanzen errechnet und damit eine For-Schleife durchläuft, die für alle Antriebe oder Analogwerte etc. die Aufgaben abarbeitet.
- Noch ein FC, der die bequeme Zuordnung der Ein- und Ausgänge vornimmt (mit Eingang "Antriebsnummer")
- Ein weiterer FC übernimmt die Verwaltung der Anzeige auf dem Display. Im HMI habe ich nur ein Bild für alle 40 Analogeingänge. Mit Buttons für rechts links kann man den Analogeingang wählen (Daten werden von Array in ein AnzeigeDaten-Fach kopiert) und die zugehörigen Daten sehen und bearbeiten. Ein Speichern Button übernimmt die Werte in den Array.
Ich kann nochmal 40 Antriebe hinzufügen, indem ich den Array im DB von 1. einfach vergrößere. Ich muss sonst nichts beachten.
Selbst das Display muss ich bei dieser Vergrößerungaktion nicht beachten. Der Baustein unter 4. lässt nun einfach 40mal öfter den RechtsButton zu.
Nun kommt das Problem.Ich habe immer wieder Verbesserungen zu den Bausteinen oder Fehlerbehebungen, bei denen mir die Bibliotheken echt helfen würden, Stichpunkt Typisierung.
Aber: TIA mosert wegen meiner zwar Symbolischen, aber direkten Zugriffe auf Globale DBs unter 1.
Da hat es ja recht. Hübsch ist mein Programmierstil nicht.
Also habe ich die DB und die FCs alle zusammen in einen FB kopiert. Dann klappt die Typisierung sehr schön.
Allerdings verliere ich einen Vorteil:
Ich kann den Array nicht vergrößern oder verkleinern, ohne dass er mir eine neue Version draus macht.
Aber mein Archivbaustein, der es ermöglicht z.B. kWh oder m³ Impulse zu Archivieren (ein Jahr Tagesgenau, zwei Jahre monatlich und 10 Jahre jahressumme) muss sowieso sehr klein gehalten werden, denn er passt nur mit Müh und Not in den Speicher.
Neue Version heisst aber, wenn ich das nächste mal bei der Anlage bin muss ich beim Aktualisieren des Bausteins aufpassen, dass ich nicht vergesse ihn zu vergrößern oder zu verkleinern.
Meine Überlegung:
- In einem FB habe ich es aufgegeben mittels Konstanten oder ähnlichem Dynamisch zu werden. Es wird immer eine neue Version, wenn er typisiert ist.
- Ich kann einen Struct typisieren, der den Array in dem Globalen DB dynamisch verändert.
- Dem typisierten Bearbeitungsbaustein gebe ich dann die DB-Nummer als Int-Eingang.
- Aber wenn ich dann auf den DB zugreife wird es ja noch schlimmer. Da man erst zur Laufzeit weiss welcher DB da wirklich anliegt, zeigt mir TIA keine Vorschläge mehr an wärend ich die Variablen tippe. Mies.
- Ich habe mir schon überlegt, ob ich einen DB-Zugriffsbaustein erstelle. Dem gebe ich an den Eingängen mit, wieviele Instanzen und wieviele Daten darin ich brauche. Dann kann er den DB beim ersten Start sogar selber erzeugen. Zugriffe sind dann eben sehr unkomfortabel, nur über Zahlen. Das ginge noch. Aber für jeden benötigten Typ ein eigener Anzahl-Eingang? Wie baue ich den DB dann blind zusammen, ohne Struct, Datentyp oder sonstiges....
Es dreht sich im Kreise.
Hat jemand was ähnliches schon gemacht und kann mir eine Richtung geben?
Aksels