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

Ergebnis 1 bis 6 von 6

Thema: Array indirekt beschreiben

  1. #1
    Registriert seit
    18.03.2009
    Beiträge
    29
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo der Prog-Gemeinde

    Ich brauche eine Erklärung für Anfänger

    Ich bastle gerade an einem Übungsbeispiele mit Array´s umher
    Es besteht ein Array mit 60 Feldern in einem Globalen DB
    Die Array Felder sollen im Sekundentakt weitergesschalten werden
    Dabei soll der Anzahl der pos. Flanken des Eingang 0.1 in das aktuale
    Arrayfeld übertagen werden.
    D.h.
    Ist der Sekundenwert gerade bei 3 soll die Anzahl der Pos.Flanken von E0.1 in das Arrayfeld 3 übertragen werden usw.
    Bei jedem Sekundentakt wird die Anzahl der Pos.Flanken von E0.1 auf null gesetzt
    Bei Sekundenwert 60 wird wird Sekundenwert auf 0 gesetzt und von vorne begonnen.

    Ich möchte mir so ein Zeitfenster von 60 sec. erstellen und somit die durchschnittlichen Impulse pro minute errechnen

    .. wenn dies überhaupt so möglicht ist.
    Zitieren Zitieren Array indirekt beschreiben  

  2. #2
    Registriert seit
    01.03.2007
    Beiträge
    262
    Danke
    26
    Erhielt 33 Danke für 28 Beiträge

    Standard

    Zum indirekten beschreiben gibt es zwei Möglickeiten, einmal die indirekte Adressierung oder mit Pointern:

    Indirekte Adressierung:
    Code:
    L MD 0 //da steht das 1. Byte in das dein Wert geschrieben werden soll
    SLD 3 // mit 8 multiplizieren bzw. die Bits um 3 Stellen nach links schieben
    T #Addr //lokalte Variable vom Typ DINT
     
    AUF DB 100 // Ziel-Datenbaustein muss vorher geöffnet werden
    L #Wert // den Wert, den du hineinschreiben willst
    T DBD[#Addr]
    Pointer:
    Code:
    L MD 0 //da steht das 1. Byte in das dein Wert geschrieben werden soll
    SLD 3 // mit 8 multiplizieren bzw. die Bits um 3 Stellen nach links schieben
    LAR1 // Lade AKKU1 in Adressregister1
     
    AUF DB 100 // Ziel-Datenbaustein muss vorher geöffnet werden
    L #Wert  // den Wert, den du hineinschreiben willst
    T DBD[AR1,P#0.0] //Wert auf DBD schreiben auf Adresse im Adressregister 1 und dem Offset P#0.0

  3. Folgender Benutzer sagt Danke zu Human für den nützlichen Beitrag:

    Airpower (21.06.2009)

  4. #3
    Airpower ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    18.03.2009
    Beiträge
    29
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke an Human

    Die Lösung mit der Registerindirekten Parametrirung (mit Pointer) habe
    ich gesucht.
    Habe selbst viel damit versucht jedoch habe ich es mit "AUF DB"
    nicht verucht.

    Warum muss eigentlich der DB zuerst geöffnet werden
    Warum kann nicht mit T DB1.DBB [AR1,P#0.0] geschrieben werden
    Zitieren Zitieren Array indirekt beschreiben  

  5. #4
    Registriert seit
    01.03.2007
    Beiträge
    262
    Danke
    26
    Erhielt 33 Danke für 28 Beiträge

    Standard

    Warum du T DB1.DBB [AR1,P#0.0] nicht schreiben kannst ist mir nicht wirklich klar, auf jeden Fall was ich weiß dass wenn du
    Code:
    T DB1.DBB1
    schreibst das genau so übersetzt wird als wenn du
    Code:
    AUF DB 1
    T DBB1
    schreiben würdest!

  6. #5
    Registriert seit
    26.05.2009
    Beiträge
    541
    Danke
    35
    Erhielt 78 Danke für 69 Beiträge

    Standard

    Zitat Zitat von Airpower Beitrag anzeigen
    Warum muss eigentlich der DB zuerst geöffnet werden
    Warum kann nicht mit T DB1.DBB [AR1,P#0.0] geschrieben werden
    Weil die Siemens-Software nicht damit umgehen kann!
    Warum nicht?
    Frag mal Siemens!

    Ich habe keine Ahnung.

    gruß wolder

  7. #6
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Human Beitrag anzeigen
    Warum du T DB1.DBB [AR1,P#0.0] nicht schreiben kannst ist mir nicht wirklich klar, ...
    Weil Du bei der Bereichsübergreifenden Registerindirekten Adressierung die Bereichskennung mit übergeben kannst:

    Bereichskennungen:
    000 Peripherie
    010 Ausgänge
    100 Daten im DB
    110 Lokaldaten
    001 Eingänge
    011 Merker
    Also die Vorbelegung von AR1: 1000 0001 0000 0000 0000 0000 0101 0000 == EW 10
    Die erste 1 steht für Bereichsübergreifend
    Im nächsten Byte steht die Bereichskennung (001 = Eingänge)
    Da ist kein Platz mehr für einen DB Aufruf
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  8. Folgender Benutzer sagt Danke zu Paule für den nützlichen Beitrag:

    Airpower (22.06.2009)

Ähnliche Themen

  1. Array von FB Ausgang beschreiben
    Von michal im Forum Programmierstrategien
    Antworten: 6
    Letzter Beitrag: 03.08.2011, 08:58
  2. Array beschreiben
    Von focus81 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 16.08.2010, 14:25
  3. Eindimensionales Array beschreiben
    Von SPS_LB im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 06.09.2009, 03:04
  4. Array von Strings beschreiben
    Von Fluffi im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 30.04.2009, 16:48
  5. Array im Script beschreiben
    Von Neuling74 im Forum HMI
    Antworten: 2
    Letzter Beitrag: 16.06.2007, 08:59

Lesezeichen

Berechtigungen

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