Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 31

Thema: Strukturprobleme Multiinstanz ...

  1. #1
    Registriert seit
    07.11.2004
    Beiträge
    697
    Danke
    69
    Erhielt 64 Danke für 48 Beiträge

    Standard


    Zuviel Werbung?
    -> 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.
    RS (rs-plc-aa)
    ______________________________________________
    Morgen ist Heute Gestern...
    ______________________________________________
    Installierst du noch - oder Arbeitest du schon ?
    ______________________________________________
    Zitieren Zitieren Strukturprobleme Multiinstanz ...  

  2. #2
    Registriert seit
    25.09.2005
    Ort
    Neuss
    Beiträge
    278
    Danke
    11
    Erhielt 31 Danke für 29 Beiträge

    Standard

    Zitat Zitat von rs-plc-aa Beitrag anzeigen
    ...

    Es dreht sich im wesentlichen um ein Hauptprogramm das wie ein Tintenfisch aufgebaut ist

    ????
    Zitat Zitat von rs-plc-aa Beitrag anzeigen
    ...
    Die Bits müssen aus der SymTabelle raus und in GDBs rein, ok.
    Kann, man, muss man aber nicht - kommt immer drarauf an, was man wie machen möchte - hat aber nix mit Multiinstanzen zu tun und ist auch nicht Vorraussetzung für diese.


    Zitat Zitat von rs-plc-aa Beitrag anzeigen
    ...

    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.
    Hier könnten wir denke ich mal besser helfen, wenn Du mal ein paar Code-Ausschnitte postest (Multiinstanz, oder nicht) und beschreibst, wann konkret klemmt.

    Zitat Zitat von rs-plc-aa Beitrag anzeigen
    ...
    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 ?
    So ganz habe ich es nicht verstanden. Vielleicht ist aber das gemeint:
    Also beim Aufruf müssen nicht alle IN, INOUTs, oder OUTs beschrieben werden - die INs werden halt beim ersten Mal mit ihren Initalwerten beschrieben und die bleiben auch so, bis sie überschrieben werden.

    Du kannst Dir auch mal hier ansehen, wie so eine Multiinstanzaufruf aussieht: http://www.automatisierungsprofi.de/TON/index.htm

    Zitat Zitat von rs-plc-aa Beitrag anzeigen
    ...
    Und ist das überhaupt zu empfehlen ?
    Auch das kommt wieder daruf an, was man haben möchte. Es gibt auf dieser Welt leider nichts, was nur Vorteile hat oder bringt. Der Vorteil ist halt, dass man Multiinstanzen, wenn man sie ordentlich programmiert gut wiederverwenden kann - wenn man keine globalen Variablen (Symboltabelle) beenutzt hat, sondern nur mit Lokalen- und Instanzdaten auskommt.

    Für die Erstellung eine Biblitohek (das sind ja meistens Bausteine drin, die universell einsetzbar sein sollen), macht es schon Sinn Instanzbausteine zu erzeugen.

  3. #3
    Avatar von rs-plc-aa
    rs-plc-aa ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    07.11.2004
    Beiträge
    697
    Danke
    69
    Erhielt 64 Danke für 48 Beiträge

    Standard

    Zitat Zitat von HeizDuese Beitrag anzeigen
    ????
    Der Vorteil ist halt, dass man Multiinstanzen, wenn man sie ordentlich programmiert gut wiederverwenden kann - wenn man keine globalen Variablen (Symboltabelle) beenutzt hat, sondern nur mit Lokalen- und Instanzdaten auskommt.

    Für die Erstellung eine Biblitohek (das sind ja meistens Bausteine drin, die universell einsetzbar sein sollen), macht es schon Sinn Instanzbausteine zu erzeugen.
    Genau hierum geht es...

    Das mit dem Tintenfisch war übrigens als Metapher gemeint um die Verzweigung in andere Bausteine hinein zu umschreiben...

    Vielleicht bin ich auch nicht genau genug auf den Punkt gekommen aber ich möchte hier noch mal die Frage neu stellen:

    Wenn ich jetzt das stehen habe:

    Code:
    U DB100.dbx0.0
    = A0.0
     
    und z.B.
     
    L 0
    T DB100.DBD0
    Und nachher möchte ich das haben:

    Code:
    U #Bits.Bit0
    = ...
     
    oder
     
    L 0
    T #Bits.erste32Bits
    Also z.B. die Nummer des DB als VARINPUT und die einzelnen Bits beim Namen nennen oder auch beim Rücksetzen alle Bits auf einmal löschen mit einem Lade/Transferierbefehl.

    Frage: Brauche ich hierfür im DB100 ein Array of BOOL oder geht das auch ohne ?
    Der syb. Zugriff auf die Bits geht ohne Array auch - nur der Gesamte nicht da ich ja im DB die verwendete Adresse nur ein mal vergeben kann.

    Die zweite Frage hat sich erledigt da es ja nicht anders gehen wird als die Parameter die das Unterprogramm benötigt über die Schnittstelle des Hauptprogramms zu übergeben...
    RS (rs-plc-aa)
    ______________________________________________
    Morgen ist Heute Gestern...
    ______________________________________________
    Installierst du noch - oder Arbeitest du schon ?
    ______________________________________________

  4. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.262
    Danke
    537
    Erhielt 2.707 Danke für 1.956 Beiträge

    Standard

    "Symbolisch" über # wird das wohl nicht gehen, denke ich.

    Du könntest mit

    AUF DB[DB_Nr]
    U DBX0.0
    ...

    arbeiten, aber das ist auch nicht immer fein.

    Wenn die Daten im Instanz-DB liegen kannst du auch auf die Instanzdaten zugreifen

    L 0
    T DIW 0

    Dazu muß dir bekannt sein, wo die Daten im Instanz-DB denn genau liegen.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  5. #5
    Avatar von rs-plc-aa
    rs-plc-aa ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    07.11.2004
    Beiträge
    697
    Danke
    69
    Erhielt 64 Danke für 48 Beiträge

    Standard

    OK, noch mal eine Korrektur:

    Der Code den ich schrieb war falsch.

    Ich habe im Instanz DB (also in der Schnittstelle des FB) Variablen deklariert.

    Zum einen eine ganze Reihe von Bits die im FB mit #Bit0 angesprochen werden und für diese Bits jeweils für 32 Stück eine DWORD Variable die im Falle eines Tranferierens einer 0 alle ihr zugeordneten Bits "löschen" soll.

    Beim Aufruf der Instanz im OB1 muss die Schnittstelle ja versorgt werden -> hier kommt ja eigentlich erst der DB ins Spiel der die Bits enthält...

    Also gebe ich dort an daß #Bit0 := DB100.DBX0.0 ist bzw. sein soll.

    Soweit schon klar aber das DWORD aus dem FB kann ich eben nur "absolut" also mit DB100.DBD0 zuweisen da im DB100 unter der Adresse 0* eben die BOOL Variablen stehen und es gleichzeitig keine Variable vom Typ DWORD mit der Anfangsadresse 0 geben kann.

    Hier war meine Frage ob es geht wenn ich ein Array definiere das dann meine DWORD Variable ist und Ihm untergeordnet im gleichen Adressbereich die Bits zu finden sind.

    Da ich 0 Ahnung von Arrays habe weiss ich nicht wie ich das sonst noch formulieren soll...
    RS (rs-plc-aa)
    ______________________________________________
    Morgen ist Heute Gestern...
    ______________________________________________
    Installierst du noch - oder Arbeitest du schon ?
    ______________________________________________

  6. #6
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.262
    Danke
    537
    Erhielt 2.707 Danke für 1.956 Beiträge

    Standard

    Mit dem Array, das geht so nicht, glaube ich jedenfalls .

    Alle INPUT, OUTPUT etc. sind doch im Instanz-DB enthalten.

    Du kannst einmal auf die definierten Variablen über #... zugreifen und ebenso direkt auf das DIW zugreifen. Wenn also deine Bits im Instanz-DB die Bits 100.0, 100.1, 100.2 .... belegen solltest du sie alle mit L 0 T DIW 100 loschen können. Hab das auch noch nie so gemacht, probiers doch mal aus.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  7. #7
    Registriert seit
    28.06.2006
    Ort
    Königreich Neuseeland
    Beiträge
    2.027
    Danke
    133
    Erhielt 96 Danke für 76 Beiträge

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    Mit dem Array, das geht so nicht, glaube ich jedenfalls .

    Alle INPUT, OUTPUT etc. sind doch im Instanz-DB enthalten.

    Du kannst einmal auf die definierten Variablen über #... zugreifen und ebenso direkt auf das DIW zugreifen. Wenn also deine Bits im Instanz-DB die Bits 100.0, 100.1, 100.2 .... belegen solltest du sie alle mit L 0 T DIW 100 loschen können. Hab das auch noch nie so gemacht, probiers doch mal aus.
    Bei direktem Zugriff auf Instanzdaten gibts aber den unschönen Effekt, das bei Änderungen des FB (z.B. neuer Eingangsoperand) sich alle darauf folgenden Adressen verschieben...

    Das sind dann die direkten Zugriffe auch alle falsch...

  8. #8
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.262
    Danke
    537
    Erhielt 2.707 Danke für 1.956 Beiträge

    Standard

    @ug

    Richtig, man kann ebend nicht alles haben. Gibt ja vielleicht noch eine schönere Methode, kenne aber im Moment nichts anderes.

    Ich mag Instanz-DB genau aus diesem Grund überhaupt nicht. Auch eine Fehlersuche in Multiinstanzen mit mehreren FB-Aufrufen (möglichst noch die gleichen FB) ist ein super Katastrophen-Szenario.
    Man könnte natürlich die betreffenden Daten in einem extra DB ablegen, jeder Aufruf des FB bekommt noch zusätzlich diesen DB mit. In dem kann man dann ohne Angst vor Verschiebungen arbeiten.
    Geändert von Ralle (09.02.2007 um 17:19 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  9. #9
    Avatar von rs-plc-aa
    rs-plc-aa ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    07.11.2004
    Beiträge
    697
    Danke
    69
    Erhielt 64 Danke für 48 Beiträge

    Standard

    Genau um das zu verhindern möchte ich es ja so machen...

    Der DB100 ist nicht mein InstanzDB sondern ein Global DB der quasi ein Abbild der Struktur enthält.

    Im FB selbst wird nur auf die in der Schnittstelle deklarierten Variablen zugegriffen. Diese Variablen werden von aussen beim Aufruf im OB versorgt.

    Wenn an der Schnittstelle des FB was geändert wird so hat das keine Auswirkung aud den GlobalDB da im OB bei der Deklaration "nur" eine Lücke entsteht die dann wieder versorgt werden muss.

    Auch möchte ich von anderen Bausteinen aus auf diese Daten zugreifen daher halte ich es für besser sie neutral zu speichern.

    Bei Lese+Schreibzugriff sind das natürlich Durchgangsparameter.

    Worauf ich also hinaus möchte ist wie ich den GlobalDB strukturiere.

    Hier können z.B. sehr wohl Lücken mit Dummys belegt werden um später an einer bestimmten Stelle was einfügen zu können.

    Zur besseren Übersicht habe ich schon Unterstrukturen erstellt aber immer bleibt das Problemchen übrig daß es keine Möglichkeit gibt eine "Gruppe" von Bits noch mal mit einer übergeordneten DWORD-Variable zu definieren --> ausser eben vielleicht mit einem Array - und das weiss ich nicht wie man eines erstellt das so aussieht:

    Code:
    +0.0 Array1 DWORD [adressiert von 0.0-3.7]
     +0.0 Bit0 BOOL
     +0.1 Bit1 BOOL
    ...
     +3.7 Bit32 BOOL
     
    +4.0 Array2 DWORD [adressiert von 4.0-7.7]
     +4.0 Bit33 BOOL
    ...
    RS (rs-plc-aa)
    ______________________________________________
    Morgen ist Heute Gestern...
    ______________________________________________
    Installierst du noch - oder Arbeitest du schon ?
    ______________________________________________

  10. #10
    Registriert seit
    28.06.2006
    Ort
    Königreich Neuseeland
    Beiträge
    2.027
    Danke
    133
    Erhielt 96 Danke für 76 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von rs-plc-aa Beitrag anzeigen

    Auch möchte ich von anderen Bausteinen aus auf diese Daten zugreifen daher halte ich es für besser sie neutral zu speichern.
    Das ist IMHO ein vernünftiger Gedanke.


    Zitat Zitat von rs-plc-aa Beitrag anzeigen

    Worauf ich also hinaus möchte ist wie ich den GlobalDB strukturiere.
    Knapp gesagt: gar nicht !
    Welche Struktur sollte er denn haben ?
    Die der FB ist doch unnötige Arbeit.

    Setzt die Struktur des Global DB so, wie es für das Programmverständniss am sinnvollsten ist, eigendlich "frei Schnautze".

    Wenn du deine Parameter über Globalen DB (oder auch Merkerbereich...) anbindest, dann hast du ja den Vorteil der "wilkürlichen" Variablenbelegung.

    Du kannst z.B. einen DB-Bereich für einen Anlagenteil nehmen.

    Lass etwas Reserve zwischendrinn, und die Sache passt.

    Die Globalstruktur an die FB - Struktur anzupassen macht IMHO keinen Sinn!
    Dann kann man den GlobalDB ja gleich weg lassen....

Ähnliche Themen

  1. Multiinstanz in SCL
    Von godi im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 08.03.2015, 19:59
  2. TIA V11 SCL TON Multiinstanz
    Von MrEASY im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 04.03.2013, 15:17
  3. Multiinstanz
    Von focus81 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 25.05.2010, 14:27
  4. Multiinstanz
    Von bluebird277 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 11.10.2008, 12:00
  5. Multiinstanz
    Von godi im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 01.05.2006, 20:31

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •