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

Ergebnis 1 bis 6 von 6

Thema: Adressraum CPU 922

  1. #1
    Registriert seit
    23.03.2006
    Ort
    Thüringen
    Beiträge
    2.005
    Danke
    162
    Erhielt 278 Danke für 199 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich verzweifle langsam über diesem Mist - zunächst die selbst kommentierten Quellen:
    Netzwerk 1 von 1 Bib =
    :L KF 1 franzoesisch
    :L MB 49
    :><F
    :SPB =M001
    :A DB 55
    :SPA =M002
    M001 :L KF 2 englisch
    :><F
    :SPB =M003
    :A DB 56
    :SPA =M002
    M003 :L KF 3 deutsch
    :L MB 49
    :><F
    :SPB =M004
    :A DB 58
    :SPA =M002
    M004 :L KF 4 italienisch
    :><F :SPB =M005
    :A DB 59 spanisch
    :SPA =M002
    M005 :A DB 57
    M002 :B MW 220
    :L DL 0
    :L KH DF00
    :+F
    :LIR 1
    :B MW 220
    :L DR 0
    :+F
    :L KH DF32
    :ENT
    :LIR 1
    :L KH 0014
    :+F
    :TNW 16
    :BE
    Also, bitte korrigieren, wenn ich da was falsch sehe: Letzte Sprungmarke (M002) MW220 trägt eine Adresse, deren Inhalt aus DL0 nach Akku 1 transferiert wird (niederwertiges Byte). Hinzuaddiert wird DF00. Der LIR Befehl benutzt das wiederum als Adresse (steht in Akku 1) für einen Zugriff auf den Lokaldatenspeicher der CPU. Nach dem Handbuch sind das Adressen im DB Bereich. Nur welche? Die sollten ja entsprechend der angelegten DBs nicht ohne weiteres zu ermitteln sein, wenn ich einen bestimmten DB und dessen Inhalt brauche. Und wohin zum Geier schreibt dann TNW? Ich könnte diese Lumpen.

    Gruß
    Mario
    Geändert von mariob (01.02.2009 um 15:15 Uhr) Grund: Formatierung zerlegt
    Zitieren Zitieren Adressraum CPU 922  

  2. #2
    Registriert seit
    01.11.2007
    Beiträge
    1.237
    Danke
    91
    Erhielt 407 Danke für 368 Beiträge

    Standard

    Ich reime mir das so zusammen:
    In den DBs 55-59 gibt es ein DW (die Nummer dieses DW steht im MW220) mit Inhalt : DL=DB-Nummer, DR=DW-Nummer, dies ist die Quelladresse der TNW-Operation, als Ziel dient m.E. der DB50 ab DW20.
    Die Adressen DF00 und DF32 liegen innerhalb der Bausteinadressliste (DB0) und geben, wenn meine Vermutung zutrifft, die Anfangsadresse von DB0 und DB50 an. Zu DF00 wird der Inhalt von DL[MW220] addiert, damit wird dann der gewünschte DB adressiert, das DW aus DR[MW220] kommt noch hinzu.
    Ziel ist der DB50 (Speicheradresse steht in DF32), dazu kommen noch KH0014. Die Quelladresse der TNW-Operation steht im Akku2 und die Zieladresse im Akku1.

    Grüße von HaDi

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

    mariob (02.02.2009)

  4. #3
    mariob ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    23.03.2006
    Ort
    Thüringen
    Beiträge
    2.005
    Danke
    162
    Erhielt 278 Danke für 199 Beiträge

    Standard

    Danke Hadi,
    ich lese dazu nochmal nach, meinst Du, das diese absoluten Werte tatsächlich die DB Nummern adressieren? Nach Handbuch sollte man das doch mit BS Nummern tun, die einem das Betriebssystem bietet. Leserlicher ist es sowieso. Ich bin davon ausgegangen, das je nach Länge und Anzahl der DBs der Adreßraum verschieden belegt sein kann. Mit anderen Worten man müßte nach Erstellung aller DBs erproben wo die Anfangsadressen liegen und dann fest in das Programm eintragen. Anfangsadresse + Versatz ergeben dann die interesssierende Adresse, wie es ja hier gemacht ist.

    Gruß
    Mario

  5. #4
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Idee

    Hallo,

    Zitat Zitat von mariob
    Nach Handbuch sollte man das doch mit BS Nummern tun,

    Hadi hat schon recht mit seiner Behauptung.
    Leider hat der Ersteller des Bausteines sich nicht an die Programmieranleitung gehalten. Anstatt im BS34 die Anfangsadresse zu ermitteln und die DB-Nummer aufzuaddieren, sind hier leider absolute Adressen verwendet worden. Da je nach CPU-Typ der DB 0 aber an unterschiedlichen Speicheradresse liegen kann, ist der Programmcode leider dann zB. nicht auf einer 150U, 928A nicht verwendbar. Also ein gutes Beispiel, wie man es nicht machen sollte.

    Gruß

    Question_mark
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren BS wäre besser gewesen ...  

  6. #5
    Registriert seit
    01.11.2007
    Beiträge
    1.237
    Danke
    91
    Erhielt 407 Danke für 368 Beiträge

    Standard

    Zitat Zitat von mariob Beitrag anzeigen
    Mit anderen Worten man müßte nach Erstellung aller DBs erproben wo die Anfangsadressen liegen und dann fest in das Programm eintragen.
    Nein, das muss man nicht, denn die Anfangsadressen aller Bausteine stehen in der Bausteinadressliste, auch DB0 genannt. Das ist quasi dein Inhaltsverzeichnis des Speichers. Wenn ein Baustein geladen oder gelöscht oder geändert wird, ändert sich auch der Eintrag im DB0. Diese Adressliste belegt einen festen Speicherbereich, der aber dummerweise von CPU zu CPU unterschiedlich ist. Bei deiner CPU922 steht z.B. die Anfangsadresse des DB50 im Wort, das mit DF32 adressiert wird, steht in DF32 eine 0, so ist der Baustein nicht vorhanden. Dies kann man sich zu Nutze machen, wenn man z.B. einen Baustein im Eprom deaktivieren will, denn der DB0 steht immer im RAM.
    Wenn man der Empfehlung von Question_mark folgt und anstatt den absoluten Adressen L BS34 benutzt, liefert deine CPU DF00, eine 115U hat dann E400 und eine 95U hat dann 7E00 im Akku1 stehen und immer ist es die Anfangsadresse des DB0 und damit kommt man durch draufaddieren der DB-Nummer zur Speicherstelle, an der die Anfangsadresse des gewünschten DBs steht. Ein so progammierter Baustein könnte dann auch ohne Änderung auf einer anderen CPU funktionieren und verständlicher und besser nachvollziehbar ist es allemal.

    Bevor nun der erste Einspruch kommt: Ja, ich weiß, dass man bei dieser Berechnung zwischen Wort- und Byte-S5en unterscheiden muss, die Bausteinnummer also einfach oder doppelt addieren muss.

    Grüße von HaDi

  7. Folgender Benutzer sagt Danke zu HaDi für den nützlichen Beitrag:

    mariob (02.02.2009)

  8. #6
    mariob ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    23.03.2006
    Ort
    Thüringen
    Beiträge
    2.005
    Danke
    162
    Erhielt 278 Danke für 199 Beiträge

    Daumen hoch


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke an Euch alle,
    das wirft mich gewaltig nach vorn!

    Gruß
    Mario

Ähnliche Themen

  1. ASi- Link 20E Adressraum in S7/300
    Von Anonymous im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 13.02.2006, 19:15

Lesezeichen

Berechtigungen

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