Jump to content

[RED-Brick] Software-Architektur / Designfrage auf Grund des Beispiels: ExampleStartProgram


Recommended Posts

Hi all,

ich bin neu und würde gerne einen RED für StandAlone mit Java programmieren. Das Beispiel "ExampleStartProgram" (https://www.tinkerforge.com/de/doc/Software/Bricks/RED_Brick_Java.html#red-brick-java-examples) definiert dazu eine Klasse, die in der main Methode aber nicht instanziiert wird. Statt dessen wird die private static boolean startProgram(BrickRED red, String identifier) Methode aufgerufen, die nun ihrerseits - so wie ich den Code verstanden habe -

  1. eine Session erzeugt
  2. die Programmliste durchläuft
  3. die Identifier kontolliert (welche?)
  4. das Programm startet (welches?) (wie?)
     
if (stringData.equalsIgnoreCase(identifier)) {
	checkError(red.startProgram(program.itemObjectId));
	started = true;
}

Da ich hier über die Doku nicht weitergekommen bin möchte ich Euch gerne kurz fragen bitte:

  1. Was ist der Identifier aus dem Code? Ist das nur ein "Identifier" oder muß der mit dem Identifier oder Namen aus dem Programm-Upload-Wizard (Schritt-1) übereinstimmen?
  2. Was genau ruft die obige Methode (red.startProgram(program.itemObjectId)) auf? Da dieser Code (aus dem ExampleStartProgram) auch komplett in der Main Methode stehen könnte verstehe ich nicht, wie die eigentliche Klasse instantiiert wird? Muß die ein Interface implementieren? Oder eine bestimmte Methode zur Verfügung stellen? Oder kann ich mir das alles sparen und mein Klassenobjekt direkt in der Main Method instantiieren?

Vielen herzlichen Dank im Vorraus und lb. Gr.

Thomas

 

Bildschirmfoto 2020-11-27 um 15.51.05.jpg

Link to comment
Share on other sites

Ich glaube wir haben dich erfolgreich verwirrt!

Die API des RED Brick selbst wird von Brick Viewer verwendet um z.B. Programme auf den RED Brick zu laden und zu verwalten.

Wenn du auf dem RED Brick ein Java Programm ausführen willst, das an den RED Brick angeschlossene Bricks und Bricklets verwendet, dann hast du mit der API des RED Bricks nichts zu tun. Du würdest dein Programm entwickeln und dann über den Brick Viewer auf den RED Brick laden und ausführen lassen.

Daher hast du in dem Fall auch mit nichts zu tun was du dort im Beispiel siehst. Dieses Beispiel zeigt nicht, wie du ein Programm schreibst, das auf dem RED Brick läuft. Dieses Beispiel existiert, weil mal ein Kunde danach gefragt hat, wie man aus einem Programm A heraus ein Programm B auf dem RED Brick manuell starten kann. Das ist aber ein Spezialfall. Der Normalfall ist, dass du dein Programm auf den RED Brick lädst und es dann durch den RED Brick automatisch starten lässt.

Kurz zu deinen Fragen:

55 minutes ago, ttrepper said:

Was ist der Identifier aus dem Code? Ist das nur ein "Identifier" oder muß der mit dem Identifier oder Namen aus dem Programm-Upload-Wizard (Schritt-1) übereinstimmen?

Das ist der Identifier aus dem Program Wizard für das Programm das manuell gestartet werden soll. Das ist nicht der Identifier für dieses Beispiel Programm.

55 minutes ago, ttrepper said:

Was genau ruft die obige Methode (red.startProgram(program.itemObjectId)) auf? Da dieser Code (aus dem ExampleStartProgram) auch komplett in der Main Methode stehen könnte verstehe ich nicht, wie die eigentliche Klasse instantiiert wird? Muß die ein Interface implementieren? Oder eine bestimmte Methode zur Verfügung stellen? Oder kann ich mir das alles sparen und mein Klassenobjekt direkt in der Main Method instantiieren?

Mit der startProgram Funktion der RED Brick API kann ein vorher hochgeladenes Programm manuell gestartet werden. Der restlich Code davor dient dazu das zu startende Programm anhand seines Identifiers zu finden.

Dort wird keine Klasse instantiiert weil das Beispiel möglichst einfach sein soll, keine Objektorientierung nötig in diesem Beispiel. Dein Programm basiert nicht auf Ableiten einer Basisklasse oder Implementieren eines Interfaces oder diesem Beispiel überhaupt. Außer wenn du wirklich Brick Viewer Aufgaben in deinem Programm selbst umsetzen willst, hast du nie etwas mit der RED Brick API oder den Dingen in diesem Beispiel zu tun.

Beispiel: Du hast auf dem RED Brick einen Master Brick, daran ein Temperature Bricklet 2.0 und willst mit einem Program auf dem RED Brick die Temperaturwerte aufzeichnen. Dann könntest du z.B. das Temperature Bricklet 2.0 Java Callback Bespiel nehmen, die UID auf die deines Temperature Bricklet 2.0 setzen, das Programm kompilieren und über Brick Viewer auf den RED Brick landen und ausführen lassen. Die Standardeinstellungen des Program Wizards sind so, dass die Ausgaben des Programms in einer Logdatei auf dem RED Brick aufgezeichnet werden, die du über Brick Viewer einsehen kannst. Fertig ist ein simpler Temperatur Logger.

https://www.tinkerforge.com/de/doc/Software/Bricklets/TemperatureV2_Bricklet_Java.html#callback

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...