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

Ergebnis 1 bis 4 von 4

Thema: Adressierungs Problem im DB

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich, als SPS "Spielkind", habe ein Problem mit der
    indirekten Adressierung.
    Komischerweise scheint es so wie es jetzt da steht zu
    funktionieren, aber ich weiß nicht genau warum

    Zugegeben ist das was jetzt kommt sicherlich recht
    verwirrend aber es wäre schön wenn Sich jemand die
    Mühe machen könnte mir zu erklären warum (siehe Unten,
    ab Hier kommt's) ich dort ein SLD 4 anstatt des SLD 3
    angeben muß ? Eigentlich muß man doch nur um 3 nach
    links schieben, aber dann funktioniert's nicht.

    Was versuche ich:

    Ein FC bekommt als Parameter 2 Word's
    1. DB Nummer des DB's mit allgemeinen Merkern
    2. DB Nummer des DB's der Device abhängige Parameter enthält.

    Da es mehrere Devices gibt wird der FC immmer mit der gleichen
    DB Nummer der allgemeinen Merker und immer mit der DB Nummer
    des entsprechenden Devices aufgerufen:

    CALL FC3
    DB_Merker:=W#16#4E -- DB allgemeine Merker
    DB_Device:=W#16#1 -- DB des Device

    CALL FC3
    DB_Merker:=W#16#4E
    DB_Device:=W#16#2


    Die Aufgabe des FC's besteht darin die Uhrzeit aus
    dem aktuellen Merker DB zu lesen, temporär zu speichern
    und dann mit einer von 30 Zeiten zu vergleichen.
    Bei Übereinstimmung einer Zeit wird im Device DB ein
    Offset (0-3) (ab 112.0) gelesen. Dieser bestimmt die
    Speicherstelle (10.0 + Offset (0-3)) deren Zeit nach
    18.0 kopiert wird.
    Gleichzeitig wird ein Bit gesetzt.
    Dabei Sind die Zeiten wie folgt im Device DB gespeichert:

    :
    1.1 Start Bit
    :
    10.0 Zeit (10.0 + Zeit Offset 0) S5Time S5T#3S
    12.0 Zeit (10.0 + Zeit Offset 1) S5Time S5T#5S
    14.0 Zeit (10.0 + Zeit Offset 2) S5Time S5T#10S
    16.0 Zeit (10.0 + Zeit Offset 3) S5Time S5T#18S
    18.0 SollZeit S5Time
    :
    22.0 - 51.0 Stunden als Byte
    52.0 - 81.0 Minuten als Byte
    82.0 - 111.0 Sekunden als Byte
    112.0 - 141.0 Offset (0-3) als Byte
    :

    Also so sieht der Anfang aus


    L #DB_Merker
    T #DB_Merker_temp
    LAR1 P#0.0 // AR1 als Zeiger auf ersten Speicherplatz

    AUF DB [#DB_Merker_temp]

    L DBB [AR1,P#1.0] // umkopieren der Zeit
    T #Akt_Tag
    L DBB [AR1,P#2.0]
    T #Akt_Stunde
    L DBB [AR1,P#3.0]
    T #Akt_Minute
    L DBB [AR1,P#4.0]
    T #Akt_Sekunde
    L DBB [AR1,P#6.0]
    T #ArrayIndex // Index der gewünschte Zeit 0-29



    Dann folgen die Device Informationen

    L #DB_Device
    T #DB_Device_Temp
    LAR1 P#0.0 // AR1 als Zeiger auf ersten Speicherplatz des Device

    AUF DB [#DB_Device_Temp]

    TAR1 AR2 // AR2 sollte wie AR1 jetzt auf ersten Speicherplatz des Devices zeigen
    L #ArrayIndex // ArrayIndex = Zeit dies es zu testen gilt
    SLD 3 // Shift um auf Byte Adressierung zu kommen
    +AR2 // und zum Zeiger AR2 addieren, damit sollte AR2 um ArrayIndex Bytes
    // im DB versetzt "zeigen"


    Jetzt Zeit vergleichen


    // ACHTUNG: Da AR2 ja um ArrayIndex versetzt im DB zeigt ergibt
    // für ArrayIndex 10 L DBB[AR2,P#22.0] real L DBB[P#32.0]


    L DBB [AR2,P#22.0] // ************** Stunde prüfen ***************
    L #Akt_Stunde // Aktuelle Stunde laden
    ==I // Stunde gleich ?
    SPB An1 // Ja, weiter bei Minute
    SPA end // Nein, ende

    An1: L DBB [AR2,P#52.0] // ************** Minute prüfen ***************
    L #Akt_Minute
    ==I
    SPB An2
    SPA end

    An2: L DBB [AR2,P#82.0] // ************** Sekunden prüfen ***************
    L #Akt_Sekunde
    ==I
    SPB An3
    SPA end

    An3: SET
    = DBX [AR1,P#1.1] // ************** Bit setzen (AR1 bezieht sich ja noch auf 0.0 ohne ArrayIndex
    L DBB [AR2,P#112.0] // Offset für die Zeit in Akku laden
    SPA Sav



    ////////////////////////////////
    Hier kommt's
    ////////////////////////////////


    Sav: TAR1 AR2 // Offset ist Akku, AR2 auf Array Anfang (AR1 zeigt ja noch auf 0.0) setzen
    SLD 4 // WARUM 4 nach links, eigentlich 3 um auf Byte zu kommen und 4 um Wortadressen zu erzeugen
    +AR2 // Offset zu AR2 addieren

    L DBW [AR2,P#10.0] // Die Zeit laden und (AR2 ist ja um Offset verschoben also 10.0+Offset)
    T DBW [AR1,P#18.0] // ins Soll Feld schreiben

    end: BE


    Ach ja, falls jemand einen Vorschlag hat wie ich die
    Zeiten lesbarer speichern und besser vergleichen kann
    bin ich dafür dankbar.

    PS: Ach und bitte nicht wieder sowas wie SUCHFUNKTION, Danke !
    Grüße
    MarioDisketti
    Zitieren Zitieren Adressierungs Problem im DB  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.263
    Danke
    537
    Erhielt 2.708 Danke für 1.957 Beiträge

    Standard

    Der Offset enthält 0-3

    Du willst dorthin:

    10.0 Zeit (10.0 + Zeit Offset 0) S5Time S5T#3S
    12.0 Zeit (10.0 + Zeit Offset 1) S5Time S5T#5S
    14.0 Zeit (10.0 + Zeit Offset 2) S5Time S5T#10S
    16.0 Zeit (10.0 + Zeit Offset 3) S5Time S5T#18S

    Um dahin zu kommen, muß der angegebene Offset mit 2 multipliziert werden.

    also:

    SLD 3 für die Bildung des Pointers
    SLD 1 für die Multiplikation mit 2 (nichts anderes ist ein SLD 1)

    macht zusammen

    SLD 4
    Geändert von Ralle (06.08.2008 um 22:27 Uhr) Grund: SRD statt SLD reingeschrieben
    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. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    MarioDisketti (06.08.2008)

  4. #3
    Registriert seit
    29.06.2005
    Beiträge
    47
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi Ralle,

    Danke Dir, klar Brett vor Kopf !!!

    Logisch, danke Dir !!! So spät, so schnell !

    Hätte ich garnicht soviel schreiben müssen

    Kleine Anmerkung, es muß natürlich SLD und nicht SRD sein
    Grüße
    MarioDisketti

  5. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.263
    Danke
    537
    Erhielt 2.708 Danke für 1.957 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von MarioDisketti Beitrag anzeigen
    Hi Ralle,

    Danke Dir, klar Brett vor Kopf !!!

    Logisch, danke Dir !!! So spät, so schnell !

    Hätte ich garnicht soviel schreiben müssen

    Kleine Anmerkung, es muß natürlich SLD und nicht SRD sein
    Ja voll korrekt, du hast Recht, ich editiere das mal, damit sich niemand etwas falsches merkt !
    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. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    SIGGI (06.02.2009)

Ähnliche Themen

  1. OPC Problem routen problem
    Von kpeter im Forum Hochsprachen - OPC
    Antworten: 1
    Letzter Beitrag: 25.08.2010, 19:54
  2. S7-315 und CP343-1 Adressierungs Problem
    Von Seth_Gecko im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 07.04.2010, 10:41
  3. Adressierungs Problem?
    Von Baul im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 08.11.2007, 11:48

Lesezeichen

Berechtigungen

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