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

Seite 6 von 7 ErsteErste ... 4567 LetzteLetzte
Ergebnis 51 bis 60 von 69

Thema: Zugriff auf einen UDT / Array mit Variablen?

  1. #51
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    die Diagnose bringt dich auf Wunsch genau in die richtige Zeile (Baustein öffnen). In dem Fall würde ich aufgrund der Fehlermeldung aber auf die folgende Zeile tippen :
    Code:
    WORD_TO_BLOCK_DB(5).DD[index3*4]:=DINT_TO_DWORD(sortierpuffer[index3]);
    Ist der DB5 den groß genug dimensioniert ? Gibt es darin mindestens 49 Doppelworte ? Das ist aber Spekulation (Meldung Instanz-DB ...).

    Bitte teile doch noch die Deklaration deiner ARRAY's mit ...

    Gruß
    LL

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

    Standard

    Ist deine Variable Matrizze immer noch so definiert?

    Code:
    Matrizze : ARRAY[0..6,0..6] OF DINT;
    In der Hilfe steht:

    Beim Start der Schleife wird die Laufvariable auf den Startwert (Anfangszuweisung) gesetzt und nach jedem Schleifendurchlauf um die angegebene Schrittweite erhöht (positive Schrittweite) oder erniedrigt (negative Schrittweite), solange bis der Endwert erreicht ist.
    Das würde dann heißen, beim ersten Schleifendurchlauf könnte es schon krachen, da Index1 und Index2 da auf 7 stehen.
    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

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

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Hallo,
    die Diagnose bringt dich auf Wunsch genau in die richtige Zeile (Baustein öffnen). In dem Fall würde ich aufgrund der Fehlermeldung aber auf die folgende Zeile tippen :
    Code:
    WORD_TO_BLOCK_DB(5).DD[index3*4]:=DINT_TO_DWORD(sortierpuffer[index3]);
    Ist der DB5 den groß genug dimensioniert ? Gibt es darin mindestens 49 Doppelworte ? Das ist aber Spekulation (Meldung Instanz-DB ...).

    Bitte teile doch noch die Deklaration deiner ARRAY's mit ...

    Gruß
    LL
    Und ist dein DB5 etwa dein Instanz-DB oder was ist das für einer? Die Fehlermeldung moniert ja den Zugriff auf den Instanz-DB.
    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. #54
    Registriert seit
    23.02.2008
    Beiträge
    45
    Danke
    11
    Erhielt 0 Danke für 0 Beiträge

    Standard

    da war ein Zeitstempel Konflikt mit dem IB, die ARRAYS habe ich umgeändert die stimmen, die Prozentberechnung geht nicht, es kommt 0 raus
    also im sortierpuffer1 stehen nur die Vektoren, wie dimensioniert man einen
    DB (global) muß man da die 100 Werte von Hand eingeben,
    vielen Dank

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

    Standard

    Was genau, soll das bewirken?

    Code:
    sortierpuffer[index3]:=DWORD_TO_DINT(SHR(IN:=((DINT_TO_DWORD(sortierpuffer[index3]))AND 16#F0000000),N:=16)
    Global-DB:

    1. von Hand
    2. Array[1..100] of DInt
    3. Array[1..100] of UDT1, wobei UDT1 eine Struktur oder eine beliebige Anordnung von Daten enthalten kann.
    Geändert von Ralle (22.05.2008 um 22:34 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

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

    Standard

    Das Verschieben des Vorzeichenbits, da ja nur die die ersten beiden Bytes
    den Zahlenwert angeben und die oberen Bytes je ein Byte ein Vektor.

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

    Standard

    Aber dieser Teil hier:
    Code:
    ((DINT_TO_DWORD(sortierpuffer[index3]))AND 16#F0000000)
    sorgt doch dafür, daß nur noch 4 Bit da sind, die schiebst du dann 16 nach rechts. Ist das so gewollt?
    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. #58
    Registriert seit
    23.02.2008
    Beiträge
    45
    Danke
    11
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ja weil ich verknüpfe ja diesen Teil noch zweimal mit ODER( mit den Vektorenwerten und dem Zahlenwert)
    und das war der Fehler ich habe wieder AND mit OR verwechselt und den Zahlenwert ganz vergessen,
    die oberen 4 Bit sind doch nur mit dem Vorzeichenbit besetzt.
    na ja, jetzt hab ich solange rumgebastelt bis mir die Geduld abhanden gekommen ist, aber wer suchet der findet
    Geändert von Wolflesch (24.05.2008 um 21:41 Uhr)

  9. #59
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard

    ist dein Problem denn nun gelößt ...?

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ja danke der Nachfrage, ich habe jetzt die negativen Zahlen mit der 2er-komplementärbildung und dem Setzen des Vorzeichen Bits hinbekommen,
    nun wollte ich noch fragen ob man ein Array auch Löschen kann, denn ich will alle 5000 Zyklen auswerten:

    modul:=zaehler MOD 5000;
    IF modul= 0 THEN
    hilf3:=DINT_TO_REAL(zaehler);
    mittelwert:=hilf3/49;
    index3:=0;
    FOR index1 := 7 TO 2 BY -1 DO
    FOR index2 := 7 TO 2 BY -1 DO
    index3 := index3+1;
    hilf1:=DINT_TO_DWORD(matrizze[index1,index2]);
    hilf2:=(hilf1 AND 16#0000FFFF);
    hilf4:=DWORD_TO_DINT(hilf2);
    hilf3:=DINT_TO_REAL(hilf4);
    IF hilf3<mittelwert THEN
    v_zeichen:=true;
    hilf4:=REAL_TO_DINT(((mittelwert-hilf3)/mittelwert)*100);
    hilf2:=DINT_TO_DWORD(hilf4+1); // +1 zur Ergänzung des 2er komplements
    hilf2:=(NOT hilf2) AND 16#0000FFFF; //Komplementärbildung
    sortierpuffer[index3]:=DWORD_TO_DINT(hilf2 OR (hilf1 AND 16#FFFF0000)
    OR 2#1000000000000000); //setzen des Vorzeichenbits
    puffer1:=hilf4;
    ELSE
    v_zeichen:=false;
    hilf4:=REAL_TO_DINT(((hilf3-mittelwert)/mittelwert)*100);
    hilf2:=DINT_TO_DWORD(hilf4);
    sortierpuffer[index3]:=DWORD_TO_DINT(hilf2 OR hilf1 AND 16#FFFF0000);
    puffer2:=hilf4;
    END_IF;

    WORD_TO_BLOCK_DB(5).DD[index3*4]:=DINT_TO_DWORD(sortierpuffer[index3]);
    END_FOR;
    END_FOR;
    zaehler:=0;
    END_IF;

    END_FUNCTION_BLOCK


    Geändert von Wolflesch (24.05.2008 um 21:51 Uhr)

Ä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
  •