Hi,
ich versuche gerade vom Wiregate aus per Modbus auf meine KWL zu kommen.
Dafür hab ich mir folgende Dinge aus dem Repository geladen:
- libmodbus5
- libmodbus-dev
- gcc
Jetzt steh ich vor der Aufgabe meine "leicht eingerosteten" C-Kenntnisse wieder zu aktivieren.
Für den Anfang würd ichs einfach gern mal schaffen, dass ich ein fix codiertes Register meiner KWL auslese und das Ergebnis am Bildschirm ausgeb.
Nun findet aber offenbar der gcc die Funktion zum Initialisieren der Modbus-Struktur nicht. Evtl. hat da ja jemand Rat für mich?
Mein Code sieht dzt. folgendermaßen aus:
Wenn ich unter /usr/include/modbus nachsehe, gibts dort die Includes:
- modbus.h
- modbus-rtu.h
- modbus-tcp.h
- modbus-version.h
Wobei modbus-rtu.h und modbus-tcp.h die modbus.h includen und modbus.h die modbus-version.h
Ein #include <modbus/modbus-rtu.h> sollte also eigentlich reichen, um die Initialisierung aufzurufen, oder?
Dann hier noch die Fehlermeldung:
Evtl. hat ja jemand mit mehr C-Erfahrung ne Idee was ich da falsch mach. Google, Hilfe & Co bringen mich da im Moment nicht weiter.
ich versuche gerade vom Wiregate aus per Modbus auf meine KWL zu kommen.
Dafür hab ich mir folgende Dinge aus dem Repository geladen:
- libmodbus5
- libmodbus-dev
- gcc
Jetzt steh ich vor der Aufgabe meine "leicht eingerosteten" C-Kenntnisse wieder zu aktivieren.
Für den Anfang würd ichs einfach gern mal schaffen, dass ich ein fix codiertes Register meiner KWL auslese und das Ergebnis am Bildschirm ausgeb.
Nun findet aber offenbar der gcc die Funktion zum Initialisieren der Modbus-Struktur nicht. Evtl. hat da ja jemand Rat für mich?
Mein Code sieht dzt. folgendermaßen aus:
Code:
#include <stdio.h> #include <modbus/modbus-rtu.h> #define co_device "/dev/usbserial"; int main() { modbus_t *ctx; char *device; device = co_device; ctx = modbus_new_rtu(device, 19200, 'N', 8, 1); /* if (ctx == NULL) { fprintf(stderr, "Unable to create the libmodbus context\n"); return -1; } modbux_close(ctx); modbus_free(ctx); */ }
- modbus.h
- modbus-rtu.h
- modbus-tcp.h
- modbus-version.h
Wobei modbus-rtu.h und modbus-tcp.h die modbus.h includen und modbus.h die modbus-version.h
Ein #include <modbus/modbus-rtu.h> sollte also eigentlich reichen, um die Initialisierung aufzurufen, oder?
Dann hier noch die Fehlermeldung:
Code:
user@wiregate496:~$ gcc test_modbus.c -o test_modbus /tmp/ccw1JdAU.o: In function `main': test_modbus.c:(.text+0x3f): undefined reference to `modbus_new_rtu' collect2: ld returned 1 exit status
Kommentar