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

Seite 4 von 7 ErsteErste ... 23456 ... LetzteLetzte
Ergebnis 31 bis 40 von 69

Thema: Zugriff auf einen UDT / Array mit Variablen?

  1. #31
    Registriert seit
    23.02.2008
    Beiträge
    45
    Danke
    11
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    kann mir jemand helfen, immer wenn ich diesen Code mit dem Schalter aray dazu schalte bleibt das Programm im Simulator(PLCSIM) stehen:

    WHILE aray = false DO
    IF Matrizze[index1,index2] < 10000000 THEN
    shrhilf1:=INT_TO_DWORD(index1);
    shrhilf2:=INT_TO_DWORD(index2) ;
    Matrizze[index1,index2]:=DWORD_TO_DINT(SHR(in:=shrhilf1, N:=16)
    OR SHR(in:=shrhilf2, N:=24));
    END_IF;
    END_WHILE;
    Matrizze[index1,index2]:=Matrizze[index1,index2] +1;

  2. #32
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.786
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard

    Frage:
    Woher kommt index1 und index2 ...

    Bist du sicher, dass du deine Matrix nicht über-Indexierst (index > Deklaration) ?

  3. #33
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.255
    Danke
    537
    Erhielt 2.705 Danke für 1.954 Beiträge

    Standard

    Schaltest du aray auch mal wieder aus? Das Programm geht doch in die Schleife und bleibt darin hängen? Nimm mal statt der While-Schleife eine IF ... then... end if, dann sollte es auch gehen.

    Ich denke mal der Simulator bleibt nicht nur stehen sondern geht wegen Zykluszeitüberschreitung in Stop.
    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. #34
    Registriert seit
    23.02.2008
    Beiträge
    45
    Danke
    11
    Erhielt 0 Danke für 0 Beiträge

    Standard

    als der Computer ausgeschaltet war ist mir das selber eingefallen,
    trotzdem danke, jetzt läuft das Programm, gibt es irgend eine Liste wo man
    das ARRAY anschauen kann.
    index1 und index2 werden mit der Zufallszahl (1 bis 7) abwechselnd indiziert.
    Geändert von Wolflesch (03.05.2008 um 10:48 Uhr)

  5. #35
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.255
    Danke
    537
    Erhielt 2.705 Danke für 1.954 Beiträge

    Standard

    Als was ist Matrize denn definiert, wenn es eine Stat in einem FB ist kannst du die zugehörigen Var aus dem IDB in der Variablentabelle beobachten.
    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

  6. #36
    Registriert seit
    23.02.2008
    Beiträge
    45
    Danke
    11
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Jetzt geht PLCSIM in Stop wenn ich diesen Code dazuschalte:
    index3:=0;
    REPEAT
    FOR index1 := 6 TO 0 BY -1 DO
    FOR index2 := 6 TO 0 BY -1 DO
    index3 := index3+1;
    sortierpuffer[index3]:= Matrizze[index1,index2];
    END_FOR;
    END_FOR;
    UNTIL index3>=49
    END_REPEAT;
    im Diagnosepuffer steht:
    Bereichslängenfehler beim Lesen,InstanzDB,Doppelwortzugriff,Zugriffsadresse 0,

    die Arraybereiche müßten schon stimmen:
    Matrizze: ARRAY[0..6,0..6] of DINT;
    Sortierpuffer: ARRAY[1..49] of DINT;



  7. #37
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.786
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard

    Zu deinem Code fällt mir folgendes auf :
    - den "Repeat ... Until" kannst du dir eigentlich sparen, da nach einem Durchlauf der beiden "FOR ..TO"-Schleifen index3 sowieso auf 49 ist ... und wenn nicht du sicherlich etwas über-adressierst ...
    - Das Script ist sonst m.E. in Ordnung - hast du den zugehörigen I-DB auch ins PLCSim übertragen ? Manchmal vergisst man das schonmal ...
    - Beinhaltet der Baustein noch weitere Funktionen ?

    Gruß
    LL

  8. #38
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.255
    Danke
    537
    Erhielt 2.705 Danke für 1.954 Beiträge

    Standard

    Evtl. hast du im Programm Änderungen vorgenommen und keinen neuen IDB erzeugt, arbeitest lso mit dem alten IDB weiter. Dann ist mit allerdings die Zugriffsadresse 0 nicht ganz plausibel, könnt schon sein, daß Larry eher Recht hat .
    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. #39
    Registriert seit
    23.02.2008
    Beiträge
    45
    Danke
    11
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Es liegt an diesem Programmteil:
    IF sort=true then
    REPEAT
    tauschen:= false;
    FOR index3:=49 TO 0 BY -1 DO
    puffer1:=DINT_TO_DWORD(sortierpuffer[index3]);
    puffer2:=DINT_TO_DWORD(sortierpuffer[index3-1]);
    sortierpuffer[index3]:= DWORD_TO_DINT(puffer1 AND 16#0000FFFF);
    sortierpuffer[index3-1]:= DWORD_TO_DINT(puffer2 AND 16#0000FFFF);
    IF sortierpuffer[index3-1] > sortierpuffer[index3] THEN
    sortierpuffer[index3-1]:=DWORD_TO_DINT(puffer1);
    sortierpuffer[index3]:= DWORD_TO_DINT(puffer2);
    tauschen:= true;
    ELSE sortierpuffer[index3]:= DWORD_TO_DINT(puffer1);
    sortierpuffer[index3-1]:=DWORD_TO_DINT(puffer2);
    END_IF;
    END_FOR;
    UNTIL NOT tauschen
    END_REPEAT;
    END_IF;
    puffer1,puffer2WORD;
    Geändert von Wolflesch (04.05.2008 um 20:23 Uhr)

  10. #40
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.786
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    die markierten Zeile erhalten einen negativen Wert im index3 :
    Code:
    IF sort=true then 
    REPEAT 
    tauschen:= false;
    FOR index3:=49 TO 0 BY -1 DO
    puffer1:=DINT_TO_DWORD(sortierpuffer[index3]);
    puffer2:=DINT_TO_DWORD(sortierpuffer[index3-1]); 
    sortierpuffer[index3]:= DWORD_TO_DINT(puffer1 AND 16#0000FFFF);
    sortierpuffer[index3-1]:= DWORD_TO_DINT(puffer2 AND 16#0000FFFF);
    IF sortierpuffer[index3-1] > sortierpuffer[index3] THEN
    sortierpuffer[index3-1]:=DWORD_TO_DINT(puffer1);
    sortierpuffer[index3]:= DWORD_TO_DINT(puffer2);
    tauschen:= true;
    ELSE sortierpuffer[index3]:= DWORD_TO_DINT(puffer1);
    sortierpuffer[index3-1]:=DWORD_TO_DINT(puffer2); 
    END_IF;
    END_FOR;
    UNTIL NOT tauschen
    END_REPEAT;
    END_IF;
    Schleife läuft bis "0" - Arrayindex = index3-1 also -1 !!!

    Gruß
    LL

Ähnliche Themen

  1. Zugriff auf OPC Variablen
    Von mariobc im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 10.10.2011, 19:33
  2. Zugriff auf einen Array eines UDT`s
    Von Andreas- im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 04.09.2009, 19:02
  3. Array mit Variablen adressieren
    Von Jens im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 13.12.2006, 20:57
  4. Hardwarenaher Zugriff durch einen FC / FB
    Von mclear im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 10.07.2006, 15:53
  5. Antworten: 1
    Letzter Beitrag: 24.06.2003, 22:14

Lesezeichen

Berechtigungen

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