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

Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 29 von 29

Thema: [SCL] IN1, IN2, .., INX indirekt adressieren ?

  1. #21
    Registriert seit
    06.10.2003
    Beiträge
    3.403
    Danke
    447
    Erhielt 502 Danke für 406 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Oh, iss ja gar nicht so schlimm mit den Ressourcen. Ich hatte das irgendwie anders in Erinnerung. Aber ich finde es gut dass wir mal darüber gesprochen haben .
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  2. #22
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.616
    Danke
    377
    Erhielt 799 Danke für 642 Beiträge

    Standard

    Warum kann man nicht den 'normalen' Verfahren verwenden, d.h. je 'Objekt' ein FB Aufruf mit ein IDB. Ob da 50-100 FB Aufrufe gibt mit je ein IDB, geht das programmieren einfach und schnell wenn man den Symbolik so erstellt hat das man den E/A Schnell durch suchen-und-ersetzen für die FB Aufrufe aktualisieren kann.

    Logik durch indirekte Addressierung und Schleifen (egal welche Verfahren) finde ich problematisch. Wenn es funktioniert ist es gut, wenn da Probleme gibt ist es ein Alptraum.

    Das es gibt viele gleichartige 'Objekte' von denselben Typ ist ja nichts spezielles. Genau dafür hat man FBs + IDBs.
    Es ist wenig "Ressourcenfressend".
    Es ist einfach zum debuggen.
    Ist diese Idee mit "durchschleifen" dadurch gekommen weil der Programmierer zu faul ist die E/As einzutippen ?
    Jesper M. Pedersen

  3. #23
    Avatar von Flux
    Flux ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.03.2012
    Beiträge
    314
    Danke
    60
    Erhielt 9 Danke für 8 Beiträge

    Standard

    Mal ne ganz banale frage, wieso kann ich denn meine IN_OUTs (Slave, Kopfbst) nicht miteinander verbinden im CFC ?? {S7_link := 'true'}

    Zitat Zitat von JesperMP Beitrag anzeigen
    Warum kann man nicht den 'normalen' Verfahren verwenden, d.h. je 'Objekt' ein FB Aufruf mit ein IDB. 8...9Ist diese Idee mit "durchschleifen" dadurch gekommen weil der Programmierer zu faul ist die E/As einzutippen ?
    Ne, aber dann müsste ich jeden FB mit allen relevanten Signalen mit dem einen Treiberbaustein verbinden. Außerdem bräuchte ich nach wie vor eine Logik, die entscheidet welcher Slave nun senden/empfangen darf - das dezentral zu halten ist ein alptraum.
    In meinem Konstrukt verbinde ich jeden Slavebaustein (der nur zur Slaveparametrierung und Sollwert/Messwert verschaltung dient) per UDT an einen Kopfbaustein, der zentral die Slaves verwaltet und nur einmal an die relevanten Signale des Treiberbaustein verbunden ist.
    We must all suffer from one of two pains: the pain of discipline or the pain of regret. The difference is discipline weighs ounces while regret weighs tons.

  4. #24
    Avatar von Flux
    Flux ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.03.2012
    Beiträge
    314
    Danke
    60
    Erhielt 9 Danke für 8 Beiträge

    Standard

    "Mal ne ganz banale frage, wieso kann ich denn meine IN_OUTs (Slave, Kopfbst) nicht miteinander verbinden im CFC ?? {S7_link := 'true'}"

    Ich steh diesbezüglich grad echt aufm Schlauch

    PS: PCS 7 V8.0.1.1 --> CFC V8.0.3 (der momentan aktuellste)
    Geändert von Flux (03.02.2014 um 14:37 Uhr)

  5. #25
    Avatar von Flux
    Flux ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.03.2012
    Beiträge
    314
    Danke
    60
    Erhielt 9 Danke für 8 Beiträge

    Standard

    Inout mit inout verknüppeln geht nicht, war wohl eine fehlannahme. Habe nun eine andere Lösung gefunden

  6. #26
    Avatar von Flux
    Flux ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.03.2012
    Beiträge
    314
    Danke
    60
    Erhielt 9 Danke für 8 Beiträge

    Standard

    Hi,
    hab nun eine Lösung gefunden, bin aber mit der Art der Adressierung nicht zufrieden.

    Lösung:
    Global-DB (DB1, "DATA", enthält "Slave" (Array[1..100] of UDT)) anlegen. Aus FB lesend und
    schreibend adressierbar per "DATA".Slave[Slave_ID]. ... / DB1.Slave[Slave_ID]. ...
    Nun würde ich gerne den DB variabel halten, indem er von außen anparametriert wird. Mir ist
    bisher nur folgender Weg bekannt: z.B. 'DB77' --> IN : BLOCK_DB --> DB_Var.
    Leider kann ich dann nurnoch absolut über DB_Var.DBW[ID] durch die Datenstruktur navigieren

    FRAGE: wie kann ich trotz 'DB-Platzhalter' (im FB) durch die UDT-Struktur im Global-DB per Index
    navigieren ?

    Gruß
    Flux
    We must all suffer from one of two pains: the pain of discipline or the pain of regret. The difference is discipline weighs ounces while regret weighs tons.

  7. #27
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Das Array aus dem übergebenen DB in eine gleichartige Struktur in TEMP umkopieren.
    Oder halt das komplette Array als Array of UDT übergeben.
    Oder das Array of UDT direkt in STAT des FB anlegen.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  8. #28
    Avatar von Flux
    Flux ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.03.2012
    Beiträge
    314
    Danke
    60
    Erhielt 9 Danke für 8 Beiträge

    Standard

    Hallo Harald,
    danke für deine Antwort, habe noch ein Paar Fragen dazu:

    Zitat Zitat von PN/DP Beitrag anzeigen
    Das Array aus dem übergebenen DB in eine gleichartige Struktur in TEMP umkopieren.
    Im FB: TmpArr := DB_Var.Slave ? Wie gesagt, bei "Slave" meckert nun der Compiler, da der DB erst zur Runtime bekannt ist.


    Zitat Zitat von PN/DP Beitrag anzeigen
    Oder halt das komplette Array als Array of UDT übergeben.
    Ok, das wäre aus Sicht des Kopfbausteins: DBx.Slave --> IN_OUT: Slave : Array[1..100] of UDT

    Aus Sicht des Slaves wäre es: DBx.Slave[1] --> IN_OUT: Slave : UDT

    So?

    Zitat Zitat von PN/DP Beitrag anzeigen
    Oder das Array of UDT direkt in STAT des FB anlegen.
    Aus Sicht des Kopf-Bst. am einfachsten.
    Aber wie schreiben die Slaves darein? Absolut wie in der Variante hierdrüber? Das Problem dabei ist, dass die Instanz-DBNr. des Kopf-FB jedesmal nach dem Übersetzen eine andere sein kann (PCS 7 halt)..
    We must all suffer from one of two pains: the pain of discipline or the pain of regret. The difference is discipline weighs ounces while regret weighs tons.

  9. #29
    Avatar von Flux
    Flux ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.03.2012
    Beiträge
    314
    Danke
    60
    Erhielt 9 Danke für 8 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Mir ist noch eingefallen, dass wenn man IN : BLOCK_DB nimmt, man zwar nur auf die nackigen Bitdatentypen zugreifen kann (die UDT-Struktur also dahin ist), man die Struktur wiedergewinnen sollte, wenn man eine entsprechende Sicht (AT) auf den Datenbereich anwendet.

    Letztendlich habe ich ein UDT für OUT und eins für IN erstellt, um darüber zu kommunizieren - hat den Vorteil, dass man die Verbindung der beiden Bausteine einfacher nachvollziehen kann (Randleistensprung).


    Danke für alle Antworten!

    Flux
    We must all suffer from one of two pains: the pain of discipline or the pain of regret. The difference is discipline weighs ounces while regret weighs tons.

Ähnliche Themen

  1. Step 7 ANY-Pointer Indirekt Adressieren
    Von Heini im Forum Simatic
    Antworten: 21
    Letzter Beitrag: 25.09.2013, 15:35
  2. String indirekt adressieren
    Von The Dude im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 22.06.2011, 12:21
  3. SCL indirekt Adressieren
    Von Nafura im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 19.05.2011, 21:42
  4. DB-Pointer indirekt Adressieren
    Von Anonymous im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 19.03.2004, 16:59
  5. ANY-Pointer indirekt adressieren
    Von Anonymous im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 14.02.2004, 15:41

Lesezeichen

Berechtigungen

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