MW und Merker

waldy

Well-known member
Beiträge
1.601
Punkte Reaktionen
107
Zuviel Werbung?
->Hier kostenlos registrieren
hallo,
habe heute bischen programmiert
für S/R Trigger habe ich M0.0 gegeben und am Ausgang vom Zähler habe ich MW0 gegeben.
Und wenn zähler beginnt zählen , dann Trigger S/R geht praktisch immer auf 0 .
Die Programm hat Falsch gelaufen, danach habe ich am ausgang zähler Merkerwort geändert als MW30
seit dem läuft alles richtig.
warum ist so?

gruß waldy
 

Zottel

Well-known member
Beiträge
2.299
Punkte Reaktionen
277
Weil der Merker M0.0 Bestandteil von MW0 ist. Wenn Dein Trigger 1 ist, ist MW0 1, wenn Du nicht noch andere Merker 0.x oder 1.x benutzt hast. Wenn der zähler zählt, zählt er von 1 auf 2. Dadurch ist M0.0=0 und M0.1=1. Damit ist der Trigger ausgeschaltet.
Noch einmal:
Merker, Merkerbytes und Merkerworte benutzen denselben Speicherbereich. Die folgende Tabelle zeigt, was mit Merkerbyte und wort passiert, wenn Du einen einzelnen Merker setzt:
Code:
Merker MB0 MB1 MW 0
M0.0 	1 0 1
M0.1 	2 0 2
M0.2 	4 0 4 
M0.3 	8 0 8
M0.4 	16 0 16
M0.5 	32 0 32
M0.6 64 0 64
M0.7 128 0 128
M1.0 0 1 256
M1.1 0 2 512
M1.2 0 4 1024
M1.3 0 8 2048
M1.4 0 16 4096
M1.5 0 32 8192
M1.6 0 64 16384
M1.7 0 128 32768
Wenn im Merkerwort MW 0 12345 steht, kannst Du so ausrechnen, welche Merker gesetzt sind:
Code:
12345
-8192 Merker 1.5
--------
 4153
-4096   Merker 1.4
---------
     57
    -32  Merker 0.5
----------
     25
    -16 Merker 0.4
---------
       9
      -8   Merker 0.3
---------
       1  Merker 0.0
[/code]
 
OP
W

waldy

Well-known member
Beiträge
1.601
Punkte Reaktionen
107
Zuviel Werbung?
->Hier kostenlos registrieren
hallo, danke für Antwort,
also wen habe ich richtig verstanden, dann Programme muss so aussehen, dass Merker und MW sollen keine gleiche nummer haben.Wenn benutzte ich M0.0, dann als MW muss ich schon MW1 nehmen
, dann als nächste Merker kommt M2.0 und danach wider MW3

gruß waldy
 

volker

Supermoderator
Teammitglied
Beiträge
5.468
Punkte Reaktionen
935
du kommst der sache zwar schon nahe aber eben nur nahe. :wink:

mw 0 bestet aus mb0 und mb 1, also jeweils 8 bit
mw 1 bestet aus mb1 und mb 2, also jeweils 8 bit
mw 2 bestet aus mb2 und mb 3, also jeweils 8 bit

ein wort besteht halt aus 16 bit, also 2 byte.

mw0--------------------
mb0---------mb1
76543210 765432210
 
OP
W

waldy

Well-known member
Beiträge
1.601
Punkte Reaktionen
107
hallo, danke wie immer für antwort,
ich sehe schon, das hier kann man am bestens info bekommen:)
also wenn habe ich richtig verstanden, es sieht so aus
wenn benutzte ich MW0 (MB0 und MB1 sind besetz), dann al Merker für meine Trigger muss ich schon M3.0 nehmen
ist das richtig?
und als nächste MW - kommt MW4 (die besitz MB4 und MB5)

hoffe bekommen positive Zeugniss :)

gruß waldy
 
OP
W

waldy

Well-known member
Beiträge
1.601
Punkte Reaktionen
107
Frohe Weihnahten!

Hallo alle zusammen,
möchte für alle Danke sagen, weil mir hat hier gut geholfen,
und ich wünsche für alle Frohe Weihnahten!
gruß waldy
 
OP
W

waldy

Well-known member
Beiträge
1.601
Punkte Reaktionen
107
alte fehler in programm?

hallo, heute wolte ich alte Programm in PG bischen nacharbeiten und was habe ich da gefunden:

PB10 - M31.0

FB1, FB20 - MW30

ist das Falsch oder nicht, obwohl so wie ich weiss, wenn benutzte ich MW30, dann normaleweise Merker solte als M32.0 kommen, oder denke ich falsch

gruß waldy
 

Zottel

Well-known member
Beiträge
2.299
Punkte Reaktionen
277
Zuviel Werbung?
->Hier kostenlos registrieren
Re: alte fehler in programm?

waldy schrieb:
MW30, dann normaleweise Merker solte als M32.0 kommen,
MW 30 = MB 30,MB31
M31.0 1
M31.1 2
M31.2 4
M31.3 8
M31.4 16
M31.5 32
M31.6 64
M31.7 128
M30.0 256
M30.1 512
M30.2 1024
M30.3 2048
M30.4 4096
M30.5 8192
M30.6 16384
M30.7 32768
 
OP
W

waldy

Well-known member
Beiträge
1.601
Punkte Reaktionen
107
hallo,
na ja, wie habe ich schon geschrieben, diese Programm hat schon füher jemand geschrieben
und ich möchte fragen, hat diese Programmierer es richtig geschrieben:

PB10 - M31.0

FB1, FB20 - MW30


so wie hat mir schon hier früher erklärt
es muss so sein:
wenn steht MW30 , dann als normale Merker die kommt nächste ab M32.0

oder es spielt keine Rolle, weil M31.0 steht in PB10, und MW30 steht in FB1

kann man mir noch mal langsam erklären,
ob die Programme war Falsch geschrieben oder ich habe noch nicht verstanden

gruß waldemar
 

Zottel

Well-known member
Beiträge
2.299
Punkte Reaktionen
277
na ja, wie habe ich schon geschrieben, diese Programm hat schon
so wie hat mir schon hier früher erklärt
es muss so sein:
wenn steht MW30 , dann als normale Merker die kommt nächste ab M32.0
Normalerweise ja.
oder es spielt keine Rolle, weil M31.0 steht in PB10, und MW30 steht in FB1
Nein, damit hat es garnichts zu tun
kann man mir noch mal langsam erklären,
ob die Programme war Falsch geschrieben oder ich habe noch nicht verstanden
Ob das Programm richtig oder falsch ist, kann Dir niemand aufgrund dieser Angaben sagen. Da muss man schon das ganze Programm kennen.
Es gibt zwei Möglichkeiten, sowohl MW30 als auch M31.0 zu benutzen:

1. Der Teil, in dem MW30 verwendet wird, benutzt MW30 für ein Zwischenergebnis, dass im folgenden Programm keine Bedeutung mehr hat. In einem anderen Programmteil wird M31.0 benutzt ,ohne dass sein Zustand zu Beginn dieses Programmteils wichtig wäre. Ob diese beiden Programmteile in verschiedenen oder demselben Baustein stehen, ist dabei völlig egal.
Beispiel:
Teil 1, nimmt den Wert von EW10 mit 10 mal und gibt es auf AW40
aus. Das ist nur ein Beispiel. MW30 wird hier als Zwischenspeicher verwendet. Der Wert am Beginn dieses Abschnitts ist egal.
Code:
L EW 10
SLW 1
T MW 30
SLW 2
L MW30
+F
T AW40
Teil 2, macht etwas mit dem Merker M31.0. Er darf NUR als Zwischenergebnis verwendet werden, weil er am Beginn dieses Abschnitts den zufäliigen Wert des letzten Bits von MW 30 hat.
Code:
U E 17.2
U M16.5 	//Hier dürfte kein Merker aus MW 30 stehen
= M31.0		// Hier ja,weil er gesetzt und nicht gelesen wird
U M31.0		// jetzt darf man damit arbeiten
...
Code wie in diesem Beispiel kann "schlechter Stil" sein. Er entsteht aber leicht z.B. dadurch, dass man Programmteile aus anderen Projekten wiederverwendet. Dabei kann es sinnvoll sein, in eigenen Programmen immer wieder dieselben Adressen für Zwischenergebnisse zu verwenden.

2. Eine ganz andere Möglichkeit ist es, mit Absicht ganze Gruppen von Bits mit Wortbefehlen zu bearbeiten.
Beispiel:
Code:
FB1:
L EW 0 		// alle Signale E0.0 bis E1.7
L MW 30	
BE

FB2:
L EW 20 		// alle Signale E20.0 bis E21.7
L MW 30	
BE
Diese Sache ist sinnvoll, wenn entweder FB1 oder FB2 aber nie beide aufgerufen werden. An EW0 und EW20 könnten hier Signale baugleicher Maschinen angeschlossen sein. Je nach Stellung eines Umschalters soll eine oder die andere Machine benutzt werden.
Ab hier hat M31.0 denselben Wert wie E1.0 oder wie E21.0. Das gilt natürlich sinngemäß auch für alle anderen Bits.
 
Oben