Python soll selber probieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
reneschmidt
User
Beiträge: 48
Registriert: Montag 4. Januar 2016, 15:14

Hallo zusammen,

ich habe eine relativ alte Anlage, die sich nur über die COM Schnittstelle Programmieren lässt. Leider gibt es kein wirkliches Handbuch dafür und auch selber ist die Anlage nicht besonders gesprächig.
Im Prinzip bleibt nur testen bis man die richtigen Befehle findet.
Ich habe in handschriftlichen Aufzeichnungen gefunden, dass die Anlage Befehle in folgendem Muster entgegennimmt:
.m1ud=5
das kann ich aus testen und funktioniert soweit. .m1ud ist dabei der Parameter der gesetzt werden soll und 5 der Wert. Leider brauche ich Befehle wo ich nicht mal genau weiß ob diese existieren.
Was aber ein kleiner Lichtblick ist, wenn ich z.B. nur .m1ud eingebe, bekomme ich ein kleine Erklärung zurück. Bei einem Befehl, die die Anlage nicht kennt, gibt es keine Antwort.

Meine Idee ist jetzt: einmal durchprobieren, da der der das System gebaut hat nicht mehr nicht mehr greifbar ist.

Aller Wahrscheinlichkeit nach bestehen alle befehle und Parameter aus einem 1-6 Zeichen langen String auf Buchstaben und Zahlen.

Ich bin also angefangen und wollte ein Python Script schreiben welches alle möglichen Kombinationen erzeugt und dann einmal testet, eine Sekunde wartet und dann weiter macht. Wenn ein Treffer erfolgt ist, wird das ganze dokumentiert.

Mit ist bewusst, das das ganze wahrscheinlich Tage bis Wochen dauern kann bis alle Kombinationen durchprobiert sind, ist aber immer noch die angenehmere alternative als die Anlage neuprogrammieren zu lassen bzw. zutauschen.

Leider habe ich eine kleine Gedankenblockade beim schreiben des Erzeugen der Werte.
Hat jemand eine Idee, wie der Code aussehen muss, wenn ich oben die möglichen Zeichen und die Max Länge angeben und unten sollten dann nacheinander alle möglichen Werte rauskommen. Bei mir kommt immer nichts richtiges bei raus. Im Prinzip dürften es ja nur mehrere Schleifen sein, ich bekomme die aber nicht auf die Reihe...

Der Restliche Ablauf ist fertig und funktioniert, nur eben das erzeugen der werte noch nicht.

Vielen Dank für Eure Hilfe.
Tholo
User
Beiträge: 177
Registriert: Sonntag 7. Januar 2018, 20:36

Was für eine Anlage soll das sein?
Sprichst du die via SSH an? Oder wo kommt der Output von

Code: Alles auswählen

.m1ud=5
her?

Du könntest ja ein Script schreiben welches alle x Sekunden

Code: Alles auswählen

.m1ud+=1
sendet und auf ein Output wartet und den dann Dokumentieren. Zb. in ein Dict. Dann hast du die Var als Key und den Output schon mal zusammen.
Oder sind die Buchstaben und Zahlen (String Kombination) völlig willkürlich? Dann wird es lustig...
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@reneschmidt: Dir ist schon bewußt, dass Du 70 Jahre brauchst, um alle Kombinationen von 6 Zahlen und Buchstaben durchzuprobieren, wenn jeder Versuch eine Sekunde braucht.

Dafür helfen Dir die Methoden aus itertools, z.B. permutations.
narpfel
User
Beiträge: 643
Registriert: Freitag 20. Oktober 2017, 16:10

Moin,

um was für eine Anlage geht es denn? Eventuell ist es möglich, einen möglicherweise vorhandenen Microcontroller auszubauen und auszulesen (oder hast du ISP-Zugriff?). Wenn du Glück hast, könnten die möglichen Kommandostrings im kompilierten Code stehen und so relativ leicht zu finden sein.
reneschmidt
User
Beiträge: 48
Registriert: Montag 4. Januar 2016, 15:14

Hallo,

das ist eine Anlage für Futtersteuerung die gut 20 Jahre alt ist. Im Moment wir sie per RS232 angesprochen, doch das Steuergerät hat mittlerweile Aussetzer. Daher ist die Idee, da die Motoren etc. alle neu sind, ein kleines Programm zu haben, das dann nur die Motoren ansteuert. Ich wollte dazu ein Script haben, was zum einen die Sensoren überwacht und sobald etwas registriert wird, dann einen entsprechenden Befehl an die Anlage schickt. Eben genau das was das 20 Jahre alte Steuer gerät macht eben nur jetzt auf einem Server. Dazu wollte ich die RS232 Schnittstelle per RS232 zu Ethernet Converter anbinden.
Ich gehe im Moment eher davon aus, das die befehle nicht wirklich so lang sind. Das Beispiel ist schon eins der Komplexeren. Also eher 4 anstatt von 6. Außerdem ist der Anlage Groß und Kleinschreibung egal.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na dann hast du immer noch im *besten* Fall

36**4 / (3600 * 24 * 365) = 0.05326027397260274

ungefaehr ein halbes Jahr Zeit zu warten, bis du alle 4-Stelligen Kombinationen von Zahlen und Buchstaben durch hast. Und eine Sekunde wartest.

Mir ist noch nicht ganz klar, wer jetzt der Empfaenger der Kommandos ist, wenn das Steuergeraet selbst das Problem darstellt. Ist das die Motorsteuerung?
Benutzeravatar
DeaD_EyE
User
Beiträge: 1012
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Gibt es weder vom Empfänger, noch vom Sender den Quellcode?
Hängt da zufällig eine SPS dran?
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten