Word und Byteverarbeitung

woody

Level-1
Beiträge
68
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo bin neu hier und suche Antworten zum Thema Word und Byteverarbeitung.

also ich weiss dass 1 wort ......2 Byte oder 16 Bit sind...

so jetzt mein Problem ....wie verwende ich jetzt das Eingangsbyte....
Also es gibt ein befehl zb.
LD EB1
heisst das jetzt das ich meine 8 sensoren die jetzt Signal haben etwas zuweisen kann?
kann ich damit in der awl mein Programm verkürzen in dem ich einByte benutze statt mehrere UND -oder Glieder?

Wäre cool wenn mir das einer erklären kann
 
Nein ... zuweisen kannst du da so nichts - wäre auch nicht sinnvoll ...
Diese Operation wäre interessant, wenn du z.B. ein bestimmtest Bit-Muster abfragen / vergleichen möchtest ...

Was hast du denn vor / worum geht es dir ?

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ja also Mach ja den Techniker bei der sgd ....

Zum Thema SPS klappt das eigentlich ganz gut mit dem programmieren in awl und FUP
Das verarbeiten von Binären Signalen klappt auch ganz gut sowie Speicherverhalten usw ...


Das Thema mit der Wortverarbeitung oder Byte ist so schlecht erklärt das man da nichts kapiert. Ich weiss nicht wie man das so verwendet.

grüsse
 
Ich muss nachher in der Firma Künftig Die Umgebung der Step 7 anwenden ...Dort haben wir Simatic 300.

Ich dachte ich frage mal nach den Profis :smile:
 
Wie Larry schon sagte, du kannst Eingängen natürlich nichts zuweisen.
Aber du kannst Eingänge natürlich als Byte, Word oder auch Doppelwort abfragen.

L EB1 lädt dir also die Bit 1.0 bis 1.7 als Byte in den Akku.
Sind alle 8 Bit True, steht im Akku dann

2#1111_1111

Ist Bit 0 ud Bit 1 True steht dort

2#0000_0011

Das wäre dann Dezimal eine 3.

Also könntest du einen Vergleicher haben:

L EB1
L 3
==I
= M100.0

M100.0 wäre nur True, wenn E1.0 und E1.1 True, sowie E1.2-E1.7 False ist.

Gleiches Ergebnis wäre:

U E1.0
U E1.1
UN E1.2
UN E1.3
UN E1.4
UN E1.5
UN E1.6
UN E1.7
= M100.0

Aber Achtung:

U E1.0
U E1.1
= M100.0

liefert ein anderes Ergebnis, denn hier sind die
E1.2-E1.7 egal, also auch wenn diese True sind, würde M100.0 True werden.

Bei Ausgängen kann man so auch mehrer Bits gleichzeitig zuweisen.

L 3
T AB1

ergibt:
A1.0 = True
A1.1 = True
A1.2 = False
A1.3 = False
A1.4 = False
A1.5 = False
A1.6 = False
A1.7 = False

Hier ist darauf zu achten, dass, wenn irgendwo vor dieser Anweisung z.B. der A 1.7 True gesetzt wurde, er hier wieder überschrieben wird, mit False!!!
Also würdest du an der Ausgangsbaugruppe niemals ein True an A1.7 sehen.

PS: Beachte, bei Word- und DWord-Zugriffen, die Reihenfolge der Bytes, dazu gibt es hier im Forum schon etliche Beiträge.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Guter Beitrag ralle damit kann ich schon mal was anfangen...

Der Vergleich von dir dient aber nur für zähl Operationen wegen L3 oder?
Ich mein der Vergleicht dann später den Eb1 im akku1 mit Akku 2?!

Wenn ich denn eine signalabfrage mach mit meinen Aktoren so dass alle Zylinder in Grundstellung sind dann hab ich doch ein bitmuster 1111_1111
Kann ich jetzt den ladebefehl
LD EB 1
=M1.0

Anwenden?
 
Nein, nicht ganz.

wenn alle Bits 1 sind:

L EB1
L 2#1111_1111
==I
= M100.0

oder in Hex

L EB1
L B#16#FF
==I
= M100.0

oder in Dez

L EB1
L 255
==I
= M100.0

Alle 3 Vergleiche sind identisch und liefern nur dann M100.0 = True, wenn alle Bits 1 sind.

Es gibt noch andere Varianten und Befehle zur Wortverarbeitung (wortweise verunden, verodern, schieben, rotieren).
Auch tricky Varianten, bei denen man dann über Registerflags betimmte Ergebnisse von Operationen ohne einen Vergleicher abfragen kann, aber o.g. Methoden und besonders die verschiedenen Datenformate für ein und die selbe Zahl sollte man zuerst einmal verinnerlichen.

Du kannst grundsätzlich vergleichen, was immer du willst, wenn du dir über die Formate im Klaren bist.
 
L 3
T AB1

ergibt:
E1.0 = True
E1.1 = True
E1.2 = False
E1.3 = False
E1.4 = False
E1.5 = False
E1.6 = False
E1.7 = False

Hier ist darauf zu achten, dass ...
... natürlich nicht die E1.x sondern die A1.x beeinflußt werden.
Was dem Ralle natürlich vollkommen klar ist (bestimmt nur ein Coppy & Paste-Fehler) und hoffentlich auch der woody bemerkt hat.
:ROFLMAO:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... natürlich nicht die E1.x sondern die A1.x beeinflußt werden.
Was dem Ralle natürlich vollkommen klar ist (bestimmt nur ein Coppy & Paste-Fehler) und hoffentlich auch der woody bemerkt hat.
:ROFLMAO:

Klar C&P, ich verbesser das mal!
 
Hi...
auf den ersten blick ist es mir nicht aufgefallen...aber nachdem du es gesagt hattest dann ja :)

so nochmal eine Kurzfassung....
zu dem angegebenen Beispiel oben mit den Zylindern....

LD EB0
L255 --------> entspricht dem Bitmuster 1111_1111
==I
=M1.0

Sind alle Eingänge True ist M1.0 auch True.....soweit klar.
Ist einer der Bits False ist M1.0 auch false ....soweit klar.

Zum Verständnis sagt mir das jetzt das wenn die Grundstellungsfahrt der Zylinder erfolgt ist dem Merker 1.0 True zugewiesen wird.
Wenn ein Zylinder zb klemmt oder ähnlich hätte einer der Bits den wert 0 somit false und der Merker 1.0 auch false.
Da man mit M1.0 weiterarbeiten kann könnte man somit eine Störmeldung ausgeben sobald M1.0 false wird.

Ist das so zu Verstehen?

Wenn ich damit richtig liege würde ich gerne wissen was der genau vergleicht ?????
Also wenn der EB0 geladen wird mit dem muster 255 -----> 1111_1111 beginnt ja die abfrage oder?
Vergleicht er dann ob das muster tatsächlich anliegt ? dem entsprechend ist M1.0 True / false

grüsse
 
L EB0 ---------> Lade EB0 in Akku1
L 255 ---------> Schiebe inhalt Akku 1 in Akku2 und lade 255 in Akku1
==I ---------> Vergleich Akku1 mit Akku2 auf gleich
= M1.0 ---------> wenn vergeleich ist TRUE wurde M1.0 hoch.

Gruss,

Joop
 
Zuviel Werbung?
-> Hier kostenlos registrieren
aaahh ok jetzt wird mir einiges klarer ....

wenn ich EB0 in Akku 1 geladen habe warum muss ich dann den Inhalt nochmal in Akku 1 schieben und 255 wieder hin und her ?
wo macht denn das eigentlich sinn?
 
Das macht das Betriebssystem der SPS.

L EB1 --> lädt in Akku 1

ein darauffolgendes
L 255 --> schiebt Akku 1 in Akku 2 und lädt 255 in Akku 1

wenn man nun einen Vergleicher programmiert
==I --> wird Akku 1 mit Akku 2 verglichen
 
okay das kann man dann auf alle vergleichsoperationen anwenden

zb ==
<>
>
<
>=
<=

also soweit habe ich es jetzt verstanden.......jetzt kommt noch der Merkerbyte und Merkerword :)
Den EB 0 und den AB 0 Kenn ich ja jetzt bereits ....

Wann habe ich den MB 0 ?

Ist das dann der M1.0 den ich vorhin beschrieben habe ....da er mit einem EB 0 abgefragt wird?
 
Hallo also ich wollte nochmal danke sagen ....nachdem ich jetzt alles so durchgekaut habe bin ich mit dem merker auch noch drauf gekommen ....
 
Zurück
Oben