Author Topic: Industrial Digital In 4 Bricklet 2.0 Callback funktioniert nicht  (Read 1233 times)

FlyingDoc

  • Sr. Member
  • ****
  • Posts: 451
    • View Profile
    • Head Up Display für UL Flieger
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.

« Last Edit: January 03, 2019, 10:57:11 by FlyingDoc »
Mein Projekt

Head Up Display für UL Flieger

remotecontrol

  • Hero Member
  • *****
  • Posts: 593
    • View Profile
Re: Industrial Digital In 4 Bricklet 2.0 Callback funktioniert nicht
« Reply #1 on: January 03, 2019, 16:37:33 »
Schon mal den Stecker am Bricklet + Master kontrolliert ob alle PINs OK sind?

Hatte erst gestern ähnliches Problem mit RemoteSwitch:
Bricklet erkannt aber keine Callbacks => der äußere PIN war verbogen.
Zum Glück konnte ich den noch richten.

FlyingDoc

  • Sr. Member
  • ****
  • Posts: 451
    • View Profile
    • Head Up Display für UL Flieger
Re: Industrial Digital In 4 Bricklet 2.0 Callback funktioniert nicht
« Reply #2 on: January 03, 2019, 17:57:44 »
Hab ich gerade getestet. Kein Erfolg. Auch ein andere Anschluß geht nicht.
Und die Pins sind alle OK.
Mein Projekt

Head Up Display für UL Flieger

borg

  • Tinkerforge Staff
  • Administrator
  • Hero Member
  • *****
  • Posts: 3.142
    • View Profile
Re: Industrial Digital In 4 Bricklet 2.0 Callback funktioniert nicht
« Reply #3 on: January 04, 2019, 14:17:13 »
Ich hab Firmware Version 2.0.0 und 2.0.1 getestet mit diesem Code:

Code: [Select]
#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:

Code: [Select]
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?
Wir sind die Borg, Widerstand ist Spannung durch Stromstärke!

FlyingDoc

  • Sr. Member
  • ****
  • Posts: 451
    • View Profile
    • Head Up Display für UL Flieger
Re: Industrial Digital In 4 Bricklet 2.0 Callback funktioniert nicht
« Reply #4 on: January 05, 2019, 00:59:08 »
Habe gerade festgestellt , das wenn ich das Bricklet an einen einzelnen Master stecke, geht alles.
Da muss ich den Stapel mal auseinander nehmen und einzeln testen.
Mein Projekt

Head Up Display für UL Flieger

FlyingDoc

  • Sr. Member
  • ****
  • Posts: 451
    • View Profile
    • Head Up Display für UL Flieger
Re: Industrial Digital In 4 Bricklet 2.0 Callback funktioniert nicht
« Reply #5 on: January 11, 2019, 21:25:15 »
So. Nach dem ich Zeit zum Testen hab, die Italiener haben gerade bei uns das gesamte Netzwerk im Betrieb geändert, habe ich festgestellt, das es an der RED Img Version liegt. Beim 1.8er gehen die Callback nicht.
Mein Projekt

Head Up Display für UL Flieger

borg

  • Tinkerforge Staff
  • Administrator
  • Hero Member
  • *****
  • Posts: 3.142
    • View Profile
Re: Industrial Digital In 4 Bricklet 2.0 Callback funktioniert nicht
« Reply #6 on: January 12, 2019, 14:32:40 »
Die Bricklets mit 7-Pol Stecker werden auf dem RED Brick erst seit Brick Daemon Version 2.3.0 unterstützt. D.h. du müsstest entweder den Brick Daemon auf dem RED Brick aktualisieren oder ein RED Brick Image mit Version 1.9 oder höher verwenden.
Wir sind die Borg, Widerstand ist Spannung durch Stromstärke!

FlyingDoc

  • Sr. Member
  • ****
  • Posts: 451
    • View Profile
    • Head Up Display für UL Flieger
Re: Industrial Digital In 4 Bricklet 2.0 Callback funktioniert nicht
« Reply #7 on: January 14, 2019, 17:22:25 »
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.
Quote
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
Quote
# 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.
Mein Projekt

Head Up Display für UL Flieger

photron

  • Tinkerforge Staff
  • Administrator
  • Hero Member
  • *****
  • Posts: 2.471
    • View Profile
Re: Industrial Digital In 4 Bricklet 2.0 Callback funktioniert nicht
« Reply #8 on: January 15, 2019, 16:03:09 »
FlyingDoc, auf welcher Image Version tritt das brickd Problem auf?

photron

  • Tinkerforge Staff
  • Administrator
  • Hero Member
  • *****
  • Posts: 2.471
    • View Profile
Re: Industrial Digital In 4 Bricklet 2.0 Callback funktioniert nicht
« Reply #9 on: January 15, 2019, 17:53:00 »
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.

FlyingDoc

  • Sr. Member
  • ****
  • Posts: 451
    • View Profile
    • Head Up Display für UL Flieger
Re: Industrial Digital In 4 Bricklet 2.0 Callback funktioniert nicht
« Reply #10 on: January 16, 2019, 14:54:10 »
Ich habe wie du empfohlen hast den 2.3.0 installiert.
Jetzt funktioneren die Callback wieder.

Danke. 8)
Mein Projekt

Head Up Display für UL Flieger