Analogwerte mit 8MC11 einlesen und vergleichen

Chry007

Level-1
Beiträge
17
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi, habe folgendes Problem:
Ich habe eine 6ES5 464 - 8MC11 Baugruppe auf Steckplatz 6 einer S5 100U CPU 100.
Jetzt würde ich gerne den ersten und zweiten Kanal der Baugruppe einlesen, Spannungen vergleichen und je nach Ergebnis einen Ausgang schalten.
Soviel zur Planung. Bei der Umsetzung haperts. Den FB 250 gibts ja bei der CPU 100 noch nicht. Wie lese ich die Kanäle ein und speichere sie in den Akkus ab? Sorry, für die doofe Frage, ich erwarte kein fertiges Programm von euch. Nen Tipp oder nen Link zu ner hilfreichen Dokumentation würde mir schon helfen.

Vielen Dank im Voraus,
Christian
 
direkt auf die eingänge zugreifen (in fb programmieren):

L PEW 112 lädt den analogwert in den akku + fehlerbits
SLW 3 schiebt die fehlerbits aus dem akku
T MW 200 wert in mw200 ablegen
U M 200.4 nun noch das verschobene vorzeichen wieder richten
= M 200.5
= M 200.6
= M 200.7

und schon steht der wert korrekt in mw200
wert ist normiert:
-10V => -2047 dez
0V => 0
+10V => 2047 dez

das selbe für PEW 114 (zweiter kanal) auf mw202 machen und schon hast
du beide werte zum weiterbearbeiten parat

solltest du infos (z.b. handbuch) zur 100u benötigen bitte kurze pn an mich.
 
direkt auf die eingänge zugreifen (in fb programmieren):

L PEW 112 lädt den analogwert in den akku + fehlerbits
SLW 3 schiebt die fehlerbits aus dem akku
T MW 200 wert in mw200 ablegen

So weit ich mich erinnere, können die CPU 100 .. 102 keine PW,
es müsste über EW gelesen werden.

Ausserdem: Schieberichtung ist falsch: SRW 3, die Fehlerbits sind Bit 0..2

Also:
L EW x
SRW 3
T MW 200

Das vorzeichen steht nach dem Schieben im Bit M 200.4
M 200.7.. M 200.5 wurden mit 0 aufgefüllt.
Um eine korrekte Integer zu erhalten musst Du das Vorzeichen nach links
rekonstruieren:
U M 200.4
= M 200.5
= M 200.6
= M 200.7

Gruss Werner
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das vorzeichen steht nach dem Schieben im Bit M 200.4
M 200.7.. M 200.5 wurden mit 0 aufgefüllt.
Um eine korrekte Integer zu erhalten musst Du das Vorzeichen nach links
rekonstruieren:
U M 200.4
= M 200.5
= M 200.6
= M 200.7

Gruss Werner

So weit ich mich erinnere ist das 15 Bit für das Vorzeichen zuständig!
Wieso werden denn die Bit´s 14 und 13 auchnoch mit 1 belegt?

Gruß SKg
 
So weit ich mich erinnere ist das 15 Bit für das Vorzeichen zuständig!
Wieso werden denn die Bit´s 14 und 13 auchnoch mit 1 belegt?

Gruß SKg

Das liegt am Zahlenformat für die Darstellung negativer Integerzahlen.

WIKI

Da ja 3 Bit nach rechts verschoben sind, muß man bei positiven Zahlen nichts tun (Vorzeichenbit ist 0 und die aufgefüllten Bit sind auch 0), bei negativen Zahlen muß man alle durch den "Rechtsruck" :ROFLMAO: mit 0 aufgefüllten Bit mit 1 belegen. Zwar können ja auch negative Zahlen bei diesen Bit eine 0 stehen haben, aber wegen der Parameterbits wurden ja die Bits geschoben, die so entstandene Intager hat also einen kleineren Wertebereich, als in einer 16-bit-Zahl eigentlich darstellbar ist. Diese "verlorenen" Bits müssen bei positiven Zahlen mit 0, bei negativen Zahlen mit 1 gefüllt werden, wie man im o.g. Wiki-beitrag ganz gut sehen kann
 
Zuletzt bearbeitet:
Also, hier der Stand der Dinge:

U M 200.4
= M 200.5
= M 200.6
= M 200.7

generiert eine Fehlermeldung. S5 für Windows sagt, dass sei eine ungültige Eingabe. Habs dann mal weggelassen. Wär ja schonmal nen fortschritt, wenn ich überhaupt einen Wert einlesen könnte. -.-

L PEW generiert auch eine Fehlermeldung.
Mit L EW kann ich das Programm zur SPS übertragen, die CPU geht aber immer wieder in den Stopzustand... -.-

Ist doch korrekt, dass ich im OB1 einen absoluten Sprung zu FB 1 habe und darin das genannte Programm steht?

Hab übrigens durch Zufall noch eine Siemens CPU 315 - 2 DP bekommen. Allerdings will die irgendwie nicht mit meinem PC reden. Über einen MPI Adapter müsste die sich doch auch mit S5 / S7 für Windows programmieren lassen, oder?

Vielen Dank schonmal an euch, für die Zeit, die ihr euch nehmt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
das mit ob1 und fb1 ist korrekt

welche fehlerursache ist auslesbar nachdem die cpu in stop geht (u-stack / b-stack).
evtl. mal die adressen prüfen (EW112/114 sind laut handbuch dem
steckplatz 6 zugeordnet => das ist die 7. Peripheriekarte, da die karten
bei 0 zu zählen beginnen)

probier mal ob deine software das mag:
U M 200.4
= M 200.5
U M 200.4
= M 200.6
U M 200.4
= M 200.7
ist von der funktion her das gleiche, nur etwas länger (mehr befehle)

welchen mpi-adpater hast du denn?
 
hab gerade gesehen:
die CPU100 mag nur merker bis 63!

also bitte die merkerworte und -bits auf einen wert <64 ändern!
 
Yeeehaaa :) Es geht :)
In den Akkus stehen jetzt 4 stellige Hexadezimalzahlen. Krieg ich die irgendwie in Reele Spannungen umgewandelt? Ohne FB 250 und ohne multiplizierer/dividierer?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab übrigens durch Zufall noch eine Siemens CPU 315 - 2 DP bekommen. Allerdings will die irgendwie nicht mit meinem PC reden. Über einen MPI Adapter müsste die sich doch auch mit S5 / S7 für Windows programmieren lassen, oder?

Vielen Dank schonmal an euch, für die Zeit, die ihr euch nehmt.

Das sollte gehen.




LG
 

Anhänge

  • w57.jpg
    w57.jpg
    44,5 KB · Aufrufe: 10
wert umformen in der cpu?
rechnen ist mit der 100er echt eine herausforderung...

ich würde den wert vervierfachen und dann noch einmal hinzuaddieren
=> aus 2048 dez (=10V) wird somit 10240 dez
das entspräche so in etwa den millivolt

um die genauigkeit zu erhöhen könntest du am analogeingang einen
(einstellbaren) spannungsteiler anschließen um die eingangsspannung etwas
zu senken und damit genau auf die 10000mV zu kommen.

oder vom wert einen bruchteil abziehen / hinzuaddieren:

beispiel:

L MW 60 der wert von eingang (0-2048 )
SLW 2 vervierfachen
L MW 60
+F den wert nochmal dazu => 2048 wird zu 10240
T MW 50 der neue wert in mV (ca.)

L MW 60
SRW 3 durch 8 teilen (0-256)
T MW62 schmiermerker wg. vorzeichen
U M62.4 und vorzeichen richten
= M 62.5
= M 62.6
= M 62.7

L MW 50 der ungefähre wert in mV (0-10240)
L MW 62 der wert (0-256)
-F
T MW 50 noch mal ablegen, aber genauer (0-9984 = 0-10V)

L MW 60
SRW 7 durch 128 teilen (0-16)
T MW62 schmiermerker wg. vorzeichen
U M62.0 und vorzeichen richten
= M 62.1
= M 62.2
= M 62.3
= M 62.4
= M 62.5
= M 62.6
= M 62.7

L MW 50 der ungefähre wert in mV (0-9984)
L MW 62 der wert (0-16)
+F
T MW 50 noch mal ablegen, aber diesmal genau (0-10000 = 0-10V)

so kannst du einen wert 0-2048 auf 0-10000 umwandeln in der cpu100.
die merker auf deine nummern anpassen. das ganze dann nochmal für den
anderen kanal

viel erfolg!
 
:) Danke vielmals für eure Geduld! Aber muss der Wert in den Akkus nicht erstmal in dezimal umgewandelt werden? S5 für Windows zeigt nämlich Hexa an. .. Oder bin ich jez komplett auf dem Holzweg?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
die steuerung verarbeitet die werte intern immer binär
wie du die werte betrachtest ist von deiner software abhängig

ich kenn jetzt s5 für windows nicht, aber es sollte möglich
sein in "steuern variable" die werte in einem wählbaren
format zu betrachten.
 
Alles klar. Dann werd ich mich mal die Tage an die Arbeit machen :)
Eine Frage hab ich aber noch. Hat jemand von euch ne Tabelle zur Step 5 Mnemonic zur Hand? Einige Befehle kenn ich ja, aber offensichtlich reichts nicht ^^
Die neue SPS krieg ich übrigens immernoch nicht ans laufen. Auch nicht mit den Einstellungen von dir, Verpolt. Danke trotzdem :)

Gruß
 
Zurück
Oben