MODBUS - CAN -.für Anfänger (inkl. Programmcode in C)

Gast #6321811
Lesenswert?

Grüße euch herzlich :)

Rs485 und CAN ist in der Industrie sehr stark vertreten. Beide haben das 
Vorteil, dass die Verkabelung und Kommunikationsprotokoll sehr einfach 
sind (sobald man diese einmal versteht).

Wie die jeweiligen Daten-Frames aussehen werde ich hier in kürze 
ergänzen.

Fangen wir mit MODBUS-RTU (RS485) Programm-Code an. Hierfür kann 
Libmodbus (ist eine open source lib.) verwendet werden.
schaue zu Hilfe: https://libmodbus.org/docs/v3.1.6/:
1
#include <modbus.h>
2
#include <stdbool.h>
3
...
4
// Initializing Modbus-RTU Communication
5
// Pfad: /dev/ttyUSB0      Baudrate: 9600     Parity: N (none)
6
// Databit: 8              Stopbit: 1
7

8
modbus_t *ctx;   
9
ctx = modbus_new_rtu("/dev/ttyUSB0", 9600, 'N', 8, 1);
10
if (ctx == NULL) 
11
  printf("Unable to create the libmodbus context\n");
12

13
// Slave Adresse bestimmen. <-(Mit wem soll kommuniziert werden?)Bsp. Slave1
14
modbus_set_slave(ctx, 1);
15

16
if (modbus_connect(ctx) == 0) 
17
  printf("Kommunikationsaufbau war erfolgreich :)\n);
18
else
19
  printf("Bitte überprüfen Sie die Verkabelung und die Initializierung.\n);
20

21
modbus_set_debug(ctx, true);     //Die Frames werden dargestellt.
22

23

24
// Register 0x100-0x110 aus Gerät mit der Slaveaddr 1 lesen und ausgeben
25
uint16_t read_data[128];
26
int i;
27
if (modbus_read_registers(ctx, 0x100, 16, read_data) > 0){
28
printf("Lesen war erfolgreich \n");
29
for (i=0; i < 16; i++) 
30
{ printf("read_data[%d] = %d  in Dezimal und     (0x%X) in Hexa\n", i, read_data[i], read_data[i]);}}
31

32
if (modbus_write_register(ctx, 0x200, 5) > 0)
33
prinf("Das Register 0x200 wurde mit dem Wert 5 überschrieben. \n");
34

35
// Verbindung auflösen
36
modbus_close(ctx);
37
modbus_free(ctx);

Die Lese/Schreibe Befehle sind bei der Modbus-TCP Kommunikation gleich.
Die Initzialisierung muss aber angepasst werden.
1
// Initzialisere TCP-Verbindung mit der Geräte-IP 127.0.1.2 auf Port 1234
2
ctx = modbus_new_tcp("127.0.1.2", 1234);

Erweiterungen werden folgen. Bis dahin kann die Community einige 
wichtige Informationen zu Modbus ergänzen und vielleicht auch mit der 
CAN-Bus anfangen.

Mit freundlichen Grüßen.
#NachbarHilftNachbar
Gast #6321822
Lesenswert?

ACE schrieb:
> Erweiterungen werden folgen

Hoffentlich, aber wie wäre es, dazu einen Artikel im Wiki anzulegen, in 
dem nicht nur der Code auf PC Seite, sondern passend zum Forum auch der 
Code des Client auf Microcontrollerseite gezeigt wird.
Modbus ist schön, aber wenn man der Doku folgt implementiert man viel zu 
viel, reale Geräte funktionieren auch mit einem Subset, bloss steht in 
der Doku nicht, was mindestens nötig ist, damit es z.B. unter NI LabView 
funktioniert.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren