Autor Thema: Status codieren  (Gelesen 9512 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline McNugget2000

  • Jr. Member
  • **
  • Beiträge: 74
    • Profil anzeigen
Status codieren
« am: 15. Oktober 2009, 17:38:33 »
Hallo allerseits.

Ich habe mal wieder ein paar spannende Fragen.

Ich möchte vier mögliche Meldungen aus einem Baustein per Modbus übergeben.
Es wird Wortweise übergeben und ich habe um die 20 Instanzen, in denen diese Meldungen auftreten können.

Da ja zwei Bits reichen würden, um die vier Meldungen zu codieren, wäre es ja eine Verschwendung, pro Kanal ein ganzes Wort zu verwenden.

Wenn ich die zwei Statusbits aneinander reihen würde, könnte ich in einem Wort 8 Kanäle übergeben.

Aber wie würde ich sie dann auf der Empfängerseite wieder auseinanderbekommen?

Wenn ich Kanal 1 auf Bits 0 und 1 lege, bekomme ich die möglichen Werte 0,1,2,3.
Kanal auf Bits 2 und 3 ergäbe dann 0, 4, 8, 16.
Wenn Meldungen aus diesen beiden Kanälen gleichzeitig kämen, würden sich die Zahlen zu irgendwas dazwischen addieren.
Ich kann doch nicht für jeden Bitzustand im Wort eine Definition hinterlegen... ???

Wie wird so ein Problem in der Praxis gelöst?


Die in der OSCAT.LIB implementierten ESR-Funktionen sind doch auch ein Lösungsansatz für diese Problem, oder?

Gruss

McNugget

Offline hugo

  • Global Moderator
  • *****
  • Beiträge: 2 152
    • Profil anzeigen
Re:Status codieren
« Antwort #1 am: 15. Oktober 2009, 20:31:03 »
warum baust du dir nicht mit byte_of_bits ein byte zusammen das du als dword sendest
und auf der anderen seite wieder mit bit_of_dword die einzelnen bits extrahierst.

Offline McNugget2000

  • Jr. Member
  • **
  • Beiträge: 74
    • Profil anzeigen
Re:Status codieren
« Antwort #2 am: 15. Oktober 2009, 20:45:47 »
Hallo Hugo.

Das hatte ich schon in Betracht gezogen.

Ich wollte aber wissen, ob es auch einen Weg gibt, der noch einfacher ist, damit ich auf der Gegenseite möglicht wenig programmieren muss.

Wie baue ich aus mehreren Bytes Word und DWOR zusammen?


Gruss

McNugget

P.S.: Wann kommt Oscat 3.11? Bin sehr gespannt...

Offline hugo

  • Global Moderator
  • *****
  • Beiträge: 2 152
    • Profil anzeigen
Re:Status codieren
« Antwort #3 am: 15. Oktober 2009, 20:56:57 »
dword_of_byte macht ein dword aus 4 bytes, da du aber nur 8 bits benötigst schrebst du einfach das byte in dein dword, das landet automatisch im untersten byte (0) die dword_of_byte benötigst du nur wenn du alle 4 bytes im dword für information nutzen willst, also 32 bits für 32 statusse benötigst