Jump to content


Photo
- - - - -

SystemStatus - Wie nennt man folgende Methode?


Wichtiger Hinweis für Besucher der Community!

Das Erstellungsdatum des von Dir aufgerufenen Themas liegt bereits einige Zeit zurück. Wir möchten darauf hinweisen, den Inhalt der Diskussion auf seine Aktualität hin zu prüfen. Weitere Informationen findest Du auf dieser Seite.

  • Please log in to reply
19 replies to this topic

#1 GoSPvC

GoSPvC

    Floor Broker

  • *_skilled
  • 166 posts
  • 786 thanks
  • Wohnsitz:Garching

Posted 01 September 2010 - 11:10 AM

Ich möchte für eines meiner TS5-Systeme, das ziemlich kompliziert geworden ist einen SystemStatus entwerfen. Dieser Statuswert soll je nach unterschiedlichen Vorkommnissen verschiedene Werte annehmen. Es gibt eine Methode, wie man verschiedene Statuse in einem Wert darstellen kann, z.B.

SystemRunning = 0
SystemStop alles größer 0
Grund1 = 1
Grund2 = 2
Grund3 = 4
Grund4 = 8
Grund5 = 16
Grund6 = 32

... damit man mehrere verschiedene Gründe in diesem einen Wert unterbringt. Ich hoffe ich hab es verständlich erklärt :-)

Aber, wie nennt sich diese Methode? Ich würde gerne nach einer Beschreibung oder Erklärung dieser Methode googeln, weiß aber nicht nach was ich suchen soll...
  • 0
Gruß,
Michi

Thanked by 2 Members:
Henrik , Vola

#2 siscop

siscop

    Floor Broker

  • *_skilled
  • 1,502 posts
  • 7188 thanks
  • Wohnsitz:Egelsbach

Posted 01 September 2010 - 11:18 AM

Sieht nach einem einfachen
Dualsystem->Dezimalsystem
Dezimalsystem->Dualsystem
aus.
Eine einfache Umrechnung.
  • 0

Nicht die Qualität einer Idee zählt, sondern der Status dessen, der sie äußert.
Wolfgang Herles

Es ist dem Untertanen untersagt, den Maßstab seiner beschränkten Einsicht an die Handlungen der Obrigkeit anzulegen
FdG

80% der Ego-Shooter Spieler sind zu Fett um einen Amoklauf durchzuführen


Im Training https://www.swim.com/m-g


Thanked by 2 Members:
Henrik , GoSPvC

#3 Bull68

Bull68

    Floor Broker

  • *_skilled
  • 1,376 posts
  • 8640 thanks

Posted 01 September 2010 - 11:30 AM

Möchtest Du die Stati bitweise speichern?
Hat man früher gemacht um Speicherplatz zu sparen.
Heute hat ja eine Bool Variable um 1 Bit zu speichern gleich 32 oder noch mehr Bit :hrhrhr:.
Macht also nur Sinn, wenn Dir der Speicherplatz ausgeht.
Der Übersichtlichkeit wegen könntest die Werte in Arrays oder Records/Structs (je nach Sprache) ablegen.
  • 0
Wer meint alles sei zu jeder Zeit in den Kursen eingepreist, hat den Laden leider noch nicht verstanden!

Happy Trading - Ralf

Thanked by 3 Members:
Henrik , Vola , GoSPvC

#4 GoSPvC

GoSPvC

    Floor Broker

  • *_skilled
  • 166 posts
  • 786 thanks
  • Wohnsitz:Garching

Posted 01 September 2010 - 11:41 AM

Sieht nach einem einfachen
Dualsystem->Dezimalsystem
Dezimalsystem->Dualsystem
aus.


Danke, ich bemühe Google mal und schau, ob's das ist, was ich meine.


Möchtest Du die Stati bitweise speichern?
Hat man früher gemacht um Speicherplatz zu sparen.
Heute hat ja eine Bool Variable um 1 Bit zu speichern gleich 32 oder noch mehr Bit :hrhrhr:.
Macht also nur Sinn, wenn Dir der Speicherplatz ausgeht.
Der Übersichtlichkeit wegen könntest die Werte in Arrays oder Records/Structs (je nach Sprache) ablegen.


Nein, um Speicherplatz geht's mir weniger. Mir kommt diese Methode logisch und einfach vor: Ein Wert enthält alle Gründe, warum das System auf "Stop" geschalten hat.
Hab mir früher noch nie Gedanken über sowas gemacht. Hast du evtl. nen Link, wo man Infos über dieses Thema bekommt?
Am besten in Anfänger-Form :-)
  • 0
Gruß,
Michi

Thanked by 3 Members:
Henrik , Bull68 , Vola

#5 Bull68

Bull68

    Floor Broker

  • *_skilled
  • 1,376 posts
  • 8640 thanks

Posted 01 September 2010 - 11:59 AM

Michi,

was ist das denn für eine Sprache?
Grundsätzlich werden die Bits mit einer ODER Verknüpfung gesetzt und mit einen UND Verknüpfung gelöscht bzw. auf Null gesetzt.
Abgefragt werden die Bits mit einer UND Verknüpfung, das ist alles.
Du mußt aber wissen ob und wie das in Deiner Sprache geht.
Der Übersichtlichkeit wegen würde ich jedem Zustand (Bit) noch einen Namen geben (Konstante).
Ich schau mal, ob ich ein Beispiele finde.
  • 0
Wer meint alles sei zu jeder Zeit in den Kursen eingepreist, hat den Laden leider noch nicht verstanden!

Happy Trading - Ralf

Thanked by 2 Members:
Henrik , GoSPvC

#6 GoSPvC

GoSPvC

    Floor Broker

  • *_skilled
  • 166 posts
  • 786 thanks
  • Wohnsitz:Garching

Posted 01 September 2010 - 12:34 PM

was ist das denn für eine Sprache?
Grundsätzlich werden die Bits mit einer ODER Verknüpfung gesetzt und mit einen UND Verknüpfung gelöscht bzw. auf Null gesetzt.
Abgefragt werden die Bits mit einer UND Verknüpfung, das ist alles.
Du mußt aber wissen ob und wie das in Deiner Sprache geht.
Der Übersichtlichkeit wegen würde ich jedem Zustand (Bit) noch einen Namen geben (Konstante).
Ich schau mal, ob ich ein Beispiele finde.


Ich glaub, du bist viel zu tief; es geht um Equilla/EasyLanguage von TradeSignal5 bzw. TradeStation. Das ist eher eine KindergartenSprache :-)

Ich geb dir nochmal ein Beispiel, was ich meine:

Der Status ist 0 - Das bedeutet, das System ist auf "Go"

-> Jetzt passieren ein oder mehrere Fehler:

Der Status soll jetzt z.B. 21 sein

-> Das bedeutet 16 + 4 + 1
also ist Grund1 und Grund4 und Grund16 aufgetreten.
  • 0
Gruß,
Michi

Thanked by 1 Member:
Henrik

#7 Quickbeam2k1

Quickbeam2k1

    Floor Broker

  • *_skilled
  • 425 posts
  • 2317 thanks

Posted 01 September 2010 - 12:35 PM

Hmm du hast dann doch sicherlich vor die Werte deiner Gründe zu addieren oder?
Dann kriegst du was weiss ich 57 raus und kannst das halt eindeutig im Dualsystem zerlegen.
Also 32,16,8,1 oder im Dualsystem 111001.
Du benötigst da halt das jede Stelle im Dualsystem nur 2 Werte hat.
  • 0

Thanked by 2 Members:
Henrik , GoSPvC

#8 GoSPvC

GoSPvC

    Floor Broker

  • *_skilled
  • 166 posts
  • 786 thanks
  • Wohnsitz:Garching

Posted 01 September 2010 - 12:38 PM

Hmm du hast dann doch sicherlich vor die Werte deiner Gründe zu addieren oder?
Dann kriegst du was weiss ich 57 raus und kannst das halt eindeutig im Dualsystem zerlegen.
Also 32,16,8,1 oder im Dualsystem 111001.
Du benötigst da halt das jede Stelle im Dualsystem nur 2 Werte hat.


Genau, das meine ich. Gibt's für diese Methode der Fehlercodeangabe einen speziellen Namen, nach dem ich googeln könnte ??
  • 0
Gruß,
Michi

Thanked by 1 Member:
Henrik

#9 Quickbeam2k1

Quickbeam2k1

    Floor Broker

  • *_skilled
  • 425 posts
  • 2317 thanks

Posted 01 September 2010 - 12:50 PM

Genau, das meine ich. Gibt's für diese Methode der Fehlercodeangabe einen speziellen Namen, nach dem ich googeln könnte ??

also mir ist da kein name bekannt, du brauchst übrigens nicht das dualsystem.
du könntest auch folgendermaßen vorgehen
Alles Klar=0
Grund1 =1
Grund2=10
Grund3=100
...

Du musst halt nur sicherstellen dass du eine eindeutigkeit für deine Zuweisungen hast. Am effizientesten ist da natürlich das dualsyste, (hier sieht. man z.B warum ein pc das Dualsystem verwendet, genau so kann man fehler schön ababrbeiten).
Ich bin mir grade nicht sicher ob man die zahlen die Rauskommen nicht durch den euklidischen Algorithmus also durch die ggT Bestimmung von 57 und 2 erhält, wobei man als vielfache nru zahlen aus dem dualsystem zulässt :)
Also 57 = 16*2+25 = 32+25
25=2*8+9= 16+9
9=2*4+1=8+1
1=0*2+1
da wir nicht auflösen müssen wir also das bit an der letzten stelle auf 1 setzen.

Aber ich glaube das wird viel zu kompliziert ^-^
  • 0

Thanked by 2 Members:
GoSPvC , Henrik

#10 Bull68

Bull68

    Floor Broker

  • *_skilled
  • 1,376 posts
  • 8640 thanks

Posted 01 September 2010 - 12:54 PM

Schau mal unter "Bitmanipulation".
Kommt aber alles auf das Gleiche raus, denn Dein Ansatz ist schon richtig (Binäre Werte für jeden Fehler 1, 2, 4, 8 usw).
Wenn ich nämlich z.B. 1 und 2 addiere ist es dasselbe, wenn ich Bit0 und Bit1 setze.
Möchtest Du aber umgekehrt wissen welche Fehler genau aufgetreten sind, geht das m.E. nur mittels Auslesen der einzelnnen Bits.
  • 0
Wer meint alles sei zu jeder Zeit in den Kursen eingepreist, hat den Laden leider noch nicht verstanden!

Happy Trading - Ralf

Thanked by 2 Members:
GoSPvC , Henrik

#11 Bull68

Bull68

    Floor Broker

  • *_skilled
  • 1,376 posts
  • 8640 thanks

Posted 01 September 2010 - 01:01 PM

Alles Klar=0
Grund1 =1
Grund2=10
Grund3=100
...


Angenommen Wert ist jetzt 111 ... wie ermittele ich dann ohne die Bits auszulesen die einzelnen Gründe?
  • 0
Wer meint alles sei zu jeder Zeit in den Kursen eingepreist, hat den Laden leider noch nicht verstanden!

Happy Trading - Ralf

Thanked by 2 Members:
GoSPvC , Henrik

#12 Quickbeam2k1

Quickbeam2k1

    Floor Broker

  • *_skilled
  • 425 posts
  • 2317 thanks

Posted 01 September 2010 - 01:08 PM

Ich hab nie gesagt dass man es nicht auch mit bitauslesen machen kann.
Vermutlich ist das sogar der einzig praktikable weg, da bei 15 gründen double zahlen schon nicht mehr ausreichen.

Zur Frage: du kennst doch deine abbildung! Du musst halt nur eine Struktur für die Bijektion angeben :)
Du teislt 111/100>1 also ist das bit gesetzt, dann ziehste 100 ab teilst den rest durch 10 ist wieder größer eins, also ist das bit gesetzt und so weiter :)
Was man halt nie vergessen sollte: Teilen und Teilen mit Rest kann sehr vieles sehr einfach machen :)
  • 0

Thanked by 3 Members:
GoSPvC , Henrik , Bull68

#13 Henrik

Henrik

    Floor Broker

  • Moderatoren
  • 4,976 posts
  • 21566 thanks
  • Wohnsitz:Bbg, GER

Posted 01 September 2010 - 01:09 PM

Dieses Prinzip wird bei Einstellungen in Autosteuergeräten verwendet.
Man kann so jeder Einstellung eine zahl zuweisen und dann ganze Einstellungsgruppen ablesen anhand einer Zahl. Das geht mit alles Zahlen mit 2, 4, 8, 12, 32, ...

Mittlerweile wird das "Lange System" benutzt.
Schau mal hier: http://de.openobd.org/faq.htm, scrolle dort herunter bis zur Erklärung.

{Lange Codierung} In neueren Fahrzeugen insbesondere im Zusammenhang mit CAN-BUS basierter Diagnose wird die sogenannte lange Codierung verwendet.
Dabei wird eine hexadezimale Bytegruppe ausgegeben die i.d.R. zur Neucodierung in ihre einzelnen Bytes/Bits gesplittet werden muss, wie das folgende Beispiel erklärt.

Im folgenden Beispiel wird die Aktivierung des Tagfahrlichtes in Golf 5 basierten Fahrzeugen erläutert.

Die Codierung des Beispiel Bordnetz Steuergerätes ist 008F8F020004200000120C. Wir splitten nun die gesamte Codierung in die einzelnen Bytes und rechnen diese (z.B. mit dem Windows-Taschenrechner - Ansicht/Wissenschaftlich) in Binärwerte um.

Byte - Hexadezimal Byte - Binär
00 00000000
8F 10001111
8F 10001111
02 00000010
00 00000000
04 00000100
20 00100000
00 00000000
00 00000000
12 00010010
0C 00001100
Das jeweilige Byte wird nun in Bit's aufgeteilt und die Bedeutung des einzelnen Bit's wird den Tabellen von OpenOBD.org entnommen.
In unserem Beispiel wollen wir Byte 00 Bit 3 auswerten (Hinweis: Die Bytes werden von Links nach Rechts gezählt und die Bit's von Rechts nach Links, man beginnt jeweils mit 0). Byte 00 hat demnach den hexadezimal Wert 00, umgewandelt in das binäre System 00000000.

Bit Wert Bedeutung
Bit 0 0 Nebelscheinwerfer verbaut
Bit 1 0 Xenonscheinwerfer verbaut
Bit 2 0 Fußraumbeleuchtung verbaut
Bit 3 0 Tagfahrlicht (Skandinavien)
Bit 4 0 Tagfahrlicht (Nordamerika)
Bit 5 0 Assistenzfahrlicht
Bit 6 0 Regen-/Lichtsensor verbaut
Bit 7 0 Coming-Home verbaut
Anhand der Tabellen steht also Byte 00 Bit 3 für das Tagfahrlicht in der Skandinavien Variante (Hauptscheinfer), d.h. in diesem Fall ist kein Tagfahrlicht aktiviert.

Um nun das Tagfahrlicht zu aktivieren muss Byte 00 Bit 3 gesetzt werden, d.h. der neue Wert ist 1 der neue binäre Wert für Byte 00 ist demnach 00001000 umgerechnet ins Hexadezimal System ist der neue Wert 08.

Nun wird die komplette Lange Codierung wieder ins Steuergerät geschrieben: 088F8F020004200000120C


Da gibt es auch ein Programm namens LCode um das einfach umzurechnen, aber ich finde das bei mir nicht mehr...
  • 0
"Weder die stärkste noch die intelligenteste Spezies überlebt. Sondern jede, die sich am besten dem Wandel anpasst."
Charles Darwin
 
"Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren."
Benjamin Franklin

Thanked by 2 Members:
GoSPvC , Bull68

#14 Bull68

Bull68

    Floor Broker

  • *_skilled
  • 1,376 posts
  • 8640 thanks

Posted 01 September 2010 - 01:23 PM

Da gibt es auch ein Programm namens LCode um das einfach umzurechnen, aber ich finde das bei mir nicht mehr...


Das macht doch nix Henrik, Quickbeam hat sicher Lust ein Beispielprogrämmchen zu schreiben, das das Auslesen der Zustände mittels Teilen und Rest beim CANBus veranschaulicht. :hrhrhr:
  • 0
Wer meint alles sei zu jeder Zeit in den Kursen eingepreist, hat den Laden leider noch nicht verstanden!

Happy Trading - Ralf

Thanked by 2 Members:
GoSPvC , Henrik

#15 Mythos

Mythos

    TEFEx CEO

  • Moderatoren
  • 3,479 posts
  • 16702 thanks

Posted 01 September 2010 - 01:38 PM

Da das ja fast eine mathematische Frage ist, und ich grad die Masterprüfung hinter mir hab, muss ich jetzt auch noch meinen Senf dazugeben:

Hättest du die verschiedenen Gründe nicht kombinieren müssen, dann wär das Prinzip ein enum gewesen (bzw. Enumeration), aber da kannst nix kombinieren (zumindest nicht standardmäßig).

Namen dafür kenn ich auch keinen der wirklich gebräuchlich wäre, liegt vermutlich auch daran das es jeder macht ohne einen Namen dafür zu haben.

Wie du schon bemerkt hast wirds mit vielen verschiedenen Statusen eng. Am effizientesten bist du wenn du im binärsystem arbeitest. Es gänge aber jedes Zahlensystem als Grundlage (also zB das 10er System für 10, 100, 1000 etc). Vorteil am binärsystem: du nutzt den gesamten Zahlenbereich mit deinen Statusen aus, bei jedem anderen hättest du mehrere Zahlen die nie auftreten würden.

Bei 15 wirds im binären mit double aber noch nicht eng, ich würd auch auf keinen Fall double verwenden, da dir sonst irgendwann rundungsfehler ein paar errors killen :hrhrhr:

Mit normalen Integer kannst du für jedes Bit einen Status haben. Also im Regelfall 32 statuse. Notfalls musst halt ein zweites Int dazunehmen. Am einfachsten über vordefinierte Konstante (weiß nicht mehr ob equilla bitoperationen zulässt). Mit Bitoperationen ist das setzen/abfragen der statusbits natürlich am einfachsten. Wenn du die nicht zur Verfügung hast, dann gehts aber auch mit simplen Rechenoperationen:
Abfragen des x-ten status:

gesetzt= ((status/(2^x)) % 2) != 0;
setzen (geht nur wenn nicht schon gesetzt, als ggf. vorher prüfen):
status += 2^x;
bzw inline:
status += ((status/(2^x)) % 2) == 0 ? 2^x : 0;

(Die 2^x am einfachsten durch Konstante ersetzen, wenn du ein anderes System nehmen willst, einfach den 2er durch die entsprechende Zahl ersetzen)

hth
  • 2

Everybody is a genius. But if you judge a fish by its ability to climb a tree, it will live its whole life believing that it is stupid.

Einstein


Es ist nicht deine Schuld, das die Welt ist wie sie ist. Es wär nur deine Schuld wenn sie so bleibt.


Thanked by 4 Members:
Henrik , GoSPvC , whipsaw , Bull68

#16 Roy Awesome

Roy Awesome

    Floor Trader

  • *_skilled
  • 147 posts
  • 941 thanks

Posted 01 September 2010 - 01:38 PM

"bitmask" (engl) bzw. "Bitmaske" (deutsch) ist der entsprechende Ausdruck, Google gibt weitere Infos..
  • 0

Thanked by 4 Members:
Henrik , GoSPvC , Bull68 , Mythos

#17 Mythos

Mythos

    TEFEx CEO

  • Moderatoren
  • 3,479 posts
  • 16702 thanks

Posted 01 September 2010 - 01:42 PM

"bitmask" (engl) bzw. "Bitmaske" (deutsch) ist der entsprechende Ausdruck, Google gibt weitere Infos..

naja, eine Bitmaske verwendet man hier nur für das setzen/auslesen der Bits. Die Methode die Statuse so zu speichern ist dann eher ein Bitfield oder? Aber der Name ist glaub ich nicht so extrem verbreitet, vor allem nicht in Tradingkreisen ;)
  • 0

Everybody is a genius. But if you judge a fish by its ability to climb a tree, it will live its whole life believing that it is stupid.

Einstein


Es ist nicht deine Schuld, das die Welt ist wie sie ist. Es wär nur deine Schuld wenn sie so bleibt.


Thanked by 2 Members:
Henrik , GoSPvC

#18 Roy Awesome

Roy Awesome

    Floor Trader

  • *_skilled
  • 147 posts
  • 941 thanks

Posted 01 September 2010 - 01:47 PM

naja, eine Bitmaske verwendet man hier nur für das setzen/auslesen der Bits. Die Methode die Statuse so zu speichern ist dann eher ein Bitfield oder? Aber der Name ist glaub ich nicht so extrem verbreitet, vor allem nicht in Tradingkreisen ;)


Weiss nicht, ich kenns nur unter diesem Namen, meistens mit 2er Potenzen oder Primzahlen.
  • 0

Thanked by 3 Members:
Henrik , Rumpel , GoSPvC

#19 WOGO

WOGO

    Floor Broker

  • Developer
  • 1,008 posts
  • 6800 thanks

Posted 01 September 2010 - 03:54 PM

Aber, wie nennt sich diese Methode?

Was du hier machst ist eigentlich eine Bit Codierung. Du weist jedem einzelnen Bit einen best. Status zu.
Du kannst das einfach mit folgender Formel codieren:

Code = ... Grund5 x 16 + Grund 4 x 8 + Grund3 x 4 + Grund2 x 2 + Grund1 x 1

GrundX kann hierbei die Werte 0/1 annehmen.
  • 0
„Sicher ist, dass nichts sicher ist. Selbst das nicht.“
(Joachim Ringelnatz)

Thanked by 3 Members:
Henrik , Rumpel , GoSPvC

#20 GoSPvC

GoSPvC

    Floor Broker

  • *_skilled
  • 166 posts
  • 786 thanks
  • Wohnsitz:Garching

Posted 01 September 2010 - 04:56 PM

@all:

Danke an Alle !!! Ihr habt mir sehr weitergeholfen...

Mit euren Infos kann ich einiges anfangen. Ich werd jetzt versuchen, das als zwei Funktionen StatusGet() und StatusSet() umzusetzen und wahrscheinlich noch ein paar Fragen haben. :-)

Bei Interesse stell ich die dann hier rein; ich hoffe, bis über's WE was funktionierendes zu Stande zu bringen.

Danke nochmals...
  • 0
Gruß,
Michi

Thanked by 5 Members:
WOGO , Bull68 , Henrik , Rumpel , Vola

Wichtiger Hinweis für Besucher der Community!

Das Erstellungsdatum des von Dir aufgerufenen Themas liegt bereits einige Zeit zurück. Wir möchten darauf hinweisen, den Inhalt der Diskussion auf seine Aktualität hin zu prüfen. Weitere Informationen findest Du auf dieser Seite.


0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users