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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Indirekte DB-Adresse als FC-Eingang

  1. #1
    Registriert seit
    20.02.2007
    Ort
    Dresden
    Beiträge
    109
    Danke
    17
    Erhielt 11 Danke für 10 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich habe in SCL einen Baustein erstellt, der als Eingang eine Startadresse in einem globalen DB fordert. In Abhängigkeit von dieser Adresse, werden nun noch die weiter folgenden Bytes in dem DB beschrieben. Das Startbyte wird als normaler INT-Wert gelesen.

    Was kann ich machen, damit nicht das Startbyte, sondern der symbolische Name der Adresse angegeben werden kann?

    Von welchem Typ müsste der Eingang sein?
    Gibt es die Möglichkeit, im Programm die direkte Adresse aus dem Namen zu erhalten und damit weiterzuarbeiten (um die Folgeadressen berechnen zu können)?

    Vielen Dank

    Kniffo
    Zitieren Zitieren Indirekte DB-Adresse als FC-Eingang  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    Hallo Kniffo,
    hast du schon mal an ANY-Pointer gedacht ?
    Du könntest dann deinem Baustein als Parameter sagen : "Ziel := DB100.DBx10.0 Bytes=10" oder so ...

    Wenn ich dich richtig verstanden habe, dann gibst du jetzt den Ziel-DB und das erste DBB an und die Anzahl der Bytes weiss dein Baustein ...

  3. #3
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 183 Danke für 168 Beiträge

    Standard

    Hallo!

    Du könntest ja auch einen UDT übergeben.
    Dann hast du den Datenbaustein, die Länge und den Symbolischen zugriff...

    godi

  4. #4
    Registriert seit
    30.08.2003
    Beiträge
    2.196
    Danke
    30
    Erhielt 258 Danke für 229 Beiträge

    Standard

    Hallo,

    das Datenformat Pointer wäre das richtige für dich. Dieser enthält die DB-Nummer und die Startadresse.

    André

    P.S. UDT übergeben ist zwar sauber programmiert, aber bläht die Speichergrösse des Bausteins unheimlich auf
    www.raeppel.de
    mit innovativen SPS-Tools schneller ans Ziel ....
    Zitieren Zitieren Pointer  

  5. #5
    Avatar von Kniffo
    Kniffo ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    20.02.2007
    Ort
    Dresden
    Beiträge
    109
    Danke
    17
    Erhielt 11 Danke für 10 Beiträge

    Standard

    Hallo,

    vielen Dank erstmal für eure Antworten.

    Ich bin grad am Belesen mit ANY und POINTERN, scheint der richtige Weg zu sein, jetzt muss ich erstmal weitergrübeln.

    Es besteht ja auch die Möglichkeit, symbolisch auf Datenbausteine zu schreiben. Aber wie gebe ich die Adresse an, wenn der DB über einen UDT erstellt wurde. Die Bytes haben somit das Format UDTName.UDTInhalt.

    Wenn ich auf den DB schreiben möchte, muss ich daher die Form DBName.UDTName.UDTInhalt nutzen!? Der SCL Compiler spuckt mir dann den Fehler "Unzulässige Bitnummer (Wertebereich 0..7)" aus. Wie muss ich denn den Zugriff vornehmen?

    Kniffo
    Geändert von Kniffo (26.09.2007 um 17:06 Uhr)

  6. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    Hallo,
    deinem FB (FC ?) muss der UDT und dessen Aufbau bekannt sein. Du musst deine Variable (z.B. vom Typ IN) als UDT deklarieren :
    Code:
    Var_Input
       Daten : UDT1 ;
    End_Var
    Du kannst nun auf einzelne Bestandteile deines UDT's zugreifen - egal welchen Untertyps.
    Code:
    FC_DINT_Variable := Daten.DINT_Variable + 1 ;
    if Daten.BOOL_Variable_1 then ...
    usw.
    Daten.DINT_Variable und Daten.BOOL_Variable_1 sind in dem Bespiel symbolische Bezeichner aus deinem UDT.

    ---

    Du kannst auf den DB auch symbolisch zugreifen, wenn er in deiner Symbolik deklariert ist. Auf symbolische Inhalte deines DB's aber nicht, es sein denn es wäre der Instanz-DB deines FB's. Da kennt der FB natürlich den DB ...

  7. #7
    Avatar von Kniffo
    Kniffo ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    20.02.2007
    Ort
    Dresden
    Beiträge
    109
    Danke
    17
    Erhielt 11 Danke für 10 Beiträge

    Standard

    Hallo,

    du gibst deinem UDT also erstmal einen beliebigen Namen, der nicht mit der Bezeichnung im DB übereinstimmen muss!?

    Aber wo gibst du jetzt an, in welchem DB sich der UDT befindet?

    Zu meinem konkreten Sachverhalt:
    Mein DB ist nach dem Muster im Anhang aufgebaut (Daten- und Deklarationsansicht) - zusammengesetzt aus verschiedenen UDTs (CompAI. mit UDT 1 und CompAO. mit UDT 2).

    Da es sich bei mir um einen FC handelt, interessiert mich also die Verarbeitung von Global-DBs. Und mein Ziel ist es z. B. einen Real-Wert auf 'DB11.CompAI.AI_Orig' zu schreiben (entspricht also DB11.DX0.0).
    Angehängte Grafiken Angehängte Grafiken

  8. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    Hallo Kniffo,
    NEIN ...

    Der UDT muss schon im Projekt vorhanden sein. Du kannst ihn natürlich dann auch im DB verwenden ...

    Beispiel :
    Code:
    UDT 1 
    Orig : real
    Act  : real
    Diag : bool
    Diag_Val : real
     
    DB11
    Comp_AI : UDT1
    Comp_A0 : UDT1
    Diesen UDT kannst du jetzt auch genauso in SCL verwenden.

  9. #9
    Avatar von Kniffo
    Kniffo ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    20.02.2007
    Ort
    Dresden
    Beiträge
    109
    Danke
    17
    Erhielt 11 Danke für 10 Beiträge

    Standard

    Ja ok, aber ich weiß nicht, ob ich dich richtig verstanden habe. Du bist ja grad dabei einen UDT und dann daraus einen DB zu erstellen (in SCL) richtig?

    Aber die habe ich ja schon erstellt. Ich möchte jetzt "nur" noch in den DB schreiben - symbolisch adressiert.

    Muss ich dafür nochmal im Baustein die Struktur des UDT und des DB in deine Form angeben? Nein oder!?

  10. #10
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ... nein,
    ich habe den UDT zuerst erstellt : "Neues Objekt einfügen - Datentyp".
    Diesen UDT habe ich dann im DB als Datentyp verwendet. Diesen Datentyp kannst du nun auch genauso in SCL verwenden.

    Deine Variable, ob im DB oder im Deklarationskopf eines FC's oder FB's oder in SCL ist nun halt nicht von Typ (z.B.) REAL sondern UDT1. Probier das mal aus ...

Ähnliche Themen

  1. Antworten: 15
    Letzter Beitrag: 09.09.2011, 10:56
  2. indirekte Adressierung
    Von Christian84 im Forum CODESYS und IEC61131
    Antworten: 9
    Letzter Beitrag: 21.02.2009, 09:09
  3. Antworten: 3
    Letzter Beitrag: 29.08.2007, 13:33
  4. Indirekte Adressierung
    Von wusel220983 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 18.05.2007, 18:19
  5. Indirekte Adressierung !
    Von max1de im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 27.02.2007, 18:18

Lesezeichen

Berechtigungen

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