Anfängerfrage Merkerwort

3F hex = 63 Dez

Dann würde ich nehmen L C#63.
In der Praxis mach ich das nie, ich nehme auch immer hex und wandle das im Notfall. Anbei mal als Grafik, die Hilfe aus Step7, da wird der Unterschied zwischen Dezimal- und BCD-Format gut ersichtlich.

Mit Oktalsystem wollte dir Volker nur verdeutlichen, daß nach 5.7 nicht 5.8 sondern 6.0 folgt, was einen Übertrag darstellt.
 

Anhänge

  • ITB.jpg
    ITB.jpg
    240 KB · Aufrufe: 34
Zuviel Werbung?
-> Hier kostenlos registrieren
Also das mit LC#63 hätte ich am liebsten auch gemacht, aber wenn ich eben an dieses Bsp mit LC#200 denke, war die zahl 200 eben nicht die zahl mit der danach gerechnet wurde. Da wurde ja dann 512 als Dezzahl draus...

Und wenn ich 63 wieder als dual darstelle, kommt ja nicht 63 wieder daraus...63--> 0110 0011 --> 99 (vgl 200-->0010 0000 0000-->512), zumindest wenn ich das gleiche Schema wie bei der Aufgabe nutze.... Wir hatten das aber nur 1x


Gibt es da keine Regel, was genau nach LC# kommt?
 
@Claudi

Schau dir die Grafik an. Ob Dezimal oder BCD, es ist halt eine andere schreibweise.
Bei BCD stellt man mit je 4 Bit eine Zahl dar und schreibt die dann nebeneinander, das ist eigentlich alles.

Bin mir nicht sicher, ob das richtig ist C#200 als 512 Dezimal????
Für mich ist das 200 dezimal, vielleicht kann das jemand anders hier nochmal bestätigen oder widerlegen.
 
@Claudi

Schau dir die Grafik an. Ob Dezimal oder BCD, es ist halt eine andere schreibweise.
Bei BCD stellt man mit je 4 Bit eine Zahl dar und schreibt die dann nebeneinander, das ist eigentlich alles.

Bin mir nicht sicher, ob das richtig ist C#200 als 512 Dezimal????
Für mich ist das 200 dezimal, vielleicht kann das jemand anders hier nochmal bestätigen oder widerlegen.

c# ist BCD - codiert, lieber Ralle.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@ug

Also ist C#200 umgerechnet in eine Dezimalzahl nicht 512 Dezimal, sondern 200 Dezimal, richtig?

Zusatz

C#200 repräsentiert die Dezimalzahl 200 in BCD-Schreibweise. Das sind 200 und bleiben 200.
Wenn man diese C#200 in ein Word lädt und sich ansieht, was dies als Dezimalzahl darstellen würde, sind das 512,
aber das darf man natürlich so nicht umrechnen!
 
Zuletzt bearbeitet:
Also unser prof hats halt definitiv so hingeschrieben. Diese ganzen codierungsachen sind mir in der Form schon klar, das man die eine Zahl verschieden darstellen kann.... Das Bsp mit dem 3f haben wir nicht wirklich fertig gemacht..

er hat dann hingeschrieben LC#0110 0011 das wäre ja 63... so find ichs logisch .... aber in der Formatvorlage steht ja LC# 0 bis LC# 999 . das passt irgendwie alles nicht zusammen...

das mit dem LC#200 kam aus der Anweisung:
LPEW 256
LC#200
/I // und er wollte uns damit sagen das das PEW durch 512 zu teilen ist
 
das mit dem LC#200 kam aus der Anweisung:
LPEW 256
LC#200
/I // und er wollte uns damit sagen das das PEW durch 512 zu teilen ist

Na prima, das ist in etwa so, als wenn er einen Apfel hingeschrieben hat, aber die 27 Kerne im Apfel zum rechnen nehmen will. So bringt er euch ja komplett durcheinander. Er teilt wirklich durch 512, aber wer schreibt denn dann diesen Code dafür ? Das kann nur ein Professor :ROFLMAO:, echt!
 
Das kann nur ein Professor :ROFLMAO:, echt!

Glaub ich nicht so ganz.

BCD.jpg
 
Na prima, das ist in etwa so, als wenn er einen Apfel hingeschrieben hat, aber die 27 Kerne im Apfel zum rechnen nehmen will. So bringt er euch ja komplett durcheinander. Er teilt wirklich durch 512, aber wer schreibt denn dann diesen Code dafür ? Das kann nur ein Professor :ROFLMAO:, echt!

Also stimmt das jetzt doch mit der Umwandlung in 512?:confused: Wieso jetzt? Woran erkenn ich das?
 
@Claudi

Wie erklär ich das nur?
Nehmen wir den String "Zweihundert".
Nimm an, irgendein Zähler, braucht einen String-Codierten Input (warum auch immer das so ist) als Startwert. Du nimmst also die Zeichenfolge "Zweihundert" und gibt die vor, schon klappt es, er zählt von 200dez an rückwärts, weil er "weiß", das "Zweihundert" für ihn 200dez bedeutet.
Wenn du aber den String "Zweihundert" in Hex ansiehst steht da 3F772A0034 (der Hex-Wert ist schnell mal frei erfunden!!!) Diesen Hex-Wert kannst du als auch als Dezimalzahl interpretieren, wenn du willst, da kommt raus 7848364794762347857 (Wert auch frei erfunden!!!).
Das ist alles.

Dein Prof. hat also folgendes gemacht:

Er wollte eine Zahl durch 7848364794762347857 teilen.
Weil er superklug ist hat er gedacht, ha, das ist doch rein numerisch das gleiche, wie der String "Zweihundert" und hat das für euch so hingeschrieben. Der SPS ist ja egal, was die Bytes, denn wirklich repräsentieren, ob einen String, ein Real, ein Int oder ebend eine BCD-codierte Zahl.

:ROFLMAO: Ob das einer versteht???? :ROFLMAO:

PS. Ich hoffe ja auf eNDe, der sollte das erklären können, mit geht da das pädagogische Geschick etwas ab!
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich vermute was du meinst, aber woher sollen wir das wissen, das man da so vorgeht. Er hat ja richtig ein Prinzip verwendet, um von 200 auf 512 zu kommen... normaler weise sollte man doch annehmen, das er mit LC#200 die Dezzahl 200 lädt.....
 
Übung

wenn noch was zum Thema 512 kommt, würd ich mich noch freuen!

ich hab mit nem Komilitonen ein Bsp durch gerechnet! Könntet ihr mich bitte korrigieren, ob falsch/richtig?

Eingänge:
0.7|0.6|0.5|0.4|0.3|0.2|0.1|0.0|1.7|1.6|1.5|1.4|1.3|1.2|1.1|1.0|
0 _ 0__ 0___0__1__0___1__1___ 0__0___0__0___0__0__0___0

Aufgabe:

LEW 0
SLW2
LAR1
LMW 100
TAW(AR1,P#1.4)

Geben sie an,an welche Ausgänge der Steuerung das MW100 ausgegeben wird!

also: LEW 0--> Dez: 2816
SLW 2--> Dez: 11264 in Akku 1
LAR1---> 1408.0
LMW 100 --> Akku1 und 11264 in Akku 2
TAW() --> MW100 wird auf AW gelegt, das mit
Pointer 1409.4 adressiert wird (oder steht die Adresse des AW im AR 1 an stelle 1409.4?)

zu den Ausgängen: also wir haben uns das so gedacht, das man jetzt den Pointer in Dual darstellt: 0101 1000 0001.100 . Lässt man jetzt den Punkt weg, ergäbe sich eine 1 bei den Ausgängen:1.2 1.3 0.2 0.3 0.5.... stimmt diese Theorie?
 
Zuletzt bearbeitet:
@Claudi

3 Fragen erstmal.
1. Veräppelst du uns?
2. Tun das eure Ausbilder mit euch?
3. Haben eure Ausbilder keine Ahnung, was sie da tun?

Zu deiner Frage:

wenn ihr einen Simulator habt testet folgenden Code:

Code:
      L     2#1010101
      T     MW   100

      L     2816
      T     MW     0

      L     MW     0
      SLW   2
      LAR1  
      L     MW   100
//      T     MW [AR1,P#1.4]
      T     MW [AR1,P#0.0]
Wenn du diesen Code testest, wird im MW1408 der Inhalt von MW100 stehen. MW0 ist dein EW0, MW1408 ist dein AW1408.
Wenn du die Kommentarstriche "//" löscht und dafür die letzte Zeile auskommentierst, geht deine SPS in STOP.

Fehler: "Ausrichtungfehler beim Schreiben"

Hilfe:

Ursache:

Bei einem Byte-, Wort-, Doppelwortzugriff wurde eine Bitadresse (Bit 0-2) angegeben.

Behebung:

Sorgen Sie dafür, dass die Bitadresse der Zugriffsadresse 0 enthält.
Wenn man ein Byte, Wort oder Doppelwort adressieren will, muß P#0.0, P1.0, P2.0 ... angegeben werden ! Nur bei der Adressierung von Bits mit = A[LAR1, P#1.1] darf die Bitadresse <> 0 sein.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich vermute was du meinst, aber woher sollen wir das wissen, das man da so vorgeht. Er hat ja richtig ein Prinzip verwendet, um von 200 auf 512 zu kommen... normaler weise sollte man doch annehmen, das er mit LC#200 die Dezzahl 200 lädt.....

Er lädt aber eine BCD-codierte Zahl und die ist dann 512, wenn man einach so mit ihr weiterrechnet. So kann man Leute vollkommen aus dem Konzept bringen oder testen, ob sie verstanden haben. Zugegeben, das ist gemein :ROFLMAO:.
 
@Claudi

3 Fragen erstmal.
1. Veräppelst du uns?
2. Tun das eure Ausbilder mit euch?
3. Haben eure Ausbilder keine Ahnung, was sie da tun?

Zu deiner Frage:

wenn ihr einen Simulator habt testet folgenden Code:

Code:
      L     2#1010101
      T     MW   100
 
      L     2816
      T     MW     0
 
      L     MW     0
      SLW   2
      LAR1  
      L     MW   100
//      T     MW [AR1,P#1.4]
      T     MW [AR1,P#0.0]
Wenn du diesen Code testest, wird im MW1408 der Inhalt von MW100 stehen. MW0 ist dein EW0, MW1408 ist dein AW1408.
Wenn du die Kommentarstriche "//" löscht und dafür die letzte Zeile auskommentierst, geht deine SPS in STOP.

Fehler: "Ausrichtungfehler beim Schreiben"

Hilfe:

Wenn man ein Byte, Wort oder Doppelwort adressieren will, muß P#0.0, P1.0, P2.0 ... angegeben werden ! Nur bei der Adressierung von Bits mit = A[LAR1, P#1.1] darf die Bitadresse <> 0 sein.

zu1: Nein, um Gottest willen! Wir haben nur alle keine Ahnung von dem Stoff! Und Geräte zum Testen haben wir so wie so nicht... Wie kapieren es einfach nicht...

zu 2:weiß ich nicht! aber sie haben uns nicht wrklich was beigebracht. Und unser Prof so wie so nicht, aber eine Prüfung wird eben morgen geschrieben :(

zu3:irgendwie schon

Heißt das jetzt, wenn P#0.0 oder irgendwas mit .0 da gestanden hätte, hatte das funktioniert? Wir hätte die Antwort mit den Ausgängen dann ausgesehen?

Wäre schön, wenn hier ne ständig nackte Weiber wären. Ich hab echt ein Problem mit dem Stoff und da ist das einfach mal unpassend....

Und zu der Aufgabe mit der 512: also wenn in einer Anweisung steht Lc#... dann muss ichs umwandeln, aber wie ist das,wenn ich selber die Zahl in LC# Form bringen muss? Alsop das mit den 3F dann?
 
Zuletzt bearbeitet:
@ug

Denke su verstehst die Bitte :rolleyes:.

@Claudi

In den Ausgängen hätte das gestanden, was ihr vorher irgendwann einmal in das MW 100 geschrieben habt. Achtung, bei P#0.0 im AW1408, bei P#1.0 im AW1409, das wird dann beim ungeraden beginnen, das funktioniert. Ansonsten wie ich schrieb:

Code:
L 2#1010101
T MW 100
2#1010101 landet dann einfach im AW1408.
Alle bits im AW1408 sind wie die Bits im MW100.

BCD:

Zum Umwandeln gibts Befehle, siehe hier:
http://www.sps-forum.de/showpost.php?p=70087&postcount=42

Die Tabelle unten zeigt wie es dann aussieht am Beispiel -413. Das kannst du auch zu Fuß haben, immer in 4 Bit steht eine Ziffer deiner Zahl, das ist Alles.
 
Zurück
Oben