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

Ergebnis 1 bis 4 von 4

Thema: Variable indirekt adressieren -CoDeSys-

  1. #1
    Registriert seit
    15.01.2011
    Beiträge
    1
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    Ich habe folgendes Problem:
    ich möchte in einem FB eine boolsche Ausgangsvariable schalten, adressiert werden soll der Ausgang über ein Eintrag in einer INPUT_Variable.

    Ich hab folgende globale Variablen: POS_301, POS_302, POS_303 ..... POS_328 (alle BOOL) diese sind ausgängen zugewiesen

    Über den Eingang des FBs soll die Nummer eingegeben werden z.B. 301 dadurch soll im FB der Ausgang POS_ mit 301 verknüpft werden. Diesen will ich dann weiterverknüpfen. Hoffe das is bischen verständlich -.-

    Ich habs mit Pointer, Arrays versucht aber nix hinbekomm
    vielleicht wirds durch mein nicht funktionierendes Beispiel klarer wass ich will ;>
    -----------------------------------------
    VAR_GLOBAL
    Pos_301 AT %QX100.0 :BOOL; (* Beleuchtungsgruppe 301 *)
    Pos_301_P AT %QX100.1:BOOL; (* Pausenlicht Beleuchtungsgruppe 301 *)
    Pos_302 AT %QX100.2:BOOL; (* Beleuchtungsgruppe 302 *)
    Pos_302_P AT %QX100.3:BOOL; (* Pausenlicht Beleuchtungsgruppe 302 *)
    ...
    END_VAR

    VAR_INPUT
    Ein_13:BOOL;
    BEL_NR:ARRAY [0..500] OF INT;
    END_VAR

    IF EIN_13=TRUE THEN
    POS_[BEL_NR]:=TRUE;
    ELSE
    POS_[BEL_NR]_P:=TRUE;
    END_IF;

    -----------------------------------------

    vielleicht kann mir ja jemand helfen
    über die sufu hab ich nüx gefunden
    Zitieren Zitieren Variable indirekt adressieren -CoDeSys-  

  2. #2
    Registriert seit
    01.09.2008
    Ort
    Berlin
    Beiträge
    172
    Danke
    51
    Erhielt 51 Danke für 44 Beiträge

    Standard

    Hi,

    soweit ich mich erinnere kann man in den Symbolen keine Variablen unterbringen.
    Sicherlich müsstest du eine Startadresse vorgeben (z.B. QX100.0) und dann variabel einen Offset dazurechnen, jenachdem wo du hin willst.
    Hier mal ein Beispiel: http://sps-forum.de/showthread.php?t=40485

  3. #3
    Registriert seit
    29.03.2004
    Beiträge
    5.797
    Danke
    144
    Erhielt 1.707 Danke für 1.239 Beiträge

    Standard

    Ich hatte mal bei TwinCat etwas probiert, weiß aber nicht ob du das auch auf andere Systeme anwenden kannst.
    Und zwar habe ich mir einmal eine Struktur angelegt, meinetwegen:
    Code:
    TYPE EA_STRUCT :
    STRUCT
    	Signal_1 : BOOL;
    	Signal_2 : BOOL;
    END_STRUCT
    END_TYPE
    Dann für deine mehrfachen Objekte ein E/A-Array z.B.:
    Code:
    E_Aggregat AT %I* : ARRAY[0..16] OF EA_STRUCT;
    Im Twincat Systemmanager muss man dann die Eingangssignale mit den entsprechenden Variablen verknüpfen.
    Hier gibt es aber ein paar Einschränkungen, weil in der Twincat Konfigurationsdatei immer ein ganzes Eingangs-Byte mit dem Array verknüpft wird. Mit wild durcheinandergewürfelten E/A wird das nichts.

    Vom Prinzip her funktioniert das allerdings. Nur für deine Ausgänge musst du noch ein zweites Array anlegen.
    Vielleicht haben die Codesys Spezis da noch eine bessere Vorgehensweise parat.

  4. #4
    Registriert seit
    17.08.2010
    Ort
    Blaichach
    Beiträge
    84
    Danke
    1
    Erhielt 9 Danke für 9 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Deklariere doch einfach in deinem FB die Ein- und Ausgänge folgendermaßen:


    FUNCTION_BLOCK FB_Licht (*01.DEZ 2010, *)
    VAR
    (* Hardaware ein- und ausgänge *)
    Ausgang AT %Q* : BOOL; (* Ausgang *)
    Eingang AT %I* : BOOL; (* Eingang *)

    (* intern benutzte Variablen *)
    iregenwas : Bool;
    END_VAR

    (* -------------------------------------------------------------- *)

    Dann deklarierst du z.B. in deinem Programm oder in den Globalen Variablen die instanzen deines FB´s.

    Dies kann z.B. so aussehen:

    Licht : ARRAY [1..10] OF FB_Licht;


    (* -------------------------------------------------------------- *)



    Dann machst du dir in den Recurcen eine neue Variablen Liste die z.B. EA_VarConfig heißt.
    Dieser kann erstmal leer sein...


    Jezt kannst du wenn die Instanzen deklariert sind und die liste offen ist ind der Menüleiste auf "Einfügen->Alle Instanzpfade" Klicken


    in deinem "EA_VarConfig" sollte dann folgendes stehen:

    VAR_CONFIG
    .Licht[1].Ausgang AT %Q : BOOL;
    .Licht[1].Eingang AT %I : BOOL;
    .Licht[2].Ausgang AT %Q : BOOL;
    .Licht[2].Eingang AT %I : BOOL;
    .Licht[3].Ausgang AT %Q : BOOL;
    .Licht[3].Eingang AT %I : BOOL;
    .Licht[4].Ausgang AT %Q : BOOL;
    .Licht[4].Eingang AT %I : BOOL;
    .Licht[5].Ausgang AT %Q : BOOL;
    .Licht[5].Eingang AT %I : BOOL;
    .Licht[6].Ausgang AT %Q : BOOL;
    .Licht[6].Eingang AT %I : BOOL;
    .Licht[7].Ausgang AT %Q : BOOL;
    .Licht[7].Eingang AT %I : BOOL;
    .Licht[8].Ausgang AT %Q : BOOL;
    .Licht[8].Eingang AT %I : BOOL;
    .Licht[9].Ausgang AT %Q : BOOL;
    .Licht[9].Eingang AT %I : BOOL;
    .Licht[10].Ausgang AT %Q : BOOL;
    .Licht[10].Eingang AT %I : BOOL;
    END_VAR

    Jetzt mußt di nur noch den unvollständigen deklarationen eine Adresse vergeben.
    Also aus %Q wir %QX10.0, %I wird %IX10.5 usw....

    Das is meiner Meinung nach der eleganteste Weg in einem FB mit Hardware E/A´s zu arbeiten...


    Gruß Bernd
    Real programmers don’t comment their code. It was hard to write, it should be hard to understand.

Ähnliche Themen

  1. PEW; PAW indirekt Adressieren
    Von casius im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 02.10.2017, 09:00
  2. Pointer indirekt zu adressieren
    Von Erich04 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 26.05.2011, 07:54
  3. SCL indirekt Adressieren
    Von Nafura im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 19.05.2011, 21:42
  4. UDT Indirekt Adressieren
    Von EULANER im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 14.11.2010, 19:30
  5. SFC 20 indirekt adressieren
    Von drmicha im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 19.10.2009, 09:24

Lesezeichen

Berechtigungen

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