Jump to content
View in the app

A better way to browse. Learn more.

Tinkerunity

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Geschrieben

Hallo zusammen,

 

In welcher Reihenfolge melden sich die Bricks und Bricklets über dem EnumerateCallback wenn ein ipcon.Enumerater() ausgelöst wird?

 

 

Geschrieben

Die Reihenfolge ist nicht fest. Bei einem Stapel hängt das davon ab welchen Brick der Master des Stapels als letztes angesprochen hat, da dieser die Teilnehmer immer "Round-Robin" abfragt.

Geschrieben
  • Autor

Das heist Ich kann während der enumerate Phase nicht überprüfen kann ob des Bricklen am bsp. Obersten Master angeschlossen ist?

 

Ich möchte gerne überprüfen ob der stapel so zusammengebaut wurde wie es vorgesehen ist. Das geht dann nur nach der enumerate Phase. Mir würde es allerding schon reichen wenn wenigstens die Master sich als erstes melden würden...

Geschrieben

Doch. Das kann man sehrwohl.

 

Ich baue meine Programme so auf.

 

Der Callback gibt ja die Position (char position) zurück und wenn es ein Bricklet ist an welchem Master (char *connected_uid) es verbunden ist.

 

void cb_enumerate(const char *uid, const char *connected_uid, char position, uint8_t hardware_version[3], uint8_t firmware_version[3], uint16_t device_identifier, uint8_t enumeration_type, void *user_data)

 

Ich sammle alles in einer Tabelle und sortiere dann zum Schluß.

Die RS232 oder RS485 bekommen bei mir der Reihenfolge nach einen Namen verpasst.

COM1 , COM2 .......

So spreche ich sie dann auch an.

Genau so verfahre ich mit allen Bricklet.

Aus den Eingängen wird dann DI0 DI1 DI........ Ausgängen DO0 DO1 DO......

 

Mir ist egal an welchem Master diese hängen. Wichtig ist nur die Reihenfolge.

Also z.B. Der erste DI der gefunden wird ist DI0. Egal an welchem Master im Stack.

Wobei ich beim ersten Master anfange zu sortieren.

Wo die Master im Stack hängen bekommt man beim Callback mitgeteilt.

 

Der Callback empfängt sieben Parameter:

 

    uid: Die UID des Bricks/Bricklets.

    connected_uid: Die UID des Bricks mit dem das Brick/Bricklet verbunden ist. Für ein Bricklet ist dies die UID des Bricks mit dem es verbunden ist. Für einen Brick ist es die UID des untersten Master Bricks in einem Stapel. Der unterste Master Brick hat die Connected-UID "0". Mit diesen Informationen sollte es möglich sein die komplette Netzwerktopologie zu rekonstruieren.

    position: Für Bricks: '0' - '8' (Position in Stapel). Für Bricklets: 'a' - 'd' (Position an Brick).

    hardware_version: Major, Minor und Release Nummer der Hardwareversion.

    firmware_version: Major, Minor und Release Nummer der Firmwareversion.

    device_identifier: Eine Zahl, welche den Brick/Bricklet repräsentiert.

    enumeration_type: Art der Enumerierung

Geschrieben
  • Autor

Vielleicht stehe ich noch etwas auf dem Schlauch.

 

Ich habe 3 Master

Master[0] soll bei mir auf alles Ports IndustrialOut haben

Master[1] & [2] bekommen IndustrialIN

 

Ich möchte überprüfen das Master[0] auch wirklich die IndustrialOut's hat. Ich habe mir mitlerweile dafür eine Sperate funktion gebaut in der ich die Master UID mit der IndustrialOut.connectedUID vergleiche.

 

Allerding funktioniert die Funktion nicht solllage wie alle Enumerate Callbacks ausgelöst nicht wurden.

 

Dann anders Problem ich wollte die durchführung der Funktion per Thread.Sleep() verzögern. Dann werden aber leider die Callbacks nicht mehr angenommen.

 

Geschrieben

Dann anders Problem ich wollte die durchführung der Funktion per Thread.Sleep() verzögern. Dann werden aber leider die Callbacks nicht mehr angenommen.

Wo machst du das Thread.Sleep denn? Im Main Thread sollte das kein Problem Sein. Wenn du dein Sleep in einem Callback aufrufst werden in der Zeit in der Tat keine weiteren Callbacks mehr aufgerufen. Es gibt nur einen Thread für Callbacks in den Bindings.

Geschrieben
Allerding funktioniert die Funktion nicht solllage wie alle Enumerate Callbacks ausgelöst nicht wurden.

 

Das habe ich ganz einfach gelöst.

Ich habe einen Timer der bei einem EnumerateCallback gestartet wird.

Dieser läuft als Singel Shot. Jedesmal wenn ein EnumerateCallback kommt, wird er wieder angeschubst. Das Timout ist so groß gewählt, das der Timer sein Callback erst auslösen kann wenn kein EnumerateCallback  mehr eintrifft. Dann wird die Sortierfunktion ausgelöst.

Mit der Zeit musst du dann experimentieren. All zu groß muss sie aber nicht sein. Alles im Bereich von msec. ;)

Geschrieben
  • Autor

Wo machst du das Thread.Sleep denn?

 

Ich mache das nach dem Verbindungsaufbau durch ipcon.Connect();

 

 

 

Das habe ich ganz einfach gelöst.

Ich habe einen Timer der bei einem EnumerateCallback gestartet wird.

Dieser läuft als Singel Shot. Jedesmal wenn ein EnumerateCallback kommt, wird er wieder angeschubst. Das Timout ist so groß gewählt, das der Timer sein Callback erst auslösen kann wenn kein EnumerateCallback  mehr eintrifft. Dann wird die Sortierfunktion ausgelöst.

Mit der Zeit musst du dann experimentieren. All zu groß muss sie aber nicht sein. Alles im Bereich von msec. ;)

 

Das klingt nach eine Lösung mit der ich leben mag danke für eure Hilfe.

 

Join the conversation

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

Gast
Reply to this topic...

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.