DBD und DBW

Zuviel Werbung?
-> Hier kostenlos registrieren
Online im MC7-Code gibt es nur noch Sprungweiten (vor/zurück, Weite) und keine Labels. Die Labels werden rein vom Editor generiert.
Woher weiß die Online-Ansicht dann, in welcher Reihenfolge ich die Label ursprünglich definiert hatte?
Wenn ich nun eine vierte Sprungmarke vor allen Sprungmarken hinzufüge, dann heißt die Online M004 (egal wie die Offline heißt), obwohl die Marke und der Sprungbefehl vor allen anderen Marken und Sprüngen steht. Lösche ich dann irgendeine hintere Sprungmarke, dann heißt diese zuletzt definierte Sprungmarke M003.

Harald
 
Woher weiß die Online-Ansicht dann, in welcher Reihenfolge ich die Label ursprünglich definiert hatte?
Wenn ich nun eine vierte Sprungmarke vor allen Sprungmarken hinzufüge, dann heißt die Online M004 (egal wie die Offline heißt), obwohl die Marke und der Sprungbefehl vor allen anderen Marken und Sprüngen steht. Lösche ich dann irgendeine hintere Sprungmarke, dann heißt diese zuletzt definierte Sprungmarke M003.
Ist das wirklich so? Dann wären neue Nachforschungen angesagt.

Nach meinem jetzigen Kenttnisstand sind die Label-Bezeichnungen nur im Offline Projekt vorhanden. Wenn der Step7-Manager irgendeine Möglichkeit sieht diese mit einem Online-Stand zu rekombinieren zeigt er diese auch an. Bei einem AG-Abzug eines völlig unbekannten Projektes sollten die Labels eigentlich durchnumeriert dargestellt werden.
Die Logik ist dabei, dass der erste Sprungbefehl (nicht das Ziel) das Label M001 bekommt.

Wie Jochen schon schrieb: die Sprungbefehle im MC7 geben nur die Weite als Integerzahl (mit Vorzeichen) in Words an.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mir ist klar, daß im compilierten Programmcode keine Label für Sprungziele vorhanden sind.

Doch wie erklärt sich folgende Online-Ansicht, bei der die Sprungmarken in der Reihenfolge der ursprünglichen Erstellung nummeriert sind:
Code:
      L     MB     0
      SPL   M001
      SPA   M004
      SPA   M005
      SPA   M003
      SPA   M007
      SPA   M006
M001: SPA   M002
M004: L     1
      SPA   M002
M005: L     2
      SPA   M002
M003: L     3
      SPA   M002
M007: L     4
      SPA   M002
M006: L     5
      SPA   M002
M002: NOP   0
Online muß irgendeine Zusatzinformation zu den Sprungmarken existieren.

Harald
 
Hm, also wenn ich folgendes Programm hochlade:
Code:
      L     MB     0
      SPL   tes1
      SPA   tes4
      SPA   tes5
      SPA   tes3
      SPA   tes7
      SPA   tes6
tes1: SPA   tes2
tes4: L     1
      SPA   tes2
tes5: L     2
      SPA   tes2
tes3: L     3
      SPA   tes2
tes7: L     4
      SPA   tes2
tes6: L     5
      SPA   tes2
tes2: NOP   0

kommt beim AG-Abzug bzw. Online-Sicht:
Code:
      L     MB     0
      SPL   M001
      SPA   M002
      SPA   M003
      SPA   M004
      SPA   M005
      SPA   M006
M001: SPA   M007
M002: L     1
      SPA   M007
M003: L     2
      SPA   M007
M004: L     3
      SPA   M007
M005: L     4
      SPA   M007
M006: L     5
      SPA   M007
M007: NOP   0
 
Wen es interessiert, im Anhang der aus der CPU zurückgelesene Baustein. Die Label-Nummerierung in Erstell-Reihenfolge ist dabei erhalten geblieben.

Harald
 

Anhänge

  • Labelonline.zip
    22,8 KB · Aufrufe: 2
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn du in deinem Step7-Projekt eine S7-Station und ein S7-Programm hast, dann aus der S7-Station den Baustein hochlädst, und dann aus der Onlinesicht den Baustein in das S7-Programm kopierst, weiß der Step7-Manager dass der Baustein aus der S7-Station stammt und kombiniert Online/Offlinestand entsprechend.
Huch, schwierig. Aber anders kann ich mir das nicht erklären.
 
Wenn du in deinem Step7-Projekt eine S7-Station und ein S7-Programm hast, dann aus der S7-Station den Baustein hochlädst, und dann aus der Onlinesicht den Baustein in das S7-Programm kopierst, weiß der Step7-Manager dass der Baustein aus der S7-Station stammt und kombiniert Online/Offlinestand entsprechend.
Huch, schwierig. Aber anders kann ich mir das nicht erklären.
Zum Online-gehen habe ich extra ein anderes Projekt benutzt, in dem nur ein leeres "S7-Programm" ohne Hardware vorhanden ist. Step7 kann eigentlich nicht wissen, auf welchem Offline-Baustein der Online-Baustein basiert.
Wahrscheinlich hat das Online-gehen per "Erreichbare Teilnehmer" den gleichen Effekt.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Beim Online-Öffnen des Bausteins kommen auch die Hinweise:
- keine Parameter- und Lokalvariablennamen verfügbar
- der Baustein enthält keine Symbolinformation
was nicht passieren würde, wenn Step7 den Online-Baustein einem Offline-Baustein zuordnen könnte.

Harald
 
Ich habe nun mal die M003 und den Sprung zu M003 gelöscht (siehe #23).
Online-Effekt:
die Labelnummern M001 und M002 bleiben erhalten, M004 bis M007 heißen nun M003 bis M006:
Code:
      L     MB     0
      SPL   M001
      SPA   M003
      SPA   M004
      SPA   M006
      SPA   M005
M001: SPA   M002
M003: L     1
      SPA   M002
M004: L     2
      SPA   M002
M006: L     4
      SPA   M002
M005: L     5
      SPA   M002
M002: NOP   0

Harald
 
Hallo, liebe TE !

1)das war die Frage....
Hallo SPS´ler
Bin gerade beim verstehen von registerindirekten und speicherindirekten Adressierung.

2) eine der (richtigen) Antworten...
Hallo.. bevor du irgendwo ein wort hintransferieren kannst musst du es anlegen in einem datenbaustein...
allerdings muss der datenbaustein angelegt sein, auf die plcsim eingespielt und im datenbaustein muss der bereich existieren!
also t db1.dbw 10

3) Das war eine (falsche ? ) Antwort
Aus
Code:
AUF DB1
T DBW10
Wird nach abspeichern und neu öffnen sowieso
Code:
T DB1.DBW10

4) Das eine der Reaktionen darauf ...
ab welcher Version soll das so sein? André

5) und die Korrektur ...
Puhh, weis nicht, hab's grad probiert aber stimmt es geht nicht, kann sein das dies auch nur Online möglich war!

6) und das Ziel der Diskussion...
Ne für die Sprungmarken gibts keine Tabelle die werden anhsnd der Sprünge, in denen ja die Anzahl der Wörter steht erstellt. Glaub der erste Sprung bekommt M000 kann aber sein das es auch das erste Ziel war (hab ich auch so realisiert)
Jo von den Netzwerken gibts eine Liste im Online Baustein.l

Wenn du in deinem Step7-Projekt eine S7-Station und ein S7-Programm hast, dann aus der S7-Station den Baustein hochlädst, und dann aus der Onlinesicht den Baustein in das S7-Programm kopierst, weiß der Step7-Manager dass der Baustein aus der S7-Station stammt und kombiniert Online/Offlinestand entsprechend.
Huch, schwierig. Aber anders kann ich mir das nicht erklären.

habe dies Thema interessiert verfolgt, will ja schliesslich auch noch lernen...
aber eine schlüssige Antwort zum Thema habe ich bisher nicht erkennen können...
ausser Sprungmarken-Tabellen... online/offline-Darstellung ... Nummerierung von Labeln... Zusammenfassung zum vollqualifizierten Zugriff...

Wo ist denn nun der Unterschied zur registerindirekten und speicherindirekten Adressierung ?

Gruss
Stefan
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@S_Everz

Na, für Kritik sind wir doch offen.
Ich stell denn einfach mal ein paar Auszüge aus der Siemens-Hilfe ein, das kann man ja schließlich alles nachlesen. :ROFLMAO:

Speicherindirekte Adressierung

Programmanweisungen, die mit der speicherindirekten Adressierung arbeiten, setzen sich zusammen aus einer Operation, einem Operandenkennzeichen und einer [Adresse] (die Adresse muß in eckigen Klammern angegeben werden). Je nach Operandenkennzeichen wertet die Operation die Daten, die an der angegebenen Adresse abgelegt sind, als Pointer im Wort- bzw. im Doppelwortformat aus. Das zu wählende Pointerformat ist abhängig von dem verwendeten Operanden. Der vollständige Operand der Daten besteht aus einem Operandenkennzeichen und einem Pointer (siehe folgende Beispiele). Der Vorteil der indirekten Adressierung ist, daß Sie den Operanden der Anweisung während der Programmbearbeitung dynamisch modifizieren können.


Bereichsinterne, registerindirekte Adressierung

Programmanweisungen, die mit der bereichsinternen, registerindirekten Adressierung arbeiten, setzen sich zusammen aus einer Operation und den folgenden Teilen: Operandenkennzeichen [Adreßregister-Kennung, Operand].

Das Adreßregister und der Operand müssen zusammen in eckigen Klammern angegeben werden. Der vollständige Operand der Daten setzt sich zusammen aus dem Operandenkennzeichen, dem Inhalt eines Adreßregisters und einem Versatz-Pointer (siehe folgende Beispiele). Vorteil der bereichsinternen, registerindirekten Adressierung ist, daß Sie den Operanden der Anweisung während der Programmbearbeitung dynamisch modifizieren können.

Der Operand der Daten, die bearbeitet werden sollen, wird indirekt von zwei Pointern angegeben. Der Pointer im Doppelwortformat, der in der Anweisung = A [AR1, P#1.1] angegeben wird, wird als Versatz ausgewertet, der zu dem Inhalt des Adreßregisters addiert wird.

In das Adreßregister, auf das in der Anweisung = A [AR1, P#1.1] verwiesen wird, muß bereits ein anderer Pointer im Doppelwortformat geladen sein. Die genaue Adresse der Daten, die bearbeitet werden sollen, errechnet sich durch Addieren der beiden Pointer.

Bereichsübergreifende, registerindirekte Adressierung

Programmanweisungen, die mit der bereichsübergreifenden, registerindirekten Adressierung arbeiten, setzen sich zusammen aus einer Operation und den folgenden Teilen: Operandenkennzeichen [Adreßregister-Kennung, Operand].

Das Adreßregister und der Operand müssen zusammen in eckigen Klammern angegeben werden. Der vollständige Operand der Daten setzt sich zusammen aus dem Operandenkennzeichen, dem Inhalt eines Adreßregisters und einem Versatz-Pointer (siehe folgende Beispiele). Vorteil der bereichsübergreifenden, registerindirekten Adressierung ist, daß Sie den Operanden der Anweisung während der Programmbearbeitung dynamisch modifizieren können.

Der Operand der Daten, die bearbeitet werden sollen, wird indirekt von zwei Pointern angegeben. Der Pointer im Doppelwortformat, der in der Anweisung = [AR1, P#1.0] angegeben wird, wird als Versatz ausgewertet, der zu dem Inhalt des Adreßregisters addiert wird.

In das Adreßregister, auf das in der Anweisung = [AR1, P#1.0] verwiesen wird, muß bereits ein bereichsübergreifender Pointer im Doppelwortformat (z.B. P#A1.0) geladen sein. Die Adresse von Daten, die bearbeitet werden sollen, errechnet sich durch Addieren der beiden Adressen der Pointer, die das Byte und das Bit angeben, und durch Decodieren der Bits 24, 25 und 26 des bereichsübergreifenden Pointers, deren Operandenkennzeichen den Speicherbereich angeben. Die Bits, die die Bereichskennung enthalten, werden beim Laden eines bereichsübergreifenden Pointers automatisch codiert.
 
Hallo, liebe TE !

1)das war die Frage....
Hallo SPS´ler

Bin gerade beim verstehen von registerindirekten und speicherindirekten Adressierung.
Leider nicht ganz richtig, das war nur eine ganz allgemeine Einleitung zu einer Frage, die überhaupt nichts mit indirekter Adressierung zu tun hat (was der TE auch selber erklärt hat).

Die Frage war:
In meinem Buch wird immer von einem DBD oder DBW gesprochen. Nur wenn ich in das Datendoppelwort einen Wert transferieren will, geht PLCSIM auf STOP. Laut Buch sollte es aber gehen
Was mach ich falsch?

P.S. Ich weiß, dass ich auch MW nehmen könnte und das es nichts mit registerindirekten und speicherindirekten zu tun hat.
Die Frage war beantwortet, das fehlerhafte Programmbeispiel korrigiert und Hinweise gegeben, woran es noch liegen kann.
Vom TE keine Reaktion, keine Nachfrage. Thema erledigt.

Wenn ein Fragesteller hier eine Frage einwirft und sich bis Stunden nach den ersten Antworten nicht mehr meldet, dann kann es schon passieren, daß der Thread sich von der eigentlichen Frage entfernt und interessantere Seitenaspekte des Themas aufgreift.

Trotzdem auch Asche auf mein Haupt, war ich doch derjenige, der zum Schluß die allermeisten themenfremden Beiträge hier fabriziert hat. ;)

habe dies Thema interessiert verfolgt, will ja schliesslich auch noch lernen...
aber eine schlüssige Antwort zum Thema habe ich bisher nicht erkennen können...
[...]
Wo ist denn nun der Unterschied zur registerindirekten und speicherindirekten Adressierung ?
Hallo, lieber Stefan!
Da Du das Thema verfolgt hast, weil Du Dich für indirekte Adressierung interessiert hast, hättest Du Deine präzise Frage gerne auch schon eher stellen können und damit den Thread zum vermeintlichen Frage-Thema zurückbringen können.

Zu Deiner Frage hätte ich ebenfalls Antworten gehabt, doch nun hat Ralle Deine Frage schon so erschöpfend beantwortet, daß ich nichts mehr weiter beisteuern kann.

Harald
 
@S_Everz
Na, für Kritik sind wir doch offen.
Ich stell denn einfach mal ein paar Auszüge aus der Siemens-Hilfe ein, das kann man ja schließlich alles nachlesen.

--> Bin jetzt doch etwas irritiert, das ein Super-Moderator hier eingreift ...??? :confused:

Die Frage war beantwortet, das fehlerhafte Programmbeispiel korrigiert und Hinweise gegeben, woran es noch liegen kann.
Vom TE keine Reaktion, keine Nachfrage. Thema erledigt.
Wenn ein Fragesteller hier eine Frage einwirft und sich bis Stunden nach den ersten Antworten nicht mehr meldet, dann kann es schon passieren, daß der Thread sich von der eigentlichen Frage entfernt und interessantere Seitenaspekte des Themas aufgreift.

Trotzdem auch Asche auf mein Haupt, war ich doch derjenige, der zum Schluß die allermeisten themenfremden Beiträge hier fabriziert hat. --> Joo :p
Harald

Ja, okay, hab´s verstanden...:cool:

Harald, nebenbei: du hast aber wirklich nächtliche Arbeitswut ... !!

Danke an Ralle und Harald !

Gruss
Stefan
 
Zuviel Werbung?
-> Hier kostenlos registrieren
--> Bin jetzt doch etwas irritiert, das ein Super-Moderator hier eingreift ...??? :confused:



Ja, okay, hab´s verstanden...:cool:

Harald, nebenbei: du hast aber wirklich nächtliche Arbeitswut ... !!

Danke an Ralle und Harald !

Gruss
Stefan

Warum das denn, ich antworte halt auch mal auf Fragen!
:ROFLMAO:
 
Möglicherweise existiert im Online-Programm eine unsortierte Tabelle der Sprungziele, wo die Sprungziele in der Programmier-Reihenfolge eingetragen sind und der AWL-Editor generiert dann bei der Online-Ansicht Sprungmarken-Namen nach dem Schema M<Tabellenindex>? Oder der AWL-Editor vergibt schon bei der Programmierung "absolute" Sprungmarkennummern, die die Offline-Ansicht nur darstellt?
Ein Hinweis auf die Liste der Sprungziele/Marken:

Hilfe zum SIMATIC Manager
Dialogfeld "Bausteine vergleichen" > Details > Hilfe
Hinweis

Die Baustein-Gesamtlänge kann sich auch bei Gleichheit der Bausteine unterscheiden. Der Grund liegt in der Wiederverwendung eines internen Puffers. Dieses Verhalten tritt beim Hinzufügen/Löschen von Sprüngen im Editor auf. Der Puffer für die Ablage von Sprüngen wird nicht mehr auf die benötigte Länge zurückgesetzt, sondern bleibt für die Wiederverwendung erhalten. Auf das Vergleichsergebnis hat dieser Umstand jedoch keinen Einfluss.

Harald
 
Zurück
Oben