Jump to content

The_Real_Black

Members
  • Gesamte Inhalte

    288
  • Benutzer seit

  • Letzter Besuch

Alle erstellten Inhalte von The_Real_Black

  1. Hi ich hab mal etwas getestet und eine kleine Oberfläche gebastelt. Funktioniert ganz gut bis auf einen Restart der Simulation... ich sollte die Threads sauber beenden und neu anlegen. Als ersten Schritt bisher habe ich beim Emulator eine Stop Methode hinzugefügt und die while(true)-Schleifen durch abbrechbare ersetzt. Mir gefällt die Lösung mit dem generischen Klassen ("SingleValueDevice<T>") auch wenn ich mir noch eine Zwischenstufe (abstrakte Klasse) zwischen "EnumeratableDevice" und "RandomTemperatureBricklet" wünsche. AbstraktTemperatureBricklet -> bei welchen man dann die bereits genannten Methoden implementieren kann. Davon kann man dann das RandomTemperatureBricklet ableiten oder auch ein "RemoteTemperatureBricklet" welches dann werte von außen annimmt. Wurde schon etwas in Richtung Bricks geplant? IMU, Servo, DC...? Damit könnte man dann eine ganze Testumgebung aufsetzen... ich sehe schon kleine virtuelle Roboter welche durch 3D Umgebungen fahren... mit Rückkopplungen damit die Simulation auf die Eingaben des zu testenden Programms reagieren kann... KNN welche dann damit trainiert werden können... und so das Selbst fahren lernen können. ok da ist noch viel viel zu Coden dafür. TFStackEmulator-Black.7z
  2. Cool. Ich hab gleich mal eine Klasse gemacht: SinTemperatureBricklet. Sieht gut aus. Die Sprünge zwischen den Kurven kamen vom debuggen. Mein Vorschlag: Abstrakte Basisklassen für alle Brickles welche nur noch die aktuell benannte RandomizeTemperature Method, die OnTick und eine neue Methode "Init" implementieren müssen. OnTick -> wird wie bisher Aufgerufen. RandomizeTemperature -> SetNewValue kann per hand aufgerufen werden und ist allgemein benannt, dass es für alle Bricklets mit einen Wert gelten kann. Init -> wird einmal nach den Konstruktor oder beim hinzufügen zum Emulator einmal aufgerufen hier kann man alle eigenen Variablen initialisieren. Nur so eine Idee ^^ Die Basisklassen könnten dann sicher per Generator für alle Bricklets erzeugt werden. Oder wie wäre es die gleich im C# Code zu erzeugen? Per Reflection alle Bricklets auslesen die Konstanten auslesen und mit den Namen dann als dateien abspeichern... Ich glaub ich überlege mir da mal was...
  3. Ist RepRap öfters Down? Ich Pack meinen Post mal hier rein. ------- Danke für die schnellen Antworten. Ich bin jetzt bei 235°C und 40 mm/s und es klappt besser das Geräusch kommt nur noch vereinzelt. 100% sieht noch anders aus, aber ich versuche es weiter. Dazu hab ich noch Fragen: Wie hoch kann man die Termeratur bei PLA noch schrauben? (Ich hab etwas Angst davor irgendwas kaputt zu machen, da ich gelesen habe, dass einige bei weniger Temperatur drucken.) Die Spule habe ich so geliefert bekommen wie ich sie jetzt verwende, wenn sie wirklich Wasser gezogen hat: Wie bekommt man das Wasser wieder aus dem PLA raus? Hat jemand damit Erfahrungen mit einen Markerbot Replicator 2? (Wenn die Frage gestattet ist im reprap Forum oder wird man dafür tot geflamed?)
  4. Die Drucke kleben nun besser an der Bodenplatte es hat sich nichts mehr abgelöst beim Druck. Leider verziehen sich noch einzelne Fäden bei Kurven. Es sieht so aus als würden einzelne Ebenen die Rundungen "abkürzen". Ich werde mal weiter testen. Edit: Kurzfassung -> "Der Faden klebt nicht am Objekt fest" Edit2: 06.04.2013 http://www.thingiverse.com/thing:55476 Der Faden reißt? Auf den Flächen sieht es aus als würde der Faden reißen und bei dünnen Wänden\♣Böden gibt es sogar Löcher... Merkwürdig danaben sied wieder einige Bahnen ok und glatt... Noch ein Edit: http://www.thingiverse.com/thing:7621 Sharp IR Sensor Servo Bracket
  5. Ich drucke PLA bei (Default) 230°C und mein Druckbett ist nicht beheizt. Nein ich meine, dass die einzelnen Fäden im Objekt lösen sich von einander. Das Absetzen beim Wechsel zwichen den Druck stellen funktioniert ohne, dass Material verloren geht. http://www.makerbot.com/support/replicator2x/troubleshooting/ Edit: Ich hab mal die Basisplatte neu eingestellt und etwas weniger Spiel jetzt klappt es besser, aber ich Teste es gerade erst mit ein paar Teilen. Wenn ich mehr herausgefunden habe sage ich bescheid.
  6. Kleine Frage an alle 3D Drucker hier... Kennt ihr ein gutes, deutsches Forum für 3D Druck? Ich habe dass Problem, dass ein Nautilus-Zahnrad siehe hier: http://www.thingiverse.com/thing:27233 gedruck wird, aber die länglichen Verbinder sich wölben und dann vom Druckkopf weggeschoben werden. (Es löst sich immer von den gegenüberliegenden Seiten) Auch sieht es aus als würden einzelne Fäden nicht am Modell kleben bleiben, sondern "gerade" Überbrück werden. An was kann dies liegen? Und wie bekommt man dies weg?
  7. @TF: Ich will nur einen Brick auf welchen ich ein Programm ablegen kann (Maschinencode) welche dann innen eine Schleife abarbeitet. // Daten init. :loop // Programm goto loop; :exit // Brickprogramm endet Ich brauche kein OS oder sonst was, "einfach" ins Programm starten, genügt mir. Was ich brauchen kann ist ein SD Karten Slot (Textdaten schreiben) etwas Ram und ein paar Register\ min 2 Zählregister und Interrupts\Callbacks zum freien definieren. Und dann eine C Api welche mir das Bytes schupsen in Assembler abnimmt. Dies sollte auf einen Brick passen oder? Anwendungsbereich: - Logger für Wetterdaten - Steuerung für CNC-Fräsen usw Für alles mehr an Anforderungen habe ich einen RaspPI dort kann ich in Java so viel an Ram belegen wie es sonst kein Brick je können wird und dass mit FTP und HTTP wie ich will... und falls der PI nicht ausrecht dann klemme ich meine Bicks wieder am Laptop\PC an!
  8. Zu meiner Anwendung: Ich würde einen Brick benötigen, welcher auf definierte Events\Callbacks in den Stack Befehle absetzt, aber ansonsten die normale Kommunikation nicht beeinträchtigt. Beispiele: Verbindung WIFI bricht ab -> DC 1 und 2 schalten ab. IO16 hat auf Pin 1 oder 8 ein Signal -> DC's aus -> warte x ms -> dc zurück. ... Ansonsten bleibt die Verbindung per USB oder WIFI zum PC erhalten. Im Grunde würde mir ein "Plugin" in die normale Firmware genügen welche x mal in der Sekunde ausgeführt wird. Die Idee von cfranz, dass man beide Sprachen realisiert wäre auch ein Ansatz und dann müssten hier eine Einschnitte gemacht werden.
  9. Je schneller desto besser. Wenn man auf die Hardware Ebene geht sollte man auch alles aus den Bausteinen hohlen was geht. Besonders in Richtung "bewegte Teile" Fräse oder Roboter ist eine schnellere Verarbeitung immer besser. Wenn ich X mal öfter in der Sekunde eine Kollisions\Positionsprüfung durchführen kann würde ich diese Lösung bevorzugen. Kann man irgendwie "Echtzeitverarbeitung" garantieren? Mit C/Assembler sollte es möglich sein die maximale Reaktionszeit des Systems zu berechnen. Ist dies mit einer "interpretierten" Sprache/Java auch möglich? *Echtzeit: im Sinne von "die meiste Zeit" berechenbares Verhalten im ms Bereich.
  10. @AuronX: Es ist primitiver und hat keine Objekte, daher müssen keine Zugriffsrechte oder andere objektorientierte Konzepte berücksichtigt werden. Mit kleinen flachen Strukturen sollte der Overhead geringer sein. Mit objektorientierten Sprachen zieht man sich immer einen Mehraufwand zu. @"Assembler": Ja ich würde, wenn ich "On Device" entwickle, auf jedenfall auch in Assember optimieren oder gleich in Assembler entwickeln. Nur damit kann man alle Funktionen der Bricks direkt nutzen und hardwarenaher wird man nicht kommen. @"Jazelle": Wie klein ist sowas? Ein paar Bilder sehen aus als wäre der Chip größer als ein Brick...
  11. Ich bin für C es ist einfacher und hardwarenaher. Java ist auf Bricks vermutlich nicht möglich, da man dafür JRE benötigt dass würde die Grenzen der Bricks massiv sprengen... C lässt sich auch prima im Assembler Code optimieren mit anderen Sprachen ist dies nicht möglich.
  12. Download Jeder Brick und Bicklet benötigt im Moment eine eigene JSP Seite um die AJAX Requests zu verarbeiten. Einige sind bereits Implementiert (siehe Bild) andere Benötigen etwas mehr Zeit. ^^ Im Moment gibt es 2 Handler der eine gibt Statusinformationen zurück ob Aktion erfolgreich war oder nicht die andere schreibt wie im Bild gezeigt die Werte hinaus. Was im Bild nicht gezeigt ist ist eine Eingabemaske für LCD Bicklets hier können Texte frei plaziert werden, das Licht geschalten oder das Display gelöscht werden. So könnte man auch kleine Nachrichten übermitteln. Ich denke darüber nach, dass ich auch Lichtstärke als Bild ausgeben könnte... oder die IO Bricklets per kleine Symbole... bei Temperatur oder Poti könnte man auch Balken oä ausgeben... viel viel ist noch zu tun..
  13. Updates: - Source Files (JSP und Java) - Jetzt noch ein Bild: Diese Seite läuft "gerade" auf meinen RaspPi\Tomcat7\Webserver. Zwar muss die Seite 2 mal aufgerufen werden, da die Enumeration ein paar Sekunden benötigt um die Bricks zu erfassen und ich keine Wartezeitem beim ersten Laden eingebaut habe ^^ Die Anzeige erfolgt nach bekannten Prinzip wie bei meinen C# Projekten bei jeden Enumerations-Callback wird ein Objekt der BrickInfo Klasse angelegt und in einer Liste verwaltet. Zusätzlich wird sofort das passende Objekt erzeugt. Eine Methode in der BrickInfo Klasse beinhaltet die Liste der Bricknamen (erzeugt per C# Tool von oben) und eine Methode welche mit einen kurzen Text je Brick Typ ausgibt (siehe Wert Spalte in der Tabelle). Info: In der heutigen Version sind nur wenige der Bricks implementiert. Auch lässt sich über die Infos beim LCD streiten ^^ Hinweise: In der de.TheRealBlack.Utils Klasse gibt es eine Methode welche Entwicklungssystem vom PI unterscheidet. Dies geschieht anhand des Hostnamens hier müsst ihr bei identischen Aufbau euren Hostnamen eintragen. BrickWrapper ist ein Singelton welches die Connection von TF zwischenspeichert, dass nicht mehrere Connections angelegt werden. Hier wird hier Port und Host IP angegeben und die gefundenen Bricks verwaltet. Roadmap: Java Skripte erstellen damit man die Bricks Steuern kann. Edit: onclick="SendReq('/AJAX/BrickletLCD20x4.jsp', '7ZG', 'SwitchLight', caller)" Ich kann nun über meine Seite das Licht des BrickletLCD20x4 an und ausschalten *hip hip!*
  14. Notepad++ ist immer gut, aber keine IDE ich habe nun auf meinen Entwicklungsystem auch Tomcat installiert und dann hier Eclipse laufen lassen. Nun kann ich am Laptop entwickeln und dann alles auf den PI packen. Ich verstehe aber immer noch nicht was bei der Neuinstallation von allen anders gelaufen ist, dass es jetzt klappt... andererseits kümmert es mich auch nicht wirklich, da ich glücklich bin, dass es klappt. Im Moment entwickle ich eine kleine Übersichtsseite welche beim ersten Aufruf eine Enumeration startet und dann beim zweiten Aufruf eine Tabelle mit allen gefunden Bricks und ihren wichtigsten Werten beinhaltet. Da am PI der BrickD Läuft kann ich meine Bricks am PI belassen und mit einer kleinen Server Unterscheidung den Host der IPConnection umändern. Klappt Super! Den ersten Source wird es dann bald in meinen Projekt Thread geben ^^
  15. Ich habe mir in C# gerade ein Tool geschrieben (dass oben gezeigte angepasst) welches mir für jeden Brick(let) Typ die Folgende Zeile ausgegeben hat: case BrickDC.DEVICE_IDENTIFIER: inf.dev = new BrickDC(uid,conn); break; dieses dabe ich dann in ein switch in meinen Java Source gepackt... Sinn dieser Zeilen ist es auf Unterscheidung des DEVICE_IDENTIFIER sofort die korrekten Konstruktor zu erhalten. Und später alle Bricks einzeln abzufragen und auf meine JSP Seite zu packen.
  16. Tipps für alle: Erst mal Updaten "sudo apt-get update" dann Installieren beginnen. Und nur dieser Anleitung folgen: http://wiki.ubuntuusers.de/Tomcat#Paketweiterleitung-mittels-iptables Es klappt! Die Seite kannte ich zwar, aber hat mir vorher nicht geholfen und heute hatte ich Frust und habe alles gelöscht und von vorne angefangen... dies hätte ich vor 4 Tagen bereits machen sollen ^^ Gibt es einen besseren Editor für JSP und Java Klassen? Ich würde gerne kleine Änderungen direkt auf dem PI machen und nicht erst "lokal" Entwickeln. Ich lasse mich hier genre beraten, da ich außer Eclipse nichts zum JSP entwickeln kenne. @TF: Wie gut Funktionieren die Java Bindings in JSP Seiten?
  17. @Equinox: Ja ich hab Tomcat mit Sudo zu installiert (glaub ich) die Skripte und die Links zum Skript in den r1-3 Ordnern sind auch angelegt nach Dr.Google in den verschiedenen Anleitungen, aber es klappt nicht... Nach dem Start bekomme ich keinen Tomcat auf keinen der Ports. Es wird auch kein Log angelegt, dass etwas schiefgegangen ist. Ich meinte Eclipse per Packages zu installieren wie Java und Co auch. Es ist im Repository angelegt, aber ich erhalte immer 404 beim Datei Download. Ähnliches hatte ich bei Java 6 auch deswegen bin ich gleich auf Java 7 umgestiegen. Gibt es ein anderes Eclipse im Repository welches ohne Fehler installiert werden kann? Mit der Liste von Packages welche es zum wheezy-raspbian gibt komme ich nicht ganz klar was bedueten die anderen Eclipse mit dem Minus und dem Anhang?
  18. Hallo FabianB ich versuche gerade meinen Raspberry einzurichten habe dabei aber ein paar Probleme. Ich wollte meinen PI mit einen Tomcat Server ausrüsten und ein paar Teile meiner Porjekte auf Java übertragen. Problem A: Wie bekomme ich den Tomcat Pfad als PI User: ./apache-tomcat-7.0.37/bin/ als Root beim Booten ausgeführt. (Start per Hand klappt auf Port 8080, da Port 80 nur vom Root verwendet werden darf... Nur eine Info an alle die damit Probleme haben!) Ich bekomme die Start Skripte nicht hin und alle Hilfen sind nicht wirklich hilfreich wenn irgendwo ein Fehler drin ist. Problem B: Gibt es ein funktionierendes Eclipse Package? Alles was ich finde hat immer wieder 404 Fehler bei einigen der Dateien... Gibts hier nichts funktionierendes für Raspberry?
  19. Danke Ja es wäre schon nützlich, aber man kann, wenn man es selbst macht, auch hier eine Übersetzung einbauen. @Topic: Ich werde die nächste Zeit noch etwas weniger hier schreiben, da ich meine Implementierungen überarbeiten werde mit dem 2.0 Bindings. Im Moment überlege ich wie ich mir die Bricks Speichere: - Liste mit allen Bricks und Bricklets - Liste mit Bricks \ je Stack * Liste ist hier ein Dic<String(UID), Brick> Dann werden die Bricks und Bricklets Objekte miteinander verknüpft. Brick_Info{ Dic<String, Brick> Stack; Dic<String(Port), Bricklet> Angeschlossen; Brick brick; // Dieser Brick // + Infos }
  20. @AuronX: Ich wollte als erstes nur den Port der Connection bekommen der Rest war Copy Paste Blödheit ^^ Ja ein "String?" ist nicht nötig da String bereits Null sein darf. Ich könnte auch mit Port 0 leben, aber bei Null Werten ist hier Wirklich nicht gesetzt gemeint. Ich sehe es hier aus einer Datenbank Sicht: Wert ist gesetzt damit ist die Verbindung offen oder es ist nicht gesetzt "null" damit ist es geschlossen. Bei Bool? und Tristate Checkboxen würde es prima passen "Tristate" ungesetzt ansonsten True oder False. Bei String stellt sich die Frage "" oder null leider ist dies für viele Datenbanken Identisch, aber wie würde man es hier dann handhaben auch auf die anderen Schnittstellen betrachtet? Mit Port 0 und Host null wäre ich auch sehr zufrieden!
  21. ok alles ist auf 2.0 geflashed, aber ich habe alles zerlegen müssen um es zu Flashen. Sobald der Stack zusammen gesteckt war wurde kein Brick im Bootloader erkannt. Ansonten klappte es mit meheren Bricklets angesteckt und diese dann auch upzudaten.
  22. private void butDebug_Click(object sender, EventArgs e) { LogClear(); Type[] typelist = Assembly.GetAssembly((new IPConnection()).GetType()) .GetTypes().Where(t => String.Equals(t.Namespace, "Tinkerforge", StringComparison.Ordinal)).ToArray(); SortedList<int, String> list = new SortedList<int, string>(); for(int i = 0; i < typelist.Length; i++) { //Log(typelist[i].Name); FieldInfo info = typelist[i].GetField("DEVICE_IDENTIFIER", BindingFlags.Public | BindingFlags.Static); if(info != null) { object value = info.GetValue(null); //Log(typelist[i].Name + "\t" + value.ToString()); list.Add((int)value, typelist[i].Name); } } foreach(KeyValuePair<int, string> kvp in list) { Log(kvp.Key + "\t" + kvp.Value); } } Was macht es: 11 BrickDC 13 BrickMaster 14 BrickServo 15 BrickStepper 16 BrickIMU 21 BrickletAmbientLight 23 BrickletCurrent12 24 BrickletCurrent25 25 BrickletDistanceIR 26 BrickletDualRelay 27 BrickletHumidity 28 BrickletIO16 29 BrickletIO4 210 BrickletJoystick 211 BrickletLCD16x2 212 BrickletLCD20x4 213 BrickletLinearPoti 214 BrickletPiezoBuzzer 215 BrickletRotaryPoti 216 BrickletTemperature 217 BrickletTemperatureIR 218 BrickletVoltage 219 BrickletAnalogIn 220 BrickletAnalogOut 221 BrickletBarometer 222 BrickletGPS 223 BrickletIndustrialDigitalIn4 224 BrickletIndustrialDigitalOut4 225 BrickletIndustrialQuadRelay 227 BrickletVoltageCurrent Hier bekommt man einfach und sauber alle Namen und IDs der Bricks bzw. Bricklets raus. Dann verfeinern wir noch die Ausgabe: string tmp = kvp.Value; if(tmp.StartsWith("Bricklet")) { tmp = tmp.Replace("Bricklet", "Bricklet "); }else { tmp = tmp.Replace("Brick", "Brick "); } Log(kvp.Key + "\t" + tmp); Dann sieht die Ausgabe noch besser aus: Dass ganze packt man dann in eine Utilsklasse als Dictonary<int, String> oder als Infoklasse welche angibt ob es Brick oder Bricklet ist und kann sich so die Namen der angeschlossenen Bricks ausgeben lassen. Vorteil ist, dass egal was TF nun an neuen Bricks liefert man immer alle Bricknamen geliefert bekommt.
  23. Kann man in den Bindings in IPConnection bitte nach dem Verbinden bitte in 2 Eigenschaften bitte Port und Ip Speichern? In C#: string? host { get { return ...}; } int? port{ get { return ...}; } also wenn port.HasValue = false ist, dann gibt es keinen Wert und die Connection ist nicht verbunden. Wenn der Wert gesetzt ist kann man diesen auch nochmal auslesen port.value. Beim Disconect werden diese Werte dann wieder genulled. Beim Enumerieren könnte man dann so einfacher bestimmen von welcher Connection der Call stammt.
×
×
  • Neu erstellen...