Debus Protokoll in C implementieren und auslesen

Status
Für weitere Antworten geschlossen.

Dominik1209

Cadet 1st Year
Registriert
Jan. 2023
Beiträge
12
Hallo,

ich probiere an meinem Raspberry Pi mit Betriebssystem Linux in C durch eine RS485 Schnittstelle meinen Reader auszulesen. Dafür müsste ich ein DeBus Protokoll implementieren und auslesen können.

Wie genau unternehme ich das? Welche Schritte muss ich beachten? Wo kann ich mehr Informationen finden?
 
Meinst du zufällig D-Bus? https://en.wikipedia.org/wiki/D-Bus
DeBus habe ich noch nie gehört.

Dazu gilt: Alles vorkauen wird dir hier keiner. Google, Stackoverflow und co beutzen, ordentliche Infos liefern (welcher Reader?) und bisschen vorarbeiten.

Bei konkreten Problemen helfen hier alle gerne.
 
Habs mal durch ChatGPT gejagt. (kann ich jedem empfehlen, wenns ums Programmieren geht)

Um das DeBus-Protokoll auf einem Raspberry Pi mit Linux in C auszulesen, können Sie die folgenden Schritte unternehmen:

  1. Öffnen Sie eine C-Entwicklungsumgebung auf Ihrem Raspberry Pi, z.B. GCC.
  2. Implementieren Sie die DeBus-Protokoll-Spezifikationen in Ihren Code. Hierbei sollten Sie die Kommunikationsregeln, Datenformate und Übertragungsprotokolle genau beachten.
  3. Öffnen Sie die RS485-Schnittstelle mithilfe der entsprechenden Linux-Bibliotheken und Systemaufrufe.
  4. Senden Sie eine Anfrage an den Reader über die RS485-Schnittstelle gemäß dem DeBus-Protokoll.
  5. Empfangen Sie die Antwort vom Reader und interpretieren Sie die Daten gemäß den DeBus-Protokoll-Spezifikationen.
  6. Verarbeiten und speichern Sie die ausgelesenen Daten gemäß Ihren Anforderungen.
Es ist wichtig zu beachten, dass die Implementierung eines Protokolls komplex sein kann und ein tiefes Verständnis des Protokolls sowie solide Kenntnisse in C und Linux erforderlich sind. Es kann auch hilfreich sein, Beispielcodes oder Bibliotheken zu verwenden, die bereits die DeBus-Protokoll-Spezifikationen implementieren.

Beispiel Code
Code:
#include <stdio.h>
#include <string.h>

#define MAX_PACKET_SIZE 64

// Struktur für DeBus-Paket
typedef struct {
  unsigned char destinationAddress;
  unsigned char sourceAddress;
  unsigned char functionCode;
  unsigned char data[MAX_PACKET_SIZE - 4];
  unsigned char crc;
} DeBusPacket;

// Funktion zum Berechnen der CRC-Prüfsumme
unsigned char calcCRC(DeBusPacket packet) {
  unsigned char crc = 0;
  int i;
  for (i = 0; i < sizeof(packet) - 1; i++) {
    crc += packet.data[i];
  }
  return crc;
}

// Funktion zum Senden eines DeBus-Pakets
void sendDeBusPacket(DeBusPacket packet) {
  packet.crc = calcCRC(packet);
  // Hier sollte das Paket über die RS485-Schnittstelle gesendet werden
}

// Funktion zum Empfangen eines DeBus-Pakets
DeBusPacket receiveDeBusPacket() {
  DeBusPacket packet;
  // Hier sollte das Paket über die RS485-Schnittstelle empfangen werden
  return packet;
}

int main() {
  // Beispielpaket
  DeBusPacket packet;
  packet.destinationAddress = 0x01;
  packet.sourceAddress = 0x02;
  packet.functionCode = 0x03;
  strcpy((char *) packet.data, "Example DeBus packet");

  // Senden des Beispielpakets
  sendDeBusPacket(packet);

  // Empfangen eines DeBus-Pakets
  DeBusPacket receivedPacket = receiveDeBusPacket();
  printf("Received DeBus Packet:\n");
  printf("  Destination Address: 0x%02x\n", receivedPacket.destinationAddress);
  printf("  Source Address: 0x%02x\n", receivedPacket.sourceAddress);
  printf("  Function Code: 0x%02x\n", receivedPacket.functionCode);
  printf("  Data: %s\n", receivedPacket.data);
  printf("  CRC: 0x%02x\n", receivedPacket.crc);

  return 0;
}
 
Ich sehe düstere Tage auf uns zukommen, und finde es gut das ChatGPT auf Stackoverflow nicht erlaubt ist.
Das was Autokiller sagt. Ohne das andere Gerät zu kennen, kann man da nichts zu sagen.
 
  • Gefällt mir
Reaktionen: Pummeluff
Autokiller677 schrieb:
Meinst du zufällig D-Bus? https://en.wikipedia.org/wiki/D-Bus
DeBus habe ich noch nie gehört.

Dazu gilt: Alles vorkauen wird dir hier keiner. Google, Stackoverflow und co beutzen, ordentliche Infos liefern (welcher Reader?) und bisschen vorarbeiten.

Bei konkreten Problemen helfen hier alle gerne.
Danke. Ich meinte ein MOD-Bus. Mein Problem ist ich habe relativ wenig Erfahrung mit C . Hatte es bis jetzt 1 Semester lang. Ich probiere mit einem Reader TSU 200 ,der an ein SIC5-Modul die Daten entschlüsselt und diese Daten werden dann mit einer RS485 Schnittstelle an meinen Schnitt-Stellen-Konverter geleitet der dies dann in eine RJ45 Schnittstelle umwandelt und dies an mein Raspberry Pi angeschlossen ist. Ich probiere diese Daten jetzt auszulesen. Ich probiere dies jetzt ob ich das Protokoll auslesen kann. Leider weiß ich nicht ob das funktionieren wird und ich weiß nicht welche Optionen ich noch benutzen kann.
 
Die Nummer mit dem TSU 200 hatten wir hier doch schonmal von dir, und der Thread wurde wegen mangelnder Mitarbeit geschlossen:

https://www.computerbase.de/forum/threads/linux-c-programmieren.2127278/

Wenn du nicht mal eine vorarbeit lieferst, wird hier genau das gleiche passieren.

Und nein, einfach durch Chat-GPT schieben ist keine Vorarbeit. Mindestens den Code mal ausprobieren hättest du machen müssen, und wenn es nicht geht die entsprechende Fehlermeldung posten.
 
Es reicht, es gibt 4 Themen von dir zu der selben Frage. Aber ohne Eigenleistung wird es nichts. Es scheitert bei dir so hart an der Basis, das wird nichts. Irgendwo ha ich gelesen du bist im Betrieb und sollst das machen mit 1 Semester Programmieren. Dann ist die Aufgabe nichts für dich, lehn sie ab. Ist leider so.
Nach 4 Themen und Null Eigenarbeit ist endgültig Schluss. 🔒
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben