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

Ergebnis 1 bis 6 von 6

Thema: Seltsamer Effekt bei DB Auslesen in einer Schleife

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich habe hier gerade eine Anwendung bei der ich eine Heizungsrückschaltung einer Industrieanlage realisieren muss.

    Hintergrund:

    In der Anlage sind 20 Heizlasten zwischen 15kW und 66kW vorhanden. Insgesamt darf aber von der Anlage maximal 500kW gezogen werden.
    Bestimmte Lasten dürfen zurückgeschaltet werden, andere auf keinen Fall.

    Die Heizungsregelung ist bereits vorhanden.

    Vorgehensweise:

    1. Ich ersetze in der Heizungsregelung die Ausgänge mit Merkern
    2. Ich summiere anhand der Merker die aktuelle Anforderung an Leistung der Anlage, entscheide welche Heizungen ich zurückschalte, welche heizen dürfen und gebe das an die Ausgänge entsprechend weiter.

    Realisierung:

    Ich habe 4 Datenbausteine

    DB50 beinhaltet 20x die Pointeradresse der Merker
    DB51 beinhaltet 20x die Pointeradresse der Ausgänge
    DB52 beinhaltet 20x die jeweilige Heizlast in kW für jeden der 20 Kanäle
    DB53 beinhaltet 20x die Information ob ein Kanal rückgeschaltet werden darf oder nicht.

    Diese 4 DBs lasse ich im 10s Takt routieren, damit bei der nachfolgenden Schleife jeweils die Verteilung der Kanäle eine andere ist.

    In einer Schleife addiere ich die angeforderten Lasten auf, überschreitet die Summe der bisheringen Lasten das Maximum werden nachfolgende Kanäle einfach nicht geschaltet.

    Dabei habe ich nun folgenden Effekt.

    Ich habe eine lokalvariable namens #index, die ich von 0 bis 19 hochzähle.

    Um einen Pointer zu laden gehe ich wie folgt vor:

    Code:
     L #index
    L 4
    *I
    SLD 3
    LAR 1
    AUF DB 50
    L [AR1,P#0.0]
    T #merker
    das funktioniert einwandfrei.

    Lade ich allerdings nun das MW mit der Last:
    Code:
     L #index
    L 2
    *I
    SLD 3
    LAR 1
    AUF DB 52
    L [AR1,P#0.0]
    T #Last
    bin ich immer um ein Datenwort nach hinten verschoben, im Vergleich zum Merker der ja als dword vorliegt, die Last liegt als int vor.

    Weiß jemand wo mein Denkfehler liegt?

    Danke.
    Zitieren Zitieren Seltsamer Effekt bei DB Auslesen in einer Schleife  

  2. #2
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von WolfgangP Beitrag anzeigen
    bin ich immer um ein Datenwort nach hinten verschoben, im Vergleich zum Merker der ja als dword vorliegt, die Last liegt als int vor.
    frage: welches wort spricht er denn bei #index=0 an? DB52.DBW-2 gibts ja nich
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  3. #3
    WolfgangP ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.06.2008
    Beiträge
    10
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ok das hätte ich dazusagen sollen

    bei #index=0 liest er das DB52.DBW2 an. Ich bin draufgekommen weil mir die SPS in Stopp gegangen ist und der effekt erst weg war als ich ein 21. Datenwort angefügt hatte. Dann hab ich gesehen dass immer das nächsthöhere DW gelesen wird. Ich erhöhe aber definitiv den #index nicht.

  4. #4
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    wie wird denn der #index gebildet? wird er definitiv auf null gesetzt? denn DBW2 deutet ja auf eine 1 im index hin, oder? ...denn der code ist so ja in ordnung...
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  5. #5
    Registriert seit
    24.05.2006
    Beiträge
    234
    Danke
    14
    Erhielt 77 Danke für 57 Beiträge

    Standard

    Also so, wie der Code dasteht, funktioniert er sowieso nicht. Bei mir mault da der Simatic Manager sofort die Zeilen
    Code:
    L [AR1,P#0.0]
    an.
    Vielleicht liegt da der Hase im Pfeffer. Beim Laden des Pointers (DWord breit) passt wohl
    Code:
    L DBD[AR1,P#0.0]
    Bei den Ints hingegen ein
    Code:
    L DBW[AR1,P#0.0]
    Das verschobene Wort würde sich damit auch erklären lassen, wenn immer ein Doppelwort geladen wird.

  6. #6
    WolfgangP ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.06.2008
    Beiträge
    10
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Gnaaa... Dummheit muss bestraft werden...

    Es lag am Aufruf natürlich DBW statt DBD.

    Ich habs grad selbst gefunden....


    Thx

Ähnliche Themen

  1. Mit Schleife DB-Werte rückwärts auslesen?
    Von Rauchegger im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 28.10.2011, 10:46
  2. Realisierung einer Schleife
    Von simon-brl im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 05.07.2011, 20:56
  3. Antworten: 23
    Letzter Beitrag: 12.06.2011, 07:30
  4. Seltsamer Multiinstanzaufruf
    Von Zonk1982 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 19.11.2008, 12:22
  5. Antworten: 6
    Letzter Beitrag: 21.11.2005, 18:27

Lesezeichen

Berechtigungen

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