rs-plc-aa
Level-1
- Beiträge
- 727
- Reaktionspunkte
- 57
-> Hier kostenlos registrieren
Hallo,
ich möchte ein ziemlich umfangreiches Programm so umbauen daß alle "Kernkomponenten" multiinstanzfähig werden...
Mein Ausgangspunkt ist nicht gerade günstig - alles direkt adressiert, FC calls im FB, direkte Global DB zugriffe usw.
Das Problem: Die ganze Sache neu machen is nich weil es ganz einfach viel zu lange dauern würde und weil ich die Logik als solches lassen möchte da das Programm ausgiebig getestet wurde und prima läuft (so lange es alleine auf einer CPU ist)
Nun sollen davon aber mehrere (variabel) Instanzen auf einer CPU laufen - und das möglichst schon gestern.
Am einfachsten wäre es natürlich die Bausteine unter anderen Nummern einzufügen und als solches zu lassen - wobei hier auch schon die ganzen Adressen von Hand nachgepflegt werden müssten und es eine absolute "Notkrücke" bleiben würde.
Die Idee der Multiinstanz ist zwar nicht neu aber die Umsetzung für mich schon ein wenig -> daher hoffe ich daß ihr mich nicht hängen lasst.
Es dreht sich im wesentlichen um ein Hauptprogramm das wie ein Tintenfisch aufgebaut ist (ich war jung und... ) und nun eine Schnittstelle verpasst bekommen soll die es mit der Aussenwelt verbindet.
Hier müssen digitale IOs, skalierte und rohe Messwerte, Meldebits, Merker und Störungsbits untergebracht werden.
Das mit der Peripherie ist kein Problem nur mit den Bits und den Unterprogrammen haperts noch.
Die Bits müssen aus der SymTabelle raus und in GDBs rein, ok.
Wie mache ich jetzt aber z.B einen Gesamtzugriff auf z.B. 32 Bits ?
Vorher habe ich eben das Doppelwort aus dem Adressbereich mit 0 überschrieben - aber wie geht das beim DB mit Symbolischem zugriff ?
Ich wollte Arrays definieren welche immer 32 Bits einer Sorte enthalten um entweder einzeln oder eben auf alle zugreifen zu können aber irgendwie schaff ich das nicht.
In der Hilfe steht nichts konkretes und hier habe ich zu Arrays zwar was gefunden aber das half mir jetzt so auch nicht weiter.
Das zweite ist das mit den Unterprogrammen.
Sehe ich das richtig daß alles was an die Schnittstelle des Unterprogramms übergeben werden soll auch in der Schnittstelle des Hauptprogramms enthalten sein muss ? Wird das nicht sehr aufgebläht ?
Und ist das überhaupt zu empfehlen ?
Wäre für Anregungen jeglicher Art sehr dankbar.
ich möchte ein ziemlich umfangreiches Programm so umbauen daß alle "Kernkomponenten" multiinstanzfähig werden...
Mein Ausgangspunkt ist nicht gerade günstig - alles direkt adressiert, FC calls im FB, direkte Global DB zugriffe usw.
Das Problem: Die ganze Sache neu machen is nich weil es ganz einfach viel zu lange dauern würde und weil ich die Logik als solches lassen möchte da das Programm ausgiebig getestet wurde und prima läuft (so lange es alleine auf einer CPU ist)
Nun sollen davon aber mehrere (variabel) Instanzen auf einer CPU laufen - und das möglichst schon gestern.
Am einfachsten wäre es natürlich die Bausteine unter anderen Nummern einzufügen und als solches zu lassen - wobei hier auch schon die ganzen Adressen von Hand nachgepflegt werden müssten und es eine absolute "Notkrücke" bleiben würde.
Die Idee der Multiinstanz ist zwar nicht neu aber die Umsetzung für mich schon ein wenig -> daher hoffe ich daß ihr mich nicht hängen lasst.
Es dreht sich im wesentlichen um ein Hauptprogramm das wie ein Tintenfisch aufgebaut ist (ich war jung und... ) und nun eine Schnittstelle verpasst bekommen soll die es mit der Aussenwelt verbindet.
Hier müssen digitale IOs, skalierte und rohe Messwerte, Meldebits, Merker und Störungsbits untergebracht werden.
Das mit der Peripherie ist kein Problem nur mit den Bits und den Unterprogrammen haperts noch.
Die Bits müssen aus der SymTabelle raus und in GDBs rein, ok.
Wie mache ich jetzt aber z.B einen Gesamtzugriff auf z.B. 32 Bits ?
Vorher habe ich eben das Doppelwort aus dem Adressbereich mit 0 überschrieben - aber wie geht das beim DB mit Symbolischem zugriff ?
Ich wollte Arrays definieren welche immer 32 Bits einer Sorte enthalten um entweder einzeln oder eben auf alle zugreifen zu können aber irgendwie schaff ich das nicht.
In der Hilfe steht nichts konkretes und hier habe ich zu Arrays zwar was gefunden aber das half mir jetzt so auch nicht weiter.
Das zweite ist das mit den Unterprogrammen.
Sehe ich das richtig daß alles was an die Schnittstelle des Unterprogramms übergeben werden soll auch in der Schnittstelle des Hauptprogramms enthalten sein muss ? Wird das nicht sehr aufgebläht ?
Und ist das überhaupt zu empfehlen ?
Wäre für Anregungen jeglicher Art sehr dankbar.