[ Newbie ] Speicheradressierung und Datentypen

caret

Level-1
Beiträge
82
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo;

Hardware: OP77B mit S7-200
Software: WinCC flexible 2004 compact

Als Newbie versuche ich eine Steuerung mit obigen Komponenten zu realisieren. Arbeite dazu auch die zur Hardware mitgelieferten Tutorials durch. Aber zwei Dinge krieg ich nicht raus:

a) Wieso nehmen Bool-Variable im WinCC Simulator die Werte 0 und -1 an? Sollte das nicht 0 und 1 sein?

b) Ich habe zwei Variablen, die zyklisch fortlaufen aktualisiert werden ,definiert: VW0 und VB1
Meinem Verständnis der Anleitung nach besteht VW0 aus den beiden Bytes VB0 und VB1, wobei VB1 die Bits 0 bis 7 und VB0 die Bits 8 bis 15 von VW0 darstellt. Wenn ich aber den Wert von VW0 im Simulator oder durch die Steuerung verändere, ändert sich der Wert von VB1 jedoch nicht. Wie kann das sein? VB1 ist doch das Lower Byte von VW0 oder etwa nicht.

(c; bEn
 
Nachtrag zu b)

Das Problem scheint nicht bei der Aderssierung zu entstehen, sondern dadurch, dass ich unterschiedliche Variablen mit überlappenden Adressbereichen definiere. Will heissen: Ich definiere zwei externe Variable A und B beide als VW0.

Das Prob was ich damit hab ist, dass ich Störmeldungen nur über DatenTyp WORT projektieren kann. Möchte ich aber z.B. testhalber mit dem OP77 eine Störmeldung erzeugen können, d.h. durch Drücken einer Taste das entsprechende Bit des Störmeldungs-Wortes invertieren, so kann ich nur über DatenTyp BOOL adressieren.

Irgendwie ist es sehr unglücklich, dass man den verschiedenen Funktionen nicht äquivalente Parameter übergeben kann. So kann ich der Funktion Bit Invertieren z.B. nicht VW1.0 übergeben sondern nur V1.0

Kann mir jemand helfen was da im Hintergrund von WinCC passiert, wenn ich zwei Variable mit dem gleichen Speicherbereich definiere? Ist das Prob so ungewöhnlich? Oder ist es so trivial, und ich hab es im Systemhandbuch nur noch nicht gefunden.


(c; bEn
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hi caret,
es ist nun halt mal so das du einen bereich für meldungen deklarierst z.b. 16 meldungen in einem wort , wenn du jetzt eine bestimmte meldung anwählen möchtest setzt du das zur meldung gehörende bit auf high,
also nutzt du zum beispiel vw 0 für störmeldungen hast du die bits von vb 0 und vb 1 für die meldungen. eine einzelne meldung wird dann eben über ein einzelnes bit angesprochen z. b. v1.5.
was da genau im hintergrund abläuft kann ich nicht beantworten, das prinzipt sollte nun aber klar sein vw0 beinhaltet vb0 und vb1


---------------16 bit ( vw0 )----------------

---8bit(vb0)-------------------8bit(vb1)----

v0.7-v0.6-v0.5u.s.w.---v1.7-v1.6-v1.5u.s.w
 
Hallo;

Danke erst einmal für die Anregung. Allerdings beantwortet sie leider nicht meine Frage. Der Aufbau des Speichers und die Adressierung ist mir schon klar. Das Prob was ich hab ist, dass ich eine Variable Störungen als VW0 deklariert habe und dann noch mehrere Bits, z.B. NotAus auf V1.0. Wenn ich nun VW0, in dieser Deklaration ja ein unsigned integer (UINT), auf 1 setze, kommt ganz korrekt die Störmeldung "NotAus betätigt". Wenn ich aber V1.0 auf 1 setze bekomme ich jedoch keine Störmeldung!

Ich kann also VW0 und V1.0 unabhängig voneinander verändern. Das kann aber nicht sein, da sie sich die beiden Variable den Speicherbereich teilen. Eine Änderung von V1.0 muss auch den Wert von VW0 beeinflussen. Tut es aber nicht. Und das ist das Problem.
 
hi caret,
ok, was ich nicht verstehe ist weshalb du 2 versch.variablen des op´s auf eine variable,in diesem fall vw0 der steuerung deklarierst ( was soll das bewirken ?), deine vermutung , daß v1.0 nicht in vw0 enthalten ist kann ich nicht teilen , wie kommst du darauf, daß wenn ich v1.0 auf 1 setze sich der wert von vw0 nicht ändert?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
gast schrieb:
ok, was ich nicht verstehe ist weshalb du 2 versch.variablen des op´s auf eine variable,in diesem fall vw0 der steuerung deklarierst ( was soll das bewirken ?),

Siehe Oben: Ich möchte eine Störmeldung per Tastendruck auf dem OP auslösen. Dazu projektiere ich das Ereignis "Bit invertieren" für eine Taste. "Bit Invertieren" bekommt als Parameter eine BitAdresse (BOOL). Meldungen lassen sich aber nur über WORT oder INT projektieren. Ergo: Ich brauche 2. verscheidene Variablen

gast schrieb:
deine vermutung , daß v1.0 nicht in vw0 enthalten ist kann ich nicht teilen , wie kommst du darauf, daß wenn ich v1.0 auf 1 setze sich der wert von vw0 nicht ändert?

Ganz einfach: Wenn ich "Runtime uns Simulator starten" ausführe und die entsprechenden Variablenwerte beobachten lasse, kann ich V1.0 ändern ohne dass VW0 eine Änderung erfährt. Beide Variable werden "zyklisch fortlaufend" erfasst.

Kann natürlich sein, dass der Simulator marode ist. Immerhin hat der auch noch ganz andere Probleme, z.B. werden Schriftarten und der Anmeldedialog nicht korrekt angezeigt (gerendert). Aber das sind bisher nur Darstellungsfehler und keine Laufzeitfehler.

(c; bEn
 
Variablen

Wie sind denn deine WinCC-Variablen mit der Steuerung verknüpft.
Bei der 300er musst du dann deinem Stör-Variablen(Wort oder uint) ein Mekerwort (zb. MW10) oder DB-Wort zuweisen.
Wenn du der Bit-Variablen dann zb. ein bit aus diesem bereich zuweist zb. m10.0 und das bit änderst, müsste sich auch der wert der Stör-variablen ändern.
Ob das ohne Steuerungsanbindung nur im Simulator geht wage ich zu bezweifeln.
 
Re: Variablen

Atlantik schrieb:
Wie sind denn deine WinCC-Variablen mit der Steuerung verknüpft.

Wie gesagt: Bin ein Newbie. Wieso muss ich die Variable aus WinCC mit der der Steuerung verknüpfen? Hatte das Systemhandbuch so verstanden, dass "externe Variable" die in WinCC angelegt wurden direkt mit den entsprechenden Speicheradressen der Steuerung verbunden sind, d.h. eine automatische Abbildung des Speichers des OP auf den Speicher der Steuerung stattfindet.

Atlantik schrieb:
Bei der 300er musst du dann deinem Stör-Variablen(Wort oder uint) ein Mekerwort (zb. MW10) oder DB-Wort zuweisen.
Wenn du der Bit-Variablen dann zb. ein bit aus diesem bereich zuweist zb. m10.0 und das bit änderst, müsste sich auch der wert der Stör-variablen ändern.

Benutze ein S7-200. Werd mich im Handbuch über den Meldungsmechanismus der Steuerung schlau machen.

Atlantik schrieb:
Ob das ohne Steuerungsanbindung nur im Simulator geht wage ich zu bezweifeln.
Ähhhm, wozu benötige ich den einen Simulator der nicht simuliert? Ich meine die Darstellungsfehler verkrafte ich ja noch irgendwie. Wenn der nicht alles simulieren kann, würde ich das auch noch akzeptieren. Aber das falsch simuliert wird, d.h. der Siumulator weder Warnungen oder Fehlermeldungen erzeugt oder einfach Situationen die er nicht sumulieren kann nicht zulässt, das ist echt übel. Dann verwirrt der einfach mehr als er nützt.

(c: bEn
 
Zuviel Werbung?
-> Hier kostenlos registrieren
moment,
es gibt auch variable die keine steuerungsanbindung benötigen.Trotzdem woher :?: sollte den vw0 gelesen werden?Du gibst dieser Runtime ja auch kein Steuerungsprogramm.Für die RT-Sim ist ja auch der ganze ablauf der Bildwechsel wichtig die so simuliert werden können.
Teste mal ob du mit variable ohne steuerungsanbindung besser fährst.
 
caret schrieb:
Hallo;

Hardware: OP77B mit S7-200
Software: WinCC flexible 2004 compact

Als Newbie versuche ich eine Steuerung mit obigen Komponenten zu realisieren. Arbeite dazu auch die zur Hardware mitgelieferten Tutorials durch. Aber zwei Dinge krieg ich nicht raus:

a) Wieso nehmen Bool-Variable im WinCC Simulator die Werte 0 und -1 an? Sollte das nicht 0 und 1 sein?

b) Ich habe zwei Variablen, die zyklisch fortlaufen aktualisiert werden ,definiert: VW0 und VB1
Meinem Verständnis der Anleitung nach besteht VW0 aus den beiden Bytes VB0 und VB1, wobei VB1 die Bits 0 bis 7 und VB0 die Bits 8 bis 15 von VW0 darstellt. Wenn ich aber den Wert von VW0 im Simulator oder durch die Steuerung verändere, ändert sich der Wert von VB1 jedoch nicht. Wie kann das sein? VB1 ist doch das Lower Byte von VW0 oder etwa nicht.

(c; bEn
 
Zurück
Oben