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

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

Thema: Dynamische DB Adressierung bei SCL

  1. #1
    Registriert seit
    16.09.2006
    Beiträge
    36
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich versuche mich seit neustem mit SCL.

    Meine Frage bezieht sich auf die Zeile :
    DB_coDCO.DCO[RECORD].cmdSeqAon := db_recipe_control_001.SEQ_CONTROL.DCO[index].StepAon[Step_Nr];

    Nun habe ich in meinem code nicht nur "db_recipe_control_001",
    sondern auch db_recipe_control_002 und db_recipe_control_003 etc.

    Bisher habe ich dies mit CASE gelöst, diese Lösung finde ich aber nicht so elegant.

    Kennt jemand eine Lösung um diesen DB dynamisch zu anzusprechen?

    ////////////////////////////////////////
    FUNCTION coSEQ_Control : void

    VAR_TEMP
    // Temporary Variables
    INDEX : INT;
    RECORD : INT;
    END_VAR

    VAR_INPUT
    COUNT : INT; // pointer of element
    STEP_NR : INT; // actual step number
    RECIPE_NR : INT; // source recipe
    END_VAR


    FOR index := 1 TO count BY 1 DO
    // load right record number
    RECORD := db_recipe_control_001.SEQ_CONTROL.DCO[index].RecordNr;
    DB_coDCO.DCO[RECORD].cmdSeqAon := db_recipe_control_001.SEQ_CONTROL.DCO[index].StepAon[Step_Nr];

    END_FOR;


    END_FUNCTION
    ////////////////////////////////////////////////////////////////
    Zitieren Zitieren Dynamische DB Adressierung bei SCL  

  2. #2
    Registriert seit
    28.01.2009
    Ort
    Hamburg
    Beiträge
    199
    Danke
    52
    Erhielt 54 Danke für 34 Beiträge

    Standard

    Vieleicht hilft dir das.
    Code:
    Var_in
    DBNR:int;// integer angebener Datenbaustein
    End_Var
    
    
    var
    index:int;//Interger angegebenes Datenwort
    end_Var
    
    
    Beginn
    
    Mw200:=Word_to_Block_DB(int_to_word(DBNR)).DW(index);//
    
    End_Function
    Viele Grüße Bernard
    Zitieren Zitieren Dynamische DB Adressierung bei SC  

  3. #3
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.224
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Das geht leider nicht mit symbolischer Adressierung, sondern nur absolut, siehe Bernard. Das endet leider in extrem krytischen Anweisungen und man verliert ganz fix den Überblick. Daher nehme ich auch oft die "unelegante" Version von dir, wenn es denn möglich ist.
    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

  4. #4
    Registriert seit
    28.01.2009
    Ort
    Hamburg
    Beiträge
    199
    Danke
    52
    Erhielt 54 Danke für 34 Beiträge

    Standard

    Wenn man den indizierten Datenbaustein über eine vorverarbeitende Schleife in einen internen structurierten Speicherbereich bringt,läßt sich danach voll Symbolisch arbeiten.

    Viele Grüße Bernard
    Zitieren Zitieren Das endet leider in extrem krytischen Anweisungen  

  5. #5
    Registriert seit
    16.09.2006
    Beiträge
    36
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Danke für den Hinweis.

    ich habe es nun so gelöst, dass ich die Struktur beim FC aufruf übergebe :
    VAR_INPUT
    COUNT : INT; // pointer of element
    STEP_NR : INT; // actual step number
    RECIPE_NR : INT; // source recipe
    SEQ_CONTROL : UDT19; // structure of control recipe
    END_VAR

    //////////////////////



    ///////////////////////

    FOR index := 1 TO count BY 1 DO
    // load right record number
    // RECORD := db_recipe_control_001.SEQ_CONTROL.DCO[index].RecordNr;
    // DB_coDCO.DCO[RECORD].cmdSeqAon := db_recipe_control_001.SEQ_CONTROL.DCO[index].StepAon[Step_Nr];
    RECORD := SEQ_CONTROL.DCO[index].RecordNr;
    DB_coDCO.DCO[RECORD].cmdSeqAon := SEQ_CONTROL.DCO[index].StepAon[Step_Nr];


    END_FOR;


    2 Fragen hierzu:

    1 . Hat es einen Nachteil (CPU Belastung) wenn ich die Struktur übergebe?
    2. Wenn ich die von Dir beschriebene Lösung einsetze (muss ich da machen, wo ich nicht für jedes Rezept den FC einzeln aufrufen werde).
    kann ich dan die DW Adresse einfach durch multuplizieren des offset mit dem index realisieren?

  6. #6
    Registriert seit
    16.09.2006
    Beiträge
    36
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Daumen hoch

    Zitat Zitat von Bernard Beitrag anzeigen
    Wenn man den indizierten Datenbaustein über eine vorverarbeitende Schleife in einen internen structurierten Speicherbereich bringt,läßt sich danach voll Symbolisch arbeiten.

    Viele Grüße Bernard
    Dassss verstehe ich nicht so ganz. Kannst Du mir das bitte etwas genauer erklären?

    Danke!

  7. #7
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.224
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Ich mach mal.

    Die UDT zu übergeben hat den Nachteil, daß man diese nicht weiter durchreichen kann. Wenn du also in deinem Baustein nochmal einen Bsuatein aufrufen willst, der mit dieser UDT arbeitet ginge das nicht.

    Bernhard übergibt den Baustein und vielleicht noch einen Startpunkt und die Länge an den FB und kopiert dann die ganzen Daten in eine Strucktur um, die z.Bsp. im Stat-Bereich liegt. Mit der kann man dann voll symbolisch arbeiten. Aber falls man dort auch Daten verändert, müßte man es nachher wieder zurückkopieren. Außerdem kostet das Umkopieren natürlich Zeit. Hängt immer auch von der verwendeten SPS und vom Umfang des Ganzen ab.
    Geändert von Ralle (02.11.2009 um 19:28 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

  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,
    wie wäre es denn, wenn du anstelle eines FC einen FB anlegst und die Daten zu einem Bestnadteil der Instanz machst. Dann kannst du in SCL auch sinnvoll darauf zugreifen und auch ggf. Datensätze nach irgendwo hin übergeben ...

    Gruß
    LL

  9. #9
    Registriert seit
    16.09.2006
    Beiträge
    36
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Im Prinzip währe es hier sinnvoll einen BufferDB oder instanz DB zu nehmen, wo ich vor und nach dem Schreiben die daten kopiere .

    Ok Im Moment werde ich die date nnicht weiteeeerreichen, so kann ich die UDT übergeben, aber für den rest versuche ich mich mal mit der Adressberechnung.

    Danke!

  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
    ... das mit der Adress-Berechnung macht in SCL eigentlich gar keinen Sinn ...
    Ich würde immer versuchen, das sinnvoll zu umgehen ...

Ähnliche Themen

  1. Dynamische DB adressierung in SCL
    Von thomasgull im Forum Programmierstrategien
    Antworten: 3
    Letzter Beitrag: 08.09.2010, 22:14
  2. Dynamische Förderanlage
    Von thomasgull im Forum Programmierstrategien
    Antworten: 2
    Letzter Beitrag: 28.09.2009, 05:25
  3. Dynamische Datenstrukturen in S7-SCL
    Von jck0815 im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 20.11.2008, 15:33
  4. dynamische Arrays?
    Von merlin im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 30.05.2008, 16:06
  5. Dynamische Schrittkette
    Von Pau1e im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 26.03.2008, 20:09

Lesezeichen

Berechtigungen

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