Sonstiges Siemens Logo Programmierhilfe

Zuviel Werbung?
-> Hier kostenlos registrieren
wie würde dann das Programm aussehen wenn ich das ohne den zwei integrierten Schieberegistern mache, sondern nur mit den selbst erstellten ?
Die Benutzung des Ausgangs des analogen Schieberegister hatte ich oben im Versuch dazu schon mal gepostet:



Es sollte also im Programm noch kein Problem darstellen, die integrierten Schieberegister zu löschen und stattdessen, wie im Versuch, den Ausgang des analogen Schieberegisters zu nutzen (grün):



Bei der Gelegenheit verweise ich gleich noch mal auf den Eingang des (Gesamt-) Schieberegisters B008 (rot), weil das bei den nächsten Schritten von Bedeutung ist.



Jetzt hast Du allerdings nur noch insgesamt 90 Schiebe-Bits. Das bedeutet, Du mußt (erst) nochmal 15 Bits zum Register hinzufügen -> Deine 4. Frage:
-Ich habe mal versucht ein selbsterstellen Schieberegister zu bauen, um zu den 105 Bits 15 Bits mehr hinzuzufügen, hat irgendwie nicht geklappt, obwohl ich die Parametersätze wie bei den anderen Funktionsblöcken übernommen habe. So ganz habe ich das Programm noch nicht durchleuchtet. :confused::confused:
Hinzufügen mache ich am unteren Ende, weil da naturgemäß noch Platz auf dem Arbeitsblatt ist. (Etwas einfacher wäre am oberen Ende, dafür muss man dann das ganze Register nach unten verschieben, um Platz zu bekommen. - Gelöscht wird immer von oben.)
Also, das unterste Einzelregister (grün) markieren, kopieren und drunter noch mal einfügen:



Den Takt an das neue Register anschließen, den Eingang des (Gesamt-) Schieberegisters B008 (rot, da war doch weiter oben was) auf das neue 1. Register umschreiben und dabei die Verweise zur Berechnung (grün) wieder einfügen (werden beim Kopieren gelöscht!) und abschließend den Eingang des vorherigen 1. Registers auf den Ausgang des neuen 1. Registers verknüpfen (orange):



Das vorherige Schieberegister Bit 1-16 (türkis) wird dann Bit 16-30. Die Umbenennung setzt sich so bis zum obersten Einzelregister fort.


Als letzte Anpassung haben wir jetzt beim letzten Einzelregister einige Bits zuviel, was dann Deine 2. & 3. Frage beantwortet:
-Also wenn ich das jetzt bei deinen selbsterstellten Schieberegistern ansehe, hast du immer in 15 ner Schritten (Bits) gearbeitet . Kann man auch je Schieberegister eine beliebige Zahl nehmen z.B. 12 ? Wenn ja wie kann ich es definieren, dass je Schieberegister statt 15 Bit z.B. 12 Bit verschoben werden?

-Wenn ich z.B. die On/OFF Werte beim analogen Schwellwertschalter ändere, dann macht das Programm irgendwas und die Funktion ist dann nicht mehr erfüllt, ich weiß aber nicht warum.
Ich hatte die grundlegende Funktion zwar hier schon mal erklärt:
Dann brauchst Du ein eigenes Schieberegister:
Dazu ein paar Vorbetrachtungen. Wenn ein Bit in einem Binärwert um eine Stelle nach links verschoben wird, so wird z.B. aus 'ner 1 eine 2, aus 'ner 2 eine 4 oder aus 'ner 8 eine 16. Es entspricht also einer Multiplikation mit 2. Wird dagegen das höchste Bit aus dem Wert herausgeschoben, veringert sich der Wert um 2^x, wobei x der herausgeschobenen Bitstelle (begonnen bei 0) entspricht.
Analogwerte können bei der Logo bis 32.767 berechnet werden. Das sind 15 Bits (Bit 0 - 14). Das 16. Bit dient übrigens, wie üblich, als Vorzeichen.
...

Das Ganze hab' ich also mit den Analogbausteinen, die das Rechnen ermöglichen, versucht nachzubauen. Es entstand ein 15-Bit-Schieberegister:

sollte dann aber doch noch zusätzlich detailierter auf die einzelnen verwendeten Bausteine (mit den Bausteinbezeichnungen aus dem Quote) eingehen:
Die arithmetische Anweisung B002 ist der Wert des einzuschiebenden Bits. Beim Kaskadieren mehrerer Register ist das der Ausgang des vorigen Registers. Eingeschoben wird immer an Bit 0 mit der Wertigkeit von 2^0=1. Es kann also je nach Zustand des Eingangs EN den Wert 0 oder 1 haben:




Die arithmetische Anweisung B003 stellt das eigentliche Schieberegister dar. Wenn der Eingang aktiv ist, wird durch die Berechnung des neuen Wertes das Bit verschoben. (Hier ist es übrigens wichtig, dass der Takt bei seiner Aktivierung über die Flanke B001 nur jeweils genau einen Zyklus an B003 ansteht, damit je Takt auch nur einmal gerechnet wird! Die Zähler und die Logo!-Schieberegister haben diese Flankenabfrage integriert.)
Berechnet wird: (Bisheriger Wert - Wert des auszuschiebenden Bits) x 2 + Wert des einzuschiebenden Bits.
Wird der Eingang wieder inaktiv, wird dieser berechnete Wert weiterhin ausgegeben (grün), damit er über B004 bei der nächsten Berechnung noch zur Verfügung steht:




Der Schwellwertschalter B004 hat 2 Funktionen. Zum Einen gibt er den Wert von B003 zurück, da B003 den ja für die neue Berechnung benötigt, aber nicht auf sich selbst verweisen kann. Und zum Anderen schaltet es den Ausgang des Schieberegisters ein, wenn das parametrierte höchstwertigste Bit des Registers EIN ist. Die kleine Hürde beim Parametrieren des Schwellwertschalters hatte ich auch schon erwähnt:
Allerdings können bei Schwellwertschaltern nur Grenzwerte bis 20.000 eingestellt werden. Da aber bei der gesetzten Bitstelle 14 Werte von 2^14 = 16.384 bis 2^15-1 = 32.767 vorkommen, muss man als Grenzwert für Ein und Aus den gleichen Wert wählen und der entspricht dann dem Wert, bis zu dem der Schwellwertschalter aus ist.
Ich verwende also als Schwellwert für EIN und AUS den Wert 2^n-1. Somit geht der Schwellwertschalter ab dem Wert 2^n auf EIN. Dieser Wert wird nur erreicht, wenn die höchstwertigste Bitstelle EIN ist, was dann wie gewünscht ausgegeben wird.


B005 schließlich stellt den Wert des höchstwertigsten Bits dar, um diesen beim Ausschieben des Bits wieder abzuziehen. Ist der Zustand AUS, ist der Wert 0x2^n, also 0. Ist der Zustand EIN, ist der Wert dagegen 1x2^n, also der dezimale Wert der höchsten Bitstelle. Welcher von beiden Werten ausgegeben wird, wird wieder parametriert:




Abschließend dazu noch die Tabelle mit den Wertigkeiten, die wir gleich benötigen:

Wie auch im Zitat von mir zu sehen, habe ich also in 15er Schritten gearbeitet, weil es das Maximale an "einfacher" Berechnung darstellt, was die Logo schafft (15 Bit Wert + 1 Bit Vorzeichen = 16 Bit Verarbeitungsgröße der Logo!). Die Bits zu verringern ist aber einfach möglich, was wir an dieser Stelle der Programmanpassung benötigen.


So - 100 Schritte war das Ziel, also wird der gewünschte Ausgang beim insgesamt 100. Bit erreicht.
(PS: Ich glaub', hier hatte ich eine kleinen Denkfehler. Eigentlich sollten 100 Schritte dazwischen sein und damit wäre die Ausgabe erst beim 101. Bit. Da es aber für die Erklärung keinen Abbruch tut, mach' ich das Folgende nicht noch mal alles neu.)
Das stellt das 10. Bit im letzten Einzelregister dar und da immer mit Bit 0 zu zählen begonnen wird, ist dies Bit 9. Bit 9 hat eine Wertigkeit von 2^9 = 512 (grün). Der Schwellwertschalter muss also bei allen Werten darunter aus sein, das entspricht 2^9-1 = 511 (rot). Hier nochmal in der Übersicht:




Diese ermittelten Werte werden jetzt beim Schwellwertschalter und bei der arithmetischen Anweisung, die das auszuschiebende Bit abbildet, eingegeben:

->


F E R T I G !



Die Anpassung der Impulse läßt sich zwar nur begrenzt über Parameter einstellen, aber in der Gesamtfunktion ist es sicher einfacher als mit den x Zählern.


Hier nochmal der Download (incl. der Bit-Tabelle) zum Ansehen des 0BA6-tauglichen Schieberegisters:
 

Anhänge

  • EMZ 105-Bit Schieberegister V4.zip
    31,6 KB · Aufrufe: 29
Zuletzt bearbeitet:
Hi, also die Programmiersprache in SCL kenne ich leider nicht so gut, deshalb sagt es mir auch nicht so viel.

Ich müsste mich erstmals mit SCL vertraut machen. Gibt es eig. dazu irgendwo Anfängerhilfen etc. ?
Auf den Siemensseiten gibt's irgendwo 'ne Beschreibung. Hab' allerdings gerade keinen Link zur Hand.
Hab' gereade wegen eines anderen Threads da noch mal die Links raus gesucht:
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Also, ich habe mich jetzt mal bisschen besser eingelesen in dein Programm.
Mittlerweile komme ich zwar klar, aber einige Sachen sind mir unklar. Ich habs noch nicht herausgefunden, wie ich z.B. die letzten 4 Impulse erhöhen oder verringern kann. Beispielsweise 20 Impulse sollen nach den 100 Impulsen ablaufen und dann Ausgang Q1 wieder "0" werden.

So langsam tendiere ich immer mehr in Richtung S7 1200. Ich hab schon rumprobiert, aber komme einfach nicht darauf, wie ich diese Funktion in FUP hinprogrammieren kann. Ich habe das in S7 auch mit "16 Bit Schieben nach rechts" versucht, aber klappt irgendwie nicht so wie ich es vohab. Kannst du mir tipps geben, mit welchen Funktionsbausteinen (FUP) ich damit vorankomme?

LG
EMZ
 
Also, ich habe mich jetzt mal bisschen besser eingelesen in dein Programm.
Mittlerweile komme ich zwar klar, aber einige Sachen sind mir unklar. Ich habs noch nicht herausgefunden, wie ich z.B. die letzten 4 Impulse erhöhen oder verringern kann. Beispielsweise 20 Impulse sollen nach den 100 Impulsen ablaufen und dann Ausgang Q1 wieder "0" werden.
Da die Ausgangs-Impulse schon am Start erzeugt und mit durchs Register geschoben werden, versuch's mal mit dem Zähler B003 "Startimpulse".
;)


So langsam tendiere ich immer mehr in Richtung S7 1200. Ich hab schon rumprobiert, aber komme einfach nicht darauf, wie ich diese Funktion in FUP hinprogrammieren kann. Ich habe das in S7 auch mit "16 Bit Schieben nach rechts" versucht, aber klappt irgendwie nicht so wie ich es vohab. Kannst du mir tipps geben, mit welchen Funktionsbausteinen (FUP) ich damit vorankomme?
Für solche Aufgaben sicher besser geeignet.
Aber m.M.n. nicht mit FUP. Das ist einfach ein riesen Aufwand gegenüber SCL.
Sorry, da hab' ich einfach kein Interesse, mich rein zu knien, wenn man's auch einfach haben kann.
 
Okey, danke dir für die ganze Hilfe.

Ich werde jetzt erstmals noch versuchen mit Hilfe von anderen das ganze in FUP /S7 umzusetzen. Wenn es nicht klappt werde ich wohl irgendwie anders das ganze lösen müssen.


LG
EMZ
 
Zuletzt bearbeitet:
Ich will sehr gerne in Zukunft mit SCL programmieren, aber ich habe halt wirklich 0 Erfahrung damit. Ich weiß nicht einmal wie man einfache Funktionen aufstellt.
Ich verstehe nichtmal so ganz was da in deinem Programm steht. Wenn ich das hinkriegen würde, SCL zu verstehen, würde ich nurnoch mit SCL arbeiten.

Das ist das einzige Problem.
 
PN von EMZ schrieb:
Es geht um den Zähler "Startimpulse" B003.

Der muss doch erstmal (bei den Parameterwerten ON: 1 Off: 5 Startwert: 5 ) die fünf Impulse runterzählen, damit es losgeht.
also diese 4 Impulse. Und wenn in der Zeit wenn diese 4 Impulse gezählt werden, nochmal Sensor 1+2 betätigt werden, dann erkennt er es garnicht.
Kann man das auch so programmieren, dass der die 4 Impulse am Anfang garnicht zählt. Ich spreche dies an, weil die 4 Impulse eventuell mehr werden z.b. 40 oder noch mehr. Somit ist der Zeitraum größer und somit können Zählungen ausgelassen werden in der Zeit wenn B003 z.B. 40 Impulse abzählt.

Ich hab den Zähler mal komplett rausgebaut und den Zähler am "Reset" Eingang des RS-Flip-Flops (B002) gesetzt, aber dort ist es ebenfalls das gleiche Problem.

Kannst du mir dabei eventuell auch helfen.

PS: Die Lösung kannst ins Thread Siemens Logo Programmierhilfe reinschrieben.
Tu' mir und Dir einen Gefallen und schreib' solche Anfragen gleich in den zugehörigen Thread. So muss ich nicht so lange suchen und andere können vlt. auch helfen.
:idea:

Wenn ich bis zum WE nicht geantwortet habe (muss auch noch etwas arbeiten), kannst Du dann immer noch eine PN dazu schreiben.




Der Zähler B003 muss nicht bis 4 runter zählen, damit es losgehen kann. Dafür sorgt das RS-Flip-Flop B002. Solange die Startbedingung nach dem Neustart noch nicht einmal erfüllt wurde, sperrt es über das UND-Glied B004 (deswegen ist das mit Freigabe benannt!) die vom Zähler B003 ausgegebenen Impulse. Mit der ersten Erfüllung der Startbedingung wird das Flipflop gesetzt und die Impulse können vom Zähler zum Eingang des Schieberegisters durch.

Der Zähler selbst erkennt jede Erfüllung der Startbedingung, weil er dann nämlich jedesmal wieder auf seinen Startwert 5 resettet wird. Waren die letzten 4 noch nicht fertig, wird also der Impuls entsprechend verlängert.
Es gibt genau eine Ausnahme: wird die Startbedingung zwischen 2 Takten zwei- oder mehrmals erfüllt, ist das von der Sache her wie eine Erfüllung und es wird dann in 100 Takten für 4 Takte der Ausgang gesetzt. Sprich - die Ausführungen "überlagern" sich.

Ergebnis:
Ist z.B. nach Schritt 1 und 7 die Startbedingung erfüllt, erhältst Du von 101 bis 104 und von 107 bis 110 ein Ausgangssignal.
Ist z.B. nach Schritt 1 und 5 die Startbedingung erfüllt, erhältst Du von 101 bis 104 und von 105 bis 108 ein Ausgangssignal, in Summe ein durchgehendes von 101 bis 108.
Ist z.B. nach Schritt 1 und 3 die Startbedingung erfüllt, erhältst Du von 101 bis 104 und von 103 bis 106 ein Ausgangssignal, in Summe ein durchgehendes von 101 bis 106.

Und damit ist es egal, ob am Anfang 1, 4, 40 oder sonst wie viele Takte gezählt werden. Es wird halt nur wahrscheinlicher, das das letzte Zählen noch nicht beendet ist, wenn wieder neu zu zählen begonnen wird.
:cool:


Also einfach von B003 Startwert und Ausschaltgrenze auf den neuen Wert anpassen, fertig. Wenn die Startbedingung 1:1 an den Ausgang durchgegeben werden soll, für beides 2 eingeben.



Und sag' mal, wie testest Du denn? Das kann man doch in der Simu ganz gut sehen, was da passiert und ob ich daran gedacht habe oder nicht!
:???:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,
ich habe ien kleines Problem.
Bei der Aufgabenstellung gibt es ne kleine Änderung.

Also wenn Startbedienung erfüllt ist, soll gezählt werden z.B. 100 Impulse, dann aber soll jedesmal nach einer bestimmten Impulszahl z.B. 10 in meinem Beispiel der Ausgang erst zurückgesetzt werden.
Soll ich das über einen normalen Zähler machen, kann man das auch mit dem Zähler B003 realisieren oder gibt es da eine andere möglichkeit?


Anhang anzeigen 21887


Link:

http://www.bilderhoster.net/safeforbilder/twf7sxbk.png


LG
EMZ
 
Also wenn Startbedienung erfüllt ist, soll gezählt werden z.B. 100 Impulse, dann aber soll jedesmal nach einer bestimmten Impulszahl z.B. 10 in meinem Beispiel der Ausgang erst zurückgesetzt werden.
Soll ich das über einen normalen Zähler machen, kann man das auch mit dem Zähler B003 realisieren oder gibt es da eine andere möglichkeit?
Man kann das auch mit dem Zähler B003 realisieren (Startwert & Ausschaltgrenze 10+1=11):
Und damit ist es egal, ob am Anfang 1, 4, 40 oder sonst wie viele Takte gezählt werden. Es wird halt nur wahrscheinlicher, das das letzte Zählen noch nicht beendet ist, wenn wieder neu zu zählen begonnen wird.
:cool:


Also einfach von B003 Startwert und Ausschaltgrenze auf den neuen Wert anpassen, fertig.


Aber wenn es auch so funktioniert:
[IMG]http://www.bilderhoster.net/sa...lle im roten Kasten nicht unbedingt nötig. ;)
 
Zuletzt bearbeitet:
Ja ich weiß, aber der ohne den Merker geht es manchmal und manchmal nicht, keine Ahnung warum.

Noch eine Frage:

Kann ich vllt. über so eine Arithmetische Anweisung mir auch meine Startbedienungen merken ?

Also ich will es so programmieren, dass wenn z.B. in 2 sekunden Takten mehrmals die Startbediengung erfüllt wurde, dass der Ausgang dann auch für jede Startbedienung 10 Impulse , also insgesamt für 20 Impulse eine 1 bleibt.
Wenn zwei Startbedienungen gleich hintereinander passieren sollen es z.B. 20 Impulse sein usw.

ist die Programmierung möglich?

LG
EMZ
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Machen wir erst mal hier weiter:
Noch eine Frage:

Kann ich vllt. über so eine Arithmetische Anweisung mir auch meine Startbedienungen merken ?

Also ich will es so programmieren, dass wenn z.B. in 2 sekunden Takten mehrmals die Startbediengung erfüllt wurde, dass der Ausgang dann auch für jede Startbedienung 10 Impulse , also insgesamt für 20 Impulse eine 1 bleibt.
Wenn zwei Startbedienungen gleich hintereinander passieren sollen es z.B. 20 Impulse sein usw.

ist die Programmierung möglich?
Die Erfüllung der Startbedingungen sollte schon gezählt werden!

Mit Deiner neuen Vorgabe brauchst Du aber 2 Zähler - einen (wie gesagt) für die erfüllten Startbedingungen und einen für die Impulsausgabe.
Der erste Zähler muss dabei vor- und rückwärts zählen. Der 2. nur vorwärts (für die gewünschten Impulse, momentan also 10) und wird dann resettet.
Dieser Reset lässt gleichzeitig den ersten Zähler wieder einen zurück zählen.
Das Ganze wird dann wieder durch's Register gejagt, damit Du Deine 100 Takte Verschiebung bei der Ausgabe hast.

Das Ergebnis könnte z.B. so aussehen:





PS. Irgendwann könnte ich das nicht mehr als Training ansehen und auch Geld haben wollen. ;)
:ROFLMAO: :ROFLMAO: :ROFLMAO:



PPS: Ist übrigens nett von der LOGO!, das der Ausgang des Zählers sich bei gleichen Ein-/Ausschaltgrenzen anders verhält als der des Schwellwertschalter.
:sm12:
 

Anhänge

  • EMZ 105-Bit Schieberegister V5.zip
    26 KB · Aufrufe: 8
Zuletzt bearbeitet:
Hi hucki, habe noch paar kleine Verständnisfragen,

Berechnet wird: (Bisheriger Wert - Wert des auszuschiebenden Bits) x 2 + Wert des einzuschiebenden Bits.

- Also der Bisherige Wert ist der Wert, von dem Schwellwertschalter gezählt wird ? (bis 16383)
- Die Auszuschiebenden Bits sind dann 15 Bit ( der 16.te wird ja nicht mitgeschickt) oder ?
- warum nimmst du diese Werte mal 2 ?
- Was kann ich unter "Wert des einzuschiebenden Bits" verstehen?

LG
EMZ

PS: Für mein Testprojekt werde ich eine Logo nehmen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
- Also der Bisherige Wert ist der Wert, von dem Schwellwertschalter gezählt wird ? (bis 16383)
- Die Auszuschiebenden Bits sind dann 15 Bit ( der 16.te wird ja nicht mitgeschickt) oder ?
- warum nimmst du diese Werte mal 2 ?
- Was kann ich unter "Wert des einzuschiebenden Bits" verstehen?
Warum liest Du nicht, was ich Dir erkläre?
Dazu ein paar Vorbetrachtungen. Wenn ein Bit in einem Binärwert um eine Stelle nach links verschoben wird, so wird z.B. aus 'ner 1 eine 2, aus 'ner 2 eine 4 oder aus 'ner 8 eine 16. Es entspricht also einer Multiplikation mit 2. Wird dagegen das höchste Bit aus dem Wert herausgeschoben, veringert sich der Wert um 2^x, wobei x der herausgeschobenen Bitstelle (begonnen bei 0) entspricht.
Analogwerte können bei der Logo bis 32.767 berechnet werden. Das sind 15 Bits (Bit 0 - 14). Das 16. Bit dient übrigens, wie üblich, als Vorzeichen.
Allerdings können bei Schwellwertschaltern nur Grenzwerte bis 20.000 eingestellt werden. Da aber bei der gesetzten Bitstelle 14 Werte von 2^14 = 16.384 bis 2^15-1 = 32.767 vorkommen, muss man als Grenzwert für Ein und Aus den gleichen Wert wählen und der entspricht dann dem Wert, bis zu dem der Schwellwertschalter aus ist. Das wäre 2^14-1 = 16.383.

Das Ganze hab' ich also mit den Analogbausteinen, die das Rechnen ermöglichen, versucht nachzubauen.
Also nochmal zum Mitschreiben:

- Die LOGO! rechnet im postiven Bereich "nur" mit 15 Bitstellen, deswegen geht nicht mehr. Ist halt eine 16Bit-Verarbeitung. Die Bitstellen werden bei 0 beginnend von rechts nach links gezählt. Also von 2^0 ganz rechts bis 2^14 links. (Das 16.Bit ganz links ist das Vorzeichen und bedeutet bei Zustand 1, den positiven Wert minus 32.768.)

- Nur das 15. Bit wird beim Schieben um eine Stelle aus dem bisherigen Wert herausgeschoben. Diese Wertigkeit ist dann also nicht mehr vorhanden. Der Zustand des auszuschiebenden Bits ist entweder eine 0 oder eine 1. Da dieses Bit von der Stelle 2^14 = 16.384 ausgeschoben wird, wird also entweder 0*16.384 = 0 oder 1*16.384 = 16.384 als Wertigkeit abgezogen.
Dies geschieht als Allererstes, da man dieses Bit sonst beim "Schieben" auf die Stelle 2^15 = 32.768 verschieben und somit die Rechengrenzen der LOGO! überschreiten würde.

- Danach können die restlichen Bits von den Stellen 2^13 bis 2^0 um eine Stelle auf 2^14 bis 2^1 verschoben werden. Dies entspricht einer Multiplikation mit 2. Und deswegen mache ich das auch.

- Dann muß noch das neue Bit eingeschoben werden. Der Zustand des einzuschiebenden Bits ist wieder entweder 0 oder 1. Da dieses Bit an die Stelle 2^0 = 1 eingeschoben wird, wird also entweder 0*1 = 0 oder 1*1 = 1 als Wert hinzu addiert. Und zwar erst ganz zum Schluß, sonst würde es bei der Multiplikation mit 2 im gleichen Takt ein 2. Mal "geschoben" werden.


Für Dich zum Test/Nachvollziehen:
1. -> 100 0000 0001 0000 -> mit dem Windows-Taschen-Rechner (wissenschaftliche Ansicht) binär eingeben und dann auf dezimal umschalten und aufschreiben.
2. -> die führende 1 wegfallen lassen, den Rest wieder in den Taschenrechner ...
3. -> im Kopf mal alle Stellen des Binärwertes um eine Stelle nach links verschieben, indem Du einfach hinten eine 0 anfügst -> Taschenrechner ...
4. -> eine 1 am Ende einschieben durch Ändern der letzten Stelle auf 1 -> Ta...


Also besser bzw. einfacher kann ich's dann jetzt wirklich nicht mehr erklären.
 
Also jetzt gebe ich das mit meinen Worten mal wieder : (ob ich das auch richtig verstanden habe)

Also geschoben wird vom 15.ten Bit aus immer weiter nach links beginnend wie du schon sagtest bei 0 ....bis 2^14 also 16384....
Nach dem ersten Schieben ist das 15. Bit nicht mehr da, da es ja sozusagen "weggeschoben" wurde.
Da ich immer einen Impuls bekomme (also das Wert des auszuschiebenden Bits 1 ist) wird immer vom bisherigen Wert (1) abgezogen.
Und es wird entweder 1 abgezogen oder 0 (also garnichts).
Mal 2 deshalb, da ja immer Bitsweise geschoben wird, also immer das doppelte 2^1 2^2 2^3 usw.
Der einzuschiebende Bit hat entweder eine 1 oder eine 0. Da immer bei 2^0 (also 1) eingeschoben wird, wird dann das anliegende Signal 0 oder 1 mal 2^0 genommen und dann zum Wert 16383 hinzuaddiert also dann 16384.

Hier ein Beispiel,
Also es wird von Vorne immer eine Ziffer weggeschoben
(Bin mir nicht ganz sicher ob das richtig ist das müsste glaube ich in die andere Richtung geschoben werden. Aber bin mir nicht sicher)


0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...........1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ...........2
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 ...........4
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 ...........8
0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 ...........16
0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 ...........32
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 ...........64
0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 ...........128
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 ...........265
0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 ...........512
0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ...........1024
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 ...........2048
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 ...........4096
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 ...........8192
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 ...........16384
(1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ........... 32768 )


Also wird die zahl jedesmal, wenn eine pos. Flanke anliegt um einen Bit geschoben.
Dies geschieht indem man den bisherigen (jetztigen) Wert mit dem Wert 2 multipliziert

Bin zwar momentan ziemlich Durcheinander, aber schicke das mal vorerst ab.
Morgen werde ich das ganze mir nochmal durch den Kopf gehen lassen und nochmals eventuell Änderungen an meinen Post vornehmen. Glaube das war mir jetzt bisschen viel.

LG
EMZ
 
Zuletzt bearbeitet:
Noch ein paar Fehler bei Deiner Wiedergabe drinne, aber ich hab' das Gefühl, das Du zumindest das Grundprinzip verstanden hast.

Wenn Du das Komma in einer Dezimalzahl verschiebst, machst Du ja genau das Gleiche, nur das hier die Basis 10 ist. Wenn Du eine 35 um eine Stelle nach links verschiebst, bekommst Du eine 350. Also eine Multiplikation mit 10.
Wenn Du dann auf die letzte Stelle eine 5 einschiebst, addierst Du die nur zur 300 auf der vordersten Stelle oder zu dem Gesamtwert?
Wenn die 3.Stelle vor dem Komma rausfällt, was ziehst Du dann beim nächsten Schieben ab?

Deine Zahlenreihe ist um eins verschoben. Wenn alle Bitstellen 0 sind, ist auch der entsprechende Dezimalwert 0 und nicht 1.;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Jetzt hast Du da allerdings bei der Logo 2 Probleme:
1. Es gibt nur 4 Schieberegister und das auch nur bei der 0BA7. 0BA4 bis 0BA6 haben nur eins, noch ältere gar keins.
2. Wenn Du mit dem Testprogramm etwas herumprobierst, wirst Du feststellen, das Du bei der Übergabe der Bits vom 1. zum 2. Schieberegister auch noch eine Stelle "verlierst", weil die Schieberegisterbits 1.8 und 2.1 immer den gleichen Zustand haben.
Somit kannst Du einen Impuls also nur max. 29 Takte weiterschieben, bis er am Ende der vorhandenen Schieberegister ankommt.
Zu 2.:
Kann man so machen, muss man aber nicht. Ansonsten gaaanz viel und ein spätes DANKE für Deinen Beitrag und den Link darauf!!!
Man kann die je 8 Bit der in Reihe verknüppelten SchiebeRegister "verlustfrei" nutzen, also 16- bzw. 24- bzw. 32-Bit-SchiebeRegister damit realisieren.

Anbei ein 32-Bit-SchiebeRegister in der
AnfängerVersion (nur vorwärts schieben):

Anhang anzeigen Shift32-1.lsc.pdf <===<<< nach dem Herunterladen ' .pdf ' entfernen!
Shift32BitFwd.jpg

... und der Version für "RunAways" (Fortgeschrittene) mit Auswahl der SchiebeRichtung und als Schmankerl noch wahlweise beim RückwärtsSchieben mit/ohne Beibehaltung des Vorzeichens:

Anhang anzeigen Shift32-2.lsc.pdf <===<<< nach dem Herunterladen ' .pdf ' entfernen!
Shift32BitFwdBwdSgn.jpg
 
Zurück
Oben