Jump to content

Recommended Posts

Posted

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

Posted

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.

Posted

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?

Posted

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.

Posted

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.

Posted

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.

 

Posted

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.

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.

×
×
  • Create New...