easy-forum

Deutsch - Software => easySoft => Thema gestartet von: Knodelpa am Februar 17, 2006, 15:32:58 Nachmittag

Titel: Eine harte Nuss für alle Tüftler
Beitrag von: Knodelpa am Februar 17, 2006, 15:32:58 Nachmittag
Hallo EASY Freunde,
heute habe ich einmal eine harte Nuss zum knacken. Ein Fall beschäftigt mich schon einige Zeit, ohne dass ich eine zufriedenstellende Lösung gefunden hätte.
Ich habe in 4 MD's vier Zählerstände (MD49..MD53). Jetzt muss ich irgendwie rausbekommen welcher der kleinste, der zweit kleinste,... bis hin zum größten ist. Das Ergebnis soll in 4 Bytes gespeichert werden, z.B. 1-4. Dies hört sich zunächst recht einfach an, ist es aber sicherlich nicht  :-\
Es kann sicherlich aber auch nicht sein, dass ich 25 Vergleicher brauche !!

Ich bin hoch gespannt auf Eure Lösungen  ??? ???

 :) ;) :D
Gruß Paul
Titel: Re: Eine harte Nuss für alle Tüftler
Beitrag von: ThomasD am Februar 17, 2006, 19:19:31 Nachmittag
Hi Knodelpa,
was oder wie meinst du mit, ( das Ergebnis soll in 4 Bytes gespeichert werden).
Titel: Re: Eine harte Nuss für alle Tüftler
Beitrag von: Martin_ am Februar 17, 2006, 19:42:11 Nachmittag
Hallo Paul

zum Vergleich der Werte braucht man nur 6 Vergleicher. Wofür brauchst du soviele? ???

Zum Auswerten der Vergleicher brauche ich dann noch 32 Zeilen Code.
Siehe Beispiel.

Anstelle der Merker 1 bis 28 kanst du auch mit einem DB-Datenbaustein einem Merkerbyte den entsprchenden Wert (1 bis 4) zuweisen.

Als Zählerstände habe ich die Analogeingänge genommen, damit ich das Programm einfacher testen kann.

Das einzigzt Proplem ist wenn mehrere Eingangsvariablen den gleichen Wert haben.

Martin
Titel: Re: Eine harte Nuss für alle Tüftler
Beitrag von: Knodelpa am Februar 17, 2006, 20:00:24 Nachmittag
Hallo ThomasD,
ich möchte in den 4 Ergenisbyte die Reihenfolge der Werte stehen haben.
z.B. 1,2,3,4 oder 3,1,4,2,

 :) ;) :D
Gruß Paul
Titel: Re: Eine harte Nuss für alle Tüftler
Beitrag von: Knodelpa am Februar 17, 2006, 20:08:28 Nachmittag
Hallo Martin,

super ich bin beeindruckt. Mal sehen ob es mit weniger Zeilen geht.
Die Gleichheit muss allerdings auch zu einem Ergebnis führen  >:(
Zeit spielt übrigends keine Rolle !!! Die Auswertung kann ruhig etwas Zeit in Anspruch nehmen.

 :) ;) :D
Gruß Paul
Titel: Re: Eine harte Nuss für alle Tüftler
Beitrag von: Martin_ am Februar 17, 2006, 20:39:51 Nachmittag
Hallo Paul

ich habe das Programm etwas überarbeitet.

Ergeniss in Merkerbyte 60, 61, 62, 63. Bei gleichen Eingangswerten wird die vorherige Position beibehalten. Teste doch ob es deinen Bedürfnissen entspricht.

Erst wolte ich MD10 auswerten, aber dazu ist mir nichts eingefallen. Da könte ich genauso gut MB 1, 2, 3 und 4 benutzen.

Man kann natürlich auch noch den EQ-Ausgang der Vergleicher einarbeiten.

Martin
Titel: Re: Eine harte Nuss für alle Tüftler
Beitrag von: Knodelpa am Februar 17, 2006, 20:50:31 Nachmittag
Hallo Martin,

das Programm fehlt  :'(

Gruß Paul
Titel: Re: Eine harte Nuss für alle Tüftler
Beitrag von: Martin_ am Februar 17, 2006, 20:54:08 Nachmittag
Hallo Paul

kleiner Fehler von mir. :-[  :'(
Schon geändert. 8)

Martin
Titel: Re: Eine harte Nuss für alle Tüftler
Beitrag von: Knodelpa am Februar 17, 2006, 21:06:27 Nachmittag
Hallo Martin,
das kommt dem Ziel recht nahe. Ich denke aber es muss doch eigentlich viel einfacher gehen, Zeit spielt fast keine Rolle.
Ich zermatere mir schon Tage den Kopf  ??? ??? :'( :'(
- Gibt es vielleicht eine Lösung in einer Schleife ?
- indirekte Adressierung mit BT ?
- einfach Zählen bis alle gleich ?
- Sortieren durch Tauschen ?
- Schieberegister, Multiplexer, Tabelle ?

 ??? ??? ??? ??? ??? ??? ??? ???
Gruß Paul
Titel: Re: Eine harte Nuss für alle Tüftler - Bubblesort
Beitrag von: Hansi am Februar 18, 2006, 01:18:50 Vormittag
Hallo Paul!

Ich habe mal den Bubblesort (Sortieren durch Tauschen) für die easy800 versucht. Verbraucht nur drei Vergleicher! Ist es das was Du suchst?

@Martin: Leider kann ich Dein Programm nicht öffnen, ich bekomme immer die Fehlermeldung: Basisgerät nicht verfügbar! ???

Gruß Hansi
Titel: Re: Eine harte Nuss für alle Tüftler
Beitrag von: Knodelpa am Februar 18, 2006, 10:57:23 Vormittag
Hallo Hansi,

auch eine tolle Lösung. Schade das es kein Swap Baustein gibt, so braucht man doch recht viele DB's. Was jetzt leider noch fehlt ist das Ergebnis. In vier Bytes sollte stehen welcher Wert der kleinste, z.B. 1,
...., der größte z.B.4 steht. Es sollte auch dann ein Ergebnis geben, wenn alle Werte gleich sind. Wie ich schon sagte, etwas zum tüfteln  :o :o

 :) ;) :D
Gruß Paul

Titel: Re: Eine harte Nuss für alle Tüftler
Beitrag von: Knodelpa am Februar 18, 2006, 10:58:51 Vormittag
Hallo Hansi,
Hallo Martin,

eure Lösungen kommen meinem Ziel schon recht nahe  :D

Gruß Paul
Titel: Re: Eine harte Nuss für alle Tüftler
Beitrag von: Hansi am Februar 18, 2006, 13:08:44 Nachmittag
Hallo Paul!

In meinem Programm werden die Werte ja in absteigender Größe in die MD51 bis MD54 sortiert. Wenn Du wissen möchtest von welchem Analogeingang sie sind, mußt Du nur vor dem sortieren den Wert 1 bis 4 in das betreffende niederwertigste Byte der MD51 bis MD54 schreiben.  Wertgleichheit ist für Bubblesort kein Problem, wie Du leicht ausprobieren kannst. Wird die Nummer des Analogeingangs in die MD`s geschrieben wird bei Wertgleichheit natürlich der Analogeingang berücksichtigt - Ist doch auch ein Vorteil.
Dabei gehen natürlich diese Bytes für den Meßwert verloren! Sonnst könntest Du nur zu den MD51 bis MD54 korespondierende Bytes (Zeiger) verwenden und diese mitsortieren. Dabei brauchst Du natürlich noch mehr DB`s und das Ganze wird etwas größer, aber wenn man es braucht! ;D

Gruß Hansi
Titel: Re: Eine harte Nuss für alle Tüftler
Beitrag von: Martin_ am Februar 18, 2006, 18:36:12 Nachmittag

@Martin: Leider kann ich Dein Programm nicht öffnen, ich bekomme immer die Fehlermeldung: Basisgerät nicht verfügbar! ???

Gruß Hansi

Hallo Hansi

Ich habe das Programm mit EASY-Soft Pro Ver 5.11 geschrieben.
Als Gerät habe ich ein MFD-80-B+CP8-NT+TA-17 verwendet.

Im Anhang das Proramm als PDF-Ausduck.

Martin
Titel: Re: Harte Nuss? Ist doch easy - easy800!
Beitrag von: Hansi am Februar 18, 2006, 21:58:40 Nachmittag
Hallo Martin!

Sowas habe ich mir auch schon gedacht. Kannst du das Programm nicht für die easy800 abspeichern? Ich habe leider nicht die Pro Version und so kann ich es leider nicht ausprobieren.  :'(

@Paul: Ja so ein Swap-Baustein wäre nicht schlecht, genauso wie ein Shift-Baustein oder ein Baustein mit dem sich die Uhr stellen ließe! ;D

Gruß Hansi
Titel: Re: Eine harte Nuss für alle Tüftler
Beitrag von: cas-solution am Februar 19, 2006, 12:04:11 Nachmittag
Hallo hier CAS !  ;D

Hab das Programm schnell geschrieben.

Es hat 14 Zeilen und hat:
2 Merkerbits
2 Zähler
4 Vergleicher
4 Datenbausteine

Meßwerte=MW 10,11,12 und 13
Position steht dann in MW 14,15,16 und 17


Funktionsprinzip:
Zähler 1 zählt immer von 0...1023 (1023=Beispiel)
Zähler 2 hält die akt. Position fest
Die Vergleicher 1..4 Vergleichen auf "gleich" also:

falls MW10=Z1 dann schreibe Z2 in MW14
falls MW11=Z1 dann schreibe Z2 in MW15
falls MW12=Z1 dann schreibe Z2 in MW16
falls MW13=Z1 dann schreibe Z2 in MW17

Noch die Position erhöhen:

falls MW10=Z1 dann Z2=Z2+1
falls MW11=Z1 dann Z2=Z2+1
falls MW12=Z1 dann Z2=Z2+1
falls MW13=Z1 dann Z2=Z2+1


fertig....  :P

Das Programm nutze ich in einem MFD.
Die Position wird mit 0,1,2,3 angezeigt. 0=erste Position 3=letzte Position

Im Prinzip kann man das Programm beliebig erweitern mit je einem Vergleicher und einem Datenbaustein je Wert.

Im MFD werden die Werte und Positionen angezeigt.
Mit der "Alt"-Taste kann man erst mal werde "reinsetzen".

Hoffe geholfen zu haben


CAS
www.cas-solution.de (http://www.cas-solution.de)

Titel: Re: Eine harte Nuss für alle Tüftler
Beitrag von: Knodelpa am Februar 20, 2006, 17:47:50 Nachmittag
Hallo CAS,
danke für das Beispiel. Dann habe ich jetzt schon drei Lösungsansätze.
Das Problem bei fast allen Beispielen ist die Gleichheit. Es sollte immer ein Ergebnis 1,2,3,4 herauskommen, auch dann wenn Werte gleich sind. In diesem Fall spielt bei gleichen Werten die Reihenfolge halt keine Rolle  ;)

 :) ;) :D
Gruß Paul