stephanderheld
29.11.2018, 20:53

Frage zur Programmierung einer speziellen Ablaufsteuerung

Hallo zusammen,


ich hätte da gerne mal ein Problem

Für eine geplante Ablaufsteuerung brauche ich Ideen/Infos zur Umsetzung.
Vorneweg, ich habe quasi null Ahnung von Programmierungen. Daher suche ich auch nicht nach genauen Skripten o.Ä., vielmehr interessiert mich wie ein entsprechendes Programm im Grundsatz aufgebaut sein sollte. Also quasi die "Architektur" wenn man das so sagen kann.

Der Ablauf soll wie folgt aussehen:
Aus einer gegebenen fixen Menge "n" sollen alle Zahlen genau einmal, aber immer in zufälliger Reihenfolge ausgewählt werden.
Auf jede Wahl einer Zahl folgt dann eine Aktion (Ablauf)
Sobald alle Zahlen einmal dran waren, soll das Ganze wieder von vorne losgehen.

Meine Frage: Wenn ich mit meiner Startmenge anfange, wie kann ich erreichen daß die bereits gewählten Zahlen aus dem weiteren Ablauf rausfallen?

Also wenn z.B. "n" = 7 ist, habe ich ja im ersten Gang 1,2,3,4,5,6,7 zur Auswahl. Wenn jetzt zufällig z.B. die 3 gewählt wird, bleiben 1,2,4,5,6,7 übrig, und so weiter bis Null. Überhaupt, zählt die Null mit zu der Gruppe, oder kommt das auf die Programmiersprache an?

Wie würde man sowas also grundsätzlich in einer Programmierung angehen? Und wie verknüpfe ich dann im Anschluss eine spezifische Aktion mit der dazugehörenden Zahl?

Falls sich das schlecht verallgemeinert erklären lassen sollte, in einer ersten Version würde ich das zuerst mit einem RCX1 umsetzen wollen, später dann aber wohl eher mit einem Arduino.

Wie gesagt, es geht mir dabei eher um die "Basics" als um eine funktionierende endgültige Lösung. Bin aber für jede Idee, Erklärung oder Denkansatz dankbar.


Mit den besten Grüßen

Stephan


Es ist niemals zu spät für eine glückliche Kindheit


Lok24
29.11.2018, 21:11

Als Antwort auf den Beitrag von stephanderheld

Editiert von
Lok24
29.11.2018, 21:53

+1Re: Frage zur Programmierung einer speziellen Ablaufsteuerung

Hallo Stephan,

das ist überraschend einfach.
Du schreibst die gezogene Zahlen in eine Liste!

Ansatz: ein Array!

Das ist ein Rudel gleicher Elemente (genauer Elementtypen, also Zahl, Text usw), die auf denselben Variablennamen hören, aber einen Index haben.

"X" ist eine Variable
"Zahl" wäre eine andere
"G(100)" ist ein Array, also eine Variable, die 100 Elemente* hat, das 5. sprichst Du mit G(5) an.

Wenn Du das Programm startest sind die alle einhundert g(x) = 0.

Programm:

Zahl ziehen, in n speichern
ist g(n) = 0, dann
- setze g(i) = 1
- Unterprogramm Aktion(n)**
zurück zu zahl ziehen


Gut, da muss man in der
Schleife noch schauen, ob überhaupt noch Kandidaten da sind .....

Ich kann Dir mal ein Beispiel-Progrämmelchen*** zurechtstricken, dauert nicht lange.
Du willst das hoffentlich auf einem RCX, NXT, EV3 laufen lassen?

Grüße

Werner

* eigentlich 101, weil das bei 0 beginnt

**
Aktion(zahl)
wenn zahl = 1 dann aktion A
wenn zahl = 2 dann aktion B
wenn zahl = 3 dann aktion C

usw.

*** Hier mal das ganze in Basic, wie es z.B. unter Excel läuft

[image]



tastenmann gefällt das


stephanderheld
29.11.2018, 22:15

Als Antwort auf den Beitrag von Lok24

Re: Frage zur Programmierung einer speziellen Ablaufsteuerung

Hallo Werner,

erstmal vielen Dank für die (überraschend) schnelle Antwort

Ich denke ich werde mir das wohl am Wochenende mal etwas genauer ansehen. Was für Dich vielleicht trivial sein mag, ist bei meinem gegenwärtigen Schlafdefizit dann doch etwas herausfordernder


Aber ja, ursprünglich habe ich gedacht das Ganze auf einem RCX laufen zu lassen. Nur wenn die Anzahl der Ausgänge zu gering sein sollte, oder die Motorsteuerung zu ruckelig, würde ich auf einen Arduino ausweichen wollen/müssen.

Du darfst Dir aber sicher sein daß ich weitere Fragen zu dem Thema haben werde bevor mein MOC funktioniert..... ist eher ein Langzeitprojekt

Gruß

Stephan


Es ist niemals zu spät für eine glückliche Kindheit


Lok24
01.12.2018, 09:36

Als Antwort auf den Beitrag von stephanderheld

Editiert von
Lok24
01.12.2018, 09:44

Re: Frage zur Programmierung einer speziellen Ablaufsteuerung

Hallo,

hier also nochmal komplett (und diesmal hoffentlich ohne Fehler )

Variablen:

total: Anzahl bereits gezogener Zahlen
max : höchste zu ziehende Zahl
n: gezogene Zahl
g(max) : ein Array für die gezogenen Zahlen, Länge( oder Dimension) ist gleich der höchsten Zahl


solange total < max
Zahl zwischen 1 und max ziehen, in n speichern
ist g(n) = 0, dann
- setze g(n) = 1
- Unterprogramm Aktion(n)
- total = total +1
zurück zu "solange total < max"

Ein Nachteil sei nicht verschwiegen:
Das läuft natürlich immer länger, weil es ja immer mehr findet, die schon gezogen wurden, und neu suchen muss.
Ich denke mal für Zahlen bis max = 20 fällt das nicht weiter auf.

Das kann man vermeiden, wenn man alle Zahlen, die es gibt, am Anfang sucht und in das Array schreibt.
Also vor denm eigentlichen Programm eine Routine, die folgendes erzeugt:
g(1) = 17
g(2) = 3
g(3) = 28
g(4) = 4
usw.
Und das dann einfach der Reihe nach abarbeitet.

Natürlich ist das Programm ein naher Verwandter von dem obigem, man muss genau ein Zeichen ändern.

Grüße und eine Mütze voll Schlaf

Werner



stephanderheld
06.12.2018, 21:49

Als Antwort auf den Beitrag von Lok24

+1Re: Frage zur Programmierung einer speziellen Ablaufsteuerung

Hallo Werner,

und natürlich auch ein Hallo an alle anderen Mitleser.

Inzwischen habe ich mich ein wenig eingelesen. Das Stichwort "Array" war genau das was mir fehlte. Und ich glaube ich kann auch einigermassen nachvollziehen was Du da gemacht hast. Denke das ist ähnlich wie bei einer Fremdsprache. Man versteht immer mehr als man selber ausdrücken könnte

Um jetzt soweit zu kommen dass ich das Ganze auch anwenden kann, seien mir noch ein paar weitere Fragen erlaubt.......

Erst einmal wäre zu klären mit welcher Hardware ich das anwenden kann/sollte/will. Wie erwähnt, habe ich die guten alten RCX´e oder den Arduino zur Verfügung. Der RCX wäre toll weil eben Lego, und für Motoransteuerungen keine shields o.Ä. notwendig.

Allerdings habe ich den RCX bisher nur mit der Legoeigenen Software RIS programmiert. RIS läuft nur unter XP oder Vorgänger OS, d.h. um das neu aufzusetzen müsste ich erstmal eine VM installieren. Ich kann mich erinnern dass mich diese Aktion beim ersten Mal 2-3 Tage und einige graue Haare gekostet hat (ich bin kein Computermensch, muss mich dann immer lange einlesen und durchbeissen).

Nachteil Nr. 2 bei der Legoeigenen Software (oder vllt auch bei der mitgelieferten Firmware) ist die Geschwindigkeitsregulierung der Motoren. Grundsätzlich wären die bei RIS gegebenen 7 Stufen schon ausreichend, jedoch scheinen diese keinesfalls linear zu sein. Der zu regulierende Geschwindigkeitsbereich schien jedenfalls immer deutlich begrenzt zu sein im Vergleich z.B. zum PF-System das ja bekanntlich auch mit 7 Stufen arbeitet.

Für den RCX soll es aber auch eine Fremdgestrickte Firmware gegeben haben. Weiss da jemand was drüber? Wäre die (falls noch erhältlich) präziser in der Motoransteuerung? Sowas wie ein Sanftanlauf wäre natürlich ein Träumchen......


Andernfalls bliebe natürlich noch der Arduino, da gibt es ja jede Menge Tutorials und ein wenig löten schreckt mich auch nicht. Aber irgendwie wäre das für mich nur die B-Lösung. Und ich müsste mir erstmal diese Motorshields besorgen.... doof


Schliesslich noch was ganz anderes: Für die angedachten Programmsegmente die ich jeder Zahl zuordnen möchte, ergibt sich noch eine weitere Frage. Die Einzelnen "slots" sind räumlich getrennt, nämlich abwechselnd links und rechts. Dadurch ergibt sich, dass der Motorlauf umgedreht werden muss, je nach dem von welcher Seite ein Ereignis zu erwarten ist.
Frage: Gibt es eine Moglichkeit die Zahlen aus dem Array in der Bearbeitung nach "geraden" und "ungeraden" zu unterscheiden, oder würde man dafür dann die Zahlen jeweils getrennten Arrays zuordnen?

Ich hoffe ich hab mich soweit nachvollziehbar ausgedrückt. In meinem Kopf hab ich da ganz klare Bilder und Vorstellungen zu, aber das zu beschreiben, zumal mir ja diverse Begrifflichkeiten nicht geläufig sind, das ist dann schon was Anderes.... Aber ich hoffe ich kann euch irgendwann mal das fertige und funktionierende MOC vorstellen.....

Jedenfalls vielen Herzlichen Dank für die bisher geleistete Hilfe, ich hoffe auf Weitere

Gruß

Stephan


Es ist niemals zu spät für eine glückliche Kindheit


Lok24 gefällt das


Lok24
07.12.2018, 10:07

Als Antwort auf den Beitrag von stephanderheld

Re: Frage zur Programmierung einer speziellen Ablaufsteuerung

Moin Stephan,

danke für die ausführliche Antwort, manchmal gibt man sich hier Mühe mit einer ausführlichen Antwort und hört nie wieder was .....

stephanderheld hat geschrieben:

Erst einmal wäre zu klären mit welcher Hardware ich das anwenden kann/sollte/will. .....

Vielleicht doch mal auf ein EV3 umsteigen?
Ja, 276,-- sind viel Geld....

stephanderheld hat geschrieben:
Für den RCX soll es aber auch eine Fremdgestrickte Firmware gegeben haben. Weiss da jemand was drüber? Wäre die (falls noch erhältlich) präziser in der Motoransteuerung? Sowas wie ein Sanftanlauf wäre natürlich ein Träumchen......

Du meinst sowas:
https://youtu.be/ptKXH0fWPhQ
Ja, das macht was her. Aber: siehe unten.....

stephanderheld hat geschrieben:
Andernfalls bliebe natürlich noch der Arduino, da gibt es ja jede Menge Tutorials und ein wenig löten schreckt mich auch nicht. Aber irgendwie wäre das für mich nur die B-Lösung. Und ich müsste mir erstmal diese Motorshields besorgen.... doof

hier ist Dein Shop, der hat alles, was Du brauchst:
https://eckstein-shop.de/

stephanderheld hat geschrieben:
.... nämlich abwechselnd links und rechts. Dadurch ergibt sich, dass der Motorlauf umgedreht werden muss, je nach dem von welcher Seite ein Ereignis zu erwarten ist.
Frage: Gibt es eine Möglichkeit die Zahlen aus dem Array in der Bearbeitung nach "geraden" und "ungeraden" zu unterscheiden, oder würde man dafür dann die Zahlen jeweils getrennten Arrays zuordnen?

Nicht verstanden.
Entweder "abwechselnd", Du merkst Dir eine Variable "Richtung" und knipst die bei jedem Lauf an bzw aus.
Oder aber die geraden Zahlen "rechts", aber das ist natürlich nicht abwechselnd, wenn zufällig zwei Gerade hintereinander kommen.

Und ja, das kann man berechnen, die Funktion heißt (in der Mathematik) "Modulo" und liefert den Rest beim Teilen. 19 mod 4 ist also 3. (4x4=16, Rest 3)
Du schreibst also x = Zahl mod 2 und schaust, ob x=1 oder 0 ist.

Oder Du kombinierst das alles, da wird nach eine geraden Zahl immer(!) eine ungerade gezogen und umgekehrt.

stephanderheld hat geschrieben:
Ich hoffe ich hab mich soweit nachvollziehbar ausgedrückt. In meinem Kopf hab ich da ganz klare Bilder und Vorstellungen zu, aber das zu beschreiben, zumal mir ja diverse Begrifflichkeiten nicht geläufig sind, das ist dann schon was Anderes.... Aber ich hoffe ich kann euch irgendwann mal das fertige und funktionierende MOC vorstellen.....

Das freut mich, klingt spannend.

Zur Hardware: RCX kenne ich nur vom Bildern (und natürlich Eurer Anlage, die in St.Augustin öfter dabei war).
Aber ein XP aufsetzen klingt für mich nicht mehr nach Vergnügen...
Da und zu RIS kann ich also wenig dazu sagen.

Arduino : wird am PC angeschlossen, Programmierung auf dem PC
RaspPi : ist ein kompletter PC mit HDMI, USB, Audio, Programmierung auf dem RaspPi
(Bis ich alles zusammen hatte waren allerdings auch 100,-- weg,Kabel, Netzteil, Hub, und für die Realais, Kabel Stecker, usw nochmal gute 80,--)
Also das hier:
https://www.1000steine.de...g/10457-1529423403.jpg
Hat aber Relais, also nur an/aus, für die Weichenmotoren ausreichend.

Für beide (Arduino und RaspPi) gibt es Motorshields, auch zum Aufstecken, Erek hat hier schon lustige Anwendungen gezeigt.

Aber (Achtung, persönliche Meinung):
Das sind alles keine geregelten Motoren. d.h. ja, sie laufen schnell oder langsam, aber bei langsam und Last bleiben sie auch gerne stehen, da müsste man nachregeln. Mir ist es nicht gelungen, mit einem SBrick (255 Stufen) eine Lok langsam anfahren zu lassen, den Motor ohne Lok nur so halbwegs.
Das alles kann nur ein EV3, Boost oder Powered up.

stephanderheld hat geschrieben:
Jedenfalls vielen Herzlichen Dank für die bisher geleistete Hilfe, ich hoffe auf Weitere


Yes!

Grüße und schönes WE

Werner



Lok24
07.12.2018, 12:39

Als Antwort auf den Beitrag von stephanderheld

Re: Frage zur Programmierung einer speziellen Ablaufsteuerung

Ach ja, Tante Google und Mr. Wikipedia!

stephanderheld hat geschrieben:

Allerdings habe ich den RCX bisher nur mit der Legoeigenen Software RIS programmiert. RIS läuft nur unter XP oder Vorgänger OS, d.h. um das neu aufzusetzen müsste ich erstmal eine VM installieren. Ich kann mich erinnern dass mich diese Aktion beim ersten Mal 2-3 Tage und einige graue Haare gekostet hat (ich bin kein Computermensch, muss mich dann immer lange einlesen und durchbeissen).


Wenn Du mit einem Arduino anfängst musst Du auch was anders als RIS lernen.
Und da gibt es für die RCX ein ganzes Rudel, dass auf modernen Windows aufsetzt.

http://bricxcc.sourceforge.net/

und vor allem

https://de.wikipedia.org/...obotics_Command_System

Da muss doch was gehen?



stephanderheld
08.12.2018, 22:21

Als Antwort auf den Beitrag von Lok24

Re: Frage zur Programmierung einer speziellen Ablaufsteuerung

Danke Werner,

ich war nach deinem vorletzten Posting dann schon selber über BrickOS gestolpert und hatte versucht mich da einzulesen. Allerdings habe ich nur eher kryptische (aus meiner Sicht) Erklärungen gefunden wie man sowas zum laufen bringt... mit Kernel aufsetzen und Linux allgemein hab ich keine Erfahrung

Und prompt schiebst Du nen Post hinterher der mich auf eine neue Seite führt. Also hab ich die halbe Nacht damit zugebracht mich bei NCQ einzulesen. Und noch besser, das BricxCC läuft offenbar problemlos auf meinem Rechner mit Windows 7.

Und der Tip zum "Modulo" hat auch wieder voll ins Schwarze getroffen. Denke damit kann ich was anfangen

Nicht verstanden.
Entweder "abwechselnd", Du merkst Dir eine Variable "Richtung" und knipst die bei jedem Lauf an bzw aus.
Oder aber die geraden Zahlen "rechts", aber das ist natürlich nicht abwechselnd, wenn zufällig zwei Gerade hintereinander kommen.


Also es geht um die Anordnung im Raum. Die ist abwechselnd links b.z.w. rechts.
Slot1 ist links, Slot2 rechts, 3 wieder links u.s.w. Natürlich sollen die Slots zufällig ausgewählt werden, so dass z.B. auch 3 auf 5 folgen könnte.
Wichtig ist für mich die Einstellung des Motorlaufs, abhängig davon ob der Slot links oder rechts befindlich ist. Und genau das dürfte mit der Modulo-Funktion machbar sein


Warum RCX?
Nun, ich hab da einfach 6 oder 7 von rumliegen, inklusive passender Kabel, Sensoren und Motoren. Das bietet sich einfach an. Für meine Anwendungen sollte der RCX auch ausreichend sein. Jetzt erst noch in den EV3 zu investieren wird teuer, insbesondere wenn ich später noch Steuerbausteine für andere Projekte brauche (die gleichzeitig mit diesem laufen sollen).


Das sind alles keine geregelten Motoren. d.h. ja, sie laufen schnell oder langsam, aber bei langsam und Last bleiben sie auch gerne stehen, da müsste man nachregeln. Mir ist es nicht gelungen, mit einem SBrick (255 Stufen) eine Lok langsam anfahren zu lassen, den Motor ohne Lok nur so halbwegs.
Das alles kann nur ein EV3, Boost oder Powered up.

Ich wusste nicht das die neuen Bausteine das können?! Sprechen wir hier richtig von Lastgeregelten Motorsteuerungen? Oder gilt das für Schrittmotoren?
Ich hatte mich mal in die Funktionsweise der Lastregelung von Modellbahndecodern eigelesen. Da wird ja in der Spannungslosen Phase einer jeden PWM Modulation die vom Motor (rück)-induzierte Spannung gemessen und mit dem gewählten Soll verglichen.

Jetzt kenne ich nicht die Regelfrequenz, aber sobald die Zuleitung zwischen Steuerung und Motor zu lang wird, denke ich dass es Probleme geben würde wegen Spannungsabfall und Signallaufzeiten?
Ist aber auch unerheblich für meine Idee. Der "Sanftanlauf" soll ja nur eine langsame Steigerung der Geschwindigkeit ermöglichen. Ich brauche keine Synchronität oder sowas.


Der Eckstein-Shop scheint ein paar ganz interessante Bausteine zu führen. Bei den Servo-Kontrollern kommen mir sofort ganz neue Ideen für Schattenbahnhofsteuerungen...... aber das ist wieder eine andere Geschichte..

Die bisherigen Steuerungen auf unserer Anlage waren übrigens mehr "Zeitschaltuhren" als irgendwas aktiv gesteuertes. Da wurden eigentlich nur die Motoren nach Ablauf eines vorher gemessenen, und mit einem Sicherheitsfaktor versehenen, Zeitfensters ein und ausgeschaltet oder umgepolt.


Wie es jetzt weiter geht:
Um den RCX zu programmieren, muss ich erstmal den zugehörigen Infrarot-tower finden. Ich befürchte der liegt noch in irgendwelchen Umzugskartons vom letzten Jahr Sobald ich den habe, werd ich mal etwas mit den einzelnen Progrmmschritten experimentieren.
Zeitgleich trocknet gerade der Leim an der Unterkonstruktion. Die nächsten MOC´s sollen modular und einfach zu transportieren sein, daher kommen die auf Modulkästen ähnlich wie bei den FREMO Modulen.
Das wird alles noch eine Weile dauern, aber sobald neue Fragen auftauchen, melde ich mich wieder

Vielen Dank nochmal bis hier. Du hast mir mit den einzelnen Stichworten und Erklärungen dazu wirklich sehr geholfen


Gruß

Stephan


Es ist niemals zu spät für eine glückliche Kindheit


Lok24
Sonntag, 11:44

Als Antwort auf den Beitrag von stephanderheld

Re: Frage zur Programmierung einer speziellen Ablaufsteuerung

Hallo Stephan,

stephanderheld hat geschrieben:

Und prompt schiebst Du nen Post hinterher der mich auf eine neue Seite führt. Also hab ich die halbe Nacht damit zugebracht mich bei NCQ einzulesen. Und noch besser, das BricxCC läuft offenbar problemlos auf meinem Rechner mit Windows 7.

Sag ich ja, da geht was.
Du kannst auch mal schauen, ob sich da noch jemand rumtreibt, ich glaube ja:
https://www.eurobricks.co...ndstorms-and-robotics/
Einfach mal nach "RCX" suchen, oder was glaubst Du, wo ich meine Weisheit herhabe?


stephanderheld hat geschrieben:

Und der Tip zum "Modulo" hat auch wieder voll ins Schwarze getroffen. Denke damit kann ich was anfangen


stephanderheld hat geschrieben:
Wichtig ist für mich die Einstellung des Motorlaufs, abhängig davon ob der Slot links oder rechts befindlich ist. Und genau das dürfte mit der Modulo-Funktion machbar sein

Dafür ist die da.

stephanderheld hat geschrieben:
Warum RCX? Nun, ich hab da einfach 6 oder 7 von rumliegen, inklusive passender Kabel, Sensoren und Motoren. Das bietet sich einfach an. Jetzt erst noch in den EV3 zu investieren wird teuer, insbesondere wenn ich später noch Steuerbausteine für andere Projekte brauche (die gleichzeitig mit diesem laufen sollen).

Das stimmt alles, und natürlich muss das jeder selber wissen.
Aber: das EV3 ist anders, siehe unten.

stephanderheld hat geschrieben:
Ich wusste nicht das die neuen Bausteine das können?! Sprechen wir hier richtig von Lastgeregelten Motorsteuerungen? Oder gilt das für Schrittmotoren?....
Ich hatte mich mal in die Funktionsweise der Lastregelung von Modellbahndecodern eigelesen. Da wird ja in der Spannungslosen Phase einer jeden PWM Modulation die vom Motor (rück)-induzierte Spannung gemessen und mit dem gewählten Soll verglichen.

Ja, so macht die Modellbahn das seit 20 Jahren.
Ich hatte mich ungenau ausgedrückt, sorry.
Nein, eine Lastregelung haben die nicht. Aber einen eingebauten Tacho, der den Drehwinkel anzeigt. Damit kann man sagen
- eine Umdrehung mit V=20
- eine Umdrehung mit V=30
- eine Umdrehung mit V=40
- Fahre mit 40
So fährt mein Gabelstapler, und das läuft prima.
Aber man kann eben auch eine Schranke betreiben:
- Drehe 90° links
- warte 3 sec
- Drehe 90° rechts
Und das alles ohne jedes Zahnrad.

stephanderheld hat geschrieben:
Jetzt kenne ich nicht die Regelfrequenz, aber sobald die Zuleitung zwischen Steuerung und Motor zu lang wird, denke ich dass es Probleme geben würde wegen Spannungsabfall und Signallaufzeiten?

Das sind bei der Modellbahn 16 oder gar 32 kHz, und man kann den Decoder auch am Anlagenrand positionieren, geht trotzdem.

stephanderheld hat geschrieben:
Der Eckstein-Shop scheint ein paar ganz interessante Bausteine zu führen. Bei den Servo-Kontrollern kommen mir sofort ganz neue Ideen für Schattenbahnhofsteuerungen...... aber das ist wieder eine andere Geschichte..
Gute Preise, Ware am übernächsten Tag da. Ich habe für mein 8-Fach-Relais-Modul unter 8,-- bezahlt.

stephanderheld hat geschrieben:
Zeitgleich trocknet gerade der Leim an der Unterkonstruktion. Die nächsten MOC´s sollen modular und einfach zu transportieren sein, daher kommen die auf Modulkästen ähnlich wie bei den FREMO Modulen.

Sehr interessant.

stephanderheld hat geschrieben:
Das wird alles noch eine Weile dauern, aber sobald neue Fragen auftauchen, melde ich mich wieder

Unbedingt!

Grüße

Werner