Jump to content

Industrial Digital In 4 Bricklet 2.0 Callback funktioniert nicht


Recommended Posts

Hallo TF Team.

Erst einmal ein gesundes und erfolgreiches Jahr 2019!

 

Ich habe folgendes Problem.

Ich hab die IDI4 V2 in mein Programm eingebunden und bekomme den Callback nicht zum laufen.

Ich benutze die aktuellen Bindings. DIe Firmware ist auch aktuell.

Fehler werden nicht produziert.

Der Callback wird aber nicht ausgelöst.

 

Ich habe dann den IDI im BrickViewer V2.3.16 angeschaut.

Dort werden die Eingänge ebenfalls nicht angezeigt!

Egal welchen Zustand sie haben. Die Eingangs LED der DI zeigen aber den jeweiligen Zustand korrekt an.

Was mache ich falsch?

 

Das Programm ist in C++ geschrieben.

 

Stapel.jpg.837a6047169b7b7634e8ff06f1e127fa.jpg

Link zu diesem Kommentar
Share on other sites

Ich hab Firmware Version 2.0.0 und 2.0.1 getestet mit diesem Code:

 

#include <stdio.h>

#include "ip_connection.h"
#include "bricklet_industrial_digital_in_4_v2.h"

#define HOST "localhost"
#define PORT 4223
#define UID "FrC" // Change XYZ to the UID of your Industrial Digital In 4 Bricklet 2.0

// Callback function for value callback
void cb_value(uint8_t channel, bool changed, bool value, void *user_data) {
(void)user_data; // avoid unused parameter warning

printf("Channel: %u\n", channel);
printf("Changed: %s\n", changed ? "true" : "false");
printf("Value: %s\n", value ? "true" : "false");
printf("\n");
}

int main(void) {
// Create IP connection
IPConnection ipcon;
ipcon_create(&ipcon);

// Create device object
IndustrialDigitalIn4V2 idi4;
industrial_digital_in_4_v2_create(&idi4, UID, &ipcon);

// Connect to brickd
if(ipcon_connect(&ipcon, HOST, PORT) < 0) {
	fprintf(stderr, "Could not connect\n");
	return 1;
}
// Don't use device before ipcon is connected

// Register value callback to function cb_value
industrial_digital_in_4_v2_register_callback(&idi4,
                                             INDUSTRIAL_DIGITAL_IN_4_V2_CALLBACK_VALUE,
                                             (void *)cb_value,
                                             NULL);

// Set period for value (channel 1) callback to 0.1s (100ms)
industrial_digital_in_4_v2_set_value_callback_configuration(&idi4, 1, 100, true);

printf("Press key to exit\n");
getchar();
industrial_digital_in_4_v2_destroy(&idi4);
ipcon_destroy(&ipcon); // Calls ipcon_disconnect internally
return 0;
}

 

 

Ausgabe:

 

olaf@pc2:~/build20/c$ g++ -pthread example_callback.c bricklet_industrial_digital_in_4_v2.c ip_connection.c -o test
In file included from /usr/include/errno.h:25:0,
                 from ip_connection.c:19:
/usr/include/features.h:184:3: warning: #warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE" [-Wcpp]
# warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
   ^~~~~~~
olaf@pc2:~/build20/c$ ./test 
Press key to exit
Channel: 1
Changed: true
Value: true

Channel: 1
Changed: true
Value: false

Channel: 1
Changed: true
Value: true

Channel: 1
Changed: true
Value: false

 

Mal abgesehen davon das wir in den Bindings irgendwo ein veraltetes define verwenden funktioniert das bei mir ohne Probleme. Im Brick Viewer wird es auch korrekt angezeigt.

 

Was genau konfigurierst du?

Link zu diesem Kommentar
Share on other sites

Ich arbeite gerade an beiden Varianten.

Mit neuem Image (da muß ich aber noch viel anpassen) und mit dem Versuch den Daemon zu aktualisieren.

 

Dabei kommt folgender Fehler.

2019-01-14 17:33:21.309458 <I> <main_linux.c:291> Brick Daemon 2.3.2+redbrick started (pid: 2023, daemonized: 0)

brickd: symbol lookup error: brickd: undefined symbol: libusb_free_pollfds

 

Ich habe den Daemon nach eurer Anleitung mit

# On RED Brick

wget http://download.tinkerforge.com/tools/brickd/linux/brickd_linux_latest+redbrick_armhf.deb

sudo dpkg -i brickd_linux_latest+redbrick_armhf.deb

 

aktualisisert. Der Daemon startet aber wie schon beschrieben nicht.

 

Link zu diesem Kommentar
Share on other sites

Okay, hab das Problem verstanden.

 

Brick Daemon hat nach Version 2.3.0 unter Linux eine unbeabsichtigte Abhängigkeit auf libusb 1.0.20. Das RED Brick Image 1.9 bringt aber nur libusb 1.0.19 mit.

 

Bedingt durch andere Probleme reicht es jetzt nicht aus libusb auf 1.0.20 zu aktualisieren. Es gibt zwei Optionen das jetzt auf die Schnelle zu umgehen:

 

a) Du installierst nicht brickd 2.3.2, sondern 2.3.0. Das ist aktuell die neuste vorkompilierte brickd Version, die auf RED Brick Image 1.9 lauffähig ist.

 

b) Du kompilierst dir brickd aus dem aktuellen Quellcode, dann funktioniert auch brickd 2.3.2 auf RED Brick Image 1.9.

 

Diese Probleme werden in der nächsten brickd version behoben sein.

Link zu diesem Kommentar
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.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...