Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public enum Category
- {
- [Description("Allgemein")]
- General,
- [Description("Sensor auslesen")]
- GetSensor,
- [Description("Variable auslesen")]
- GetVariable,
- [Description("Konstante auslesen")]
- GetConstant,
- [Description("Variable setzen")]
- SetVariable,
- [Description("Konstante setzen")]
- SetConstant,
- Response,
- [Description("Befehl")]
- Command
- }
- private void category_cb_SelectedIndexChanged(object sender, EventArgs e)
- {
- var selected = type_cb.SelectedItem; // Ausgewählten Wert merken
- Category cat = (Category)category_cb.SelectedValue; // Ausgewählte Kategorie
- // Meine Erweiterungsmethode. Hier steht "Liefere mir bitte anhand des enums 'COMM_Command' eine Liste mit Tupeln {enumwert, Displayname}, bei denen die Kategorie gleich cat ist"
- List<KeyValuePair<Enum, string>> list = typeof(COMM_Command).ToList<CommandInfoAttribute>(x => x.Category == cat, x => x.DisplayName);
- // Die Liste dann natürlich gleich in die zweite Combobox schieben
- type_cb.DataSource = list;
- // Und falls vorher ein bestimmter Wert ausgewählt war, diesen nach Möglichkeit wieder auswählen.
- if (selected != null)
- {
- string text = ((KeyValuePair<Enum, string>)selected).Value;
- var item = list.FirstOrDefault(x => x.Value == text);
- if (item.Value != null)
- type_cb.SelectedValue = item.Key;
- }
- }
- private void type_cb_SelectedIndexChanged(object sender, EventArgs e)
- {
- // Einheiten herausfinden
- string name = type_cb.Text;
- List<KeyValuePair<Enum, string>> list = typeof(COMM_Command).ToList<CommandInfoAttribute>(x => x.DisplayName == name, x => x.Unit);
- unit_lbl.Visible = list.Count == 1;
- unit_cb.Visible = list.Count != 1;
- // Falls ein Wert geschickt werden soll, bitte die Einheit neben dem Editfeld anzeigen
- // Bei einer Einheit Label benutzen, sonst Combobox
- unit_lbl.Text = list[0].Value;
- if (list.Count > 1)
- {
- unit_cb.DisplayMember = "Value";
- unit_cb.ValueMember = "Key";
- unit_cb.DataSource = list;
- }
- // Mit getEnumValue() bekomme ich den enumwert, der durch die aktuelle Auswahl genriert wird.
- CommandInfoAttribute attrib = getEnumValue().GetInfo();
- unit_lbl.Visible = list.Count == 1 && attrib.NeedsPrimaryValue();
- unit_cb.Visible = list.Count != 1 && attrib.NeedsPrimaryValue();
- // Sekundärwert Beschreibung zuweisen und ggf. sichtbar machen
- value2_lbl.Text = attrib.SecondaryName + ":";
- value2_lbl.Visible = attrib.NeedsSecondaryValue();
- value2_txt.Visible = attrib.NeedsSecondaryValue();
- // Bei Auslesen-Befehlen die Werteeingabe verstecken
- value_lbl.Text = attrib.PrimaryName + ":";
- value_lbl.Visible = attrib.NeedsPrimaryValue();
- value_txt.Visible = attrib.NeedsPrimaryValue();
- value_txt.Clear();
- }
- // Welcher Befehl entspricht den aktuellen GUI Einstellungen?
- private COMM_Command getEnumValue()
- {
- var unit = unit_lbl.Visible ? unit_lbl.Text : unit_cb.Text; // Einheit bestimmen
- var enumvalue = typeof(COMM_Command).ToList<CommandInfoAttribute>(x =>
- x.Category == (Category)category_cb.SelectedValue
- && x.DisplayName == type_cb.Text
- && (!x.NeedsPrimaryValue() || x.Unit == unit), x => "").First();
- return (COMM_Command)enumvalue.Key;
- }
- /// <summary>
- /// Bei der Vergabe der Attribute ist folgendes zu beachten:
- /// Jede Kombination aus Kategorie, Anzeigename und Einheit darf maximal einmal vorkommen.
- /// Der Anzeigename wird zur Gruppierung benutzt. Werden zu einem Anzeigenamen verschiedene
- /// Einheiten zugeordnet, kann die Einheit entsprechend variiert werden. Tritt daher ein Anzeigename mehrfach auf,
- /// ist darauf zu achten dass beide Male die gleiche Einheit spezifiziert wird.
- /// Felder ohne ein Attribut tauchen in der Eingabemaske nicht auf.
- /// Die Attribute für "Konstante lesen", "Konstante setzen" und "Antwort"
- /// sollten sich also - bis auf die Kategorie - nicht unterscheiden.
- /// </summary>
- public enum COMM_Command : byte
- {
- #region Paste Bereich
- [CommandInfo(Category.General, "Ping ausführen", PrimaryName = "")]
- PING = 0,
- [CommandInfo(Category.Response, "ACK", PrimaryName = "")]
- ACK = 1,
- [CommandInfo(Category.Response, "NOT!", PrimaryName = "")]
- NACK = 2,
- [CommandInfo(Category.GetVariable, "Status", Conversion = CommType.Status)]
- REQ_STATE = 6,
- [CommandInfo(Category.GetVariable, "Zyklen")]
- REQ_CYCLES = 7,
- [CommandInfo(Category.GetVariable, "Motor (Promille)", Unit = "‰")]
- REQ_MOTOR_PROMILLE = 8,
- [CommandInfo(Category.GetVariable, "Bremse (Promille)", Unit = "‰")]
- REQ_BRAKE_PROMILLE = 9,
- [CommandInfo(Category.GetVariable, "Bremse (binär)", Unit = "bool")]
- REQ_BRAKE_STATE = 10,
- [CommandInfo(Category.GetSensor, "Encoder (Gegenrad)", Unit = "U/min")]
- REQ_ENCODER_GEGENRAD = 11,
- [CommandInfo(Category.GetSensor, "Encoder (Motorwelle)", Unit = "U/min")]
- REQ_ENCODER_MOTORWELLE = 12,
- [CommandInfo(Category.GetSensor, "Alle Sensoren")]
- REQ_CLIMBER_DATA = 13,
- [CommandInfo(Category.GetSensor, "Gefahrene Strecke", Unit = "m", Conversion = CommType.thousands)]
- REQ_DRIVEN_DISTANCE = 14,
- [CommandInfo(Category.GetSensor, "Bandsensor (RAW)")]
- REQ_ROPE_SENSOR_VAL = 15,
- [CommandInfo(Category.GetSensor, "Bandsensor (binär)", Unit = "bool")]
- REQ_ROPE_SENSOR_STATE = 16,
- [CommandInfo(Category.GetSensor, "Temperatur", SecondaryName = "Sensor", Unit = "°C")]
- REQ_TEMPERATURE = 17,
- [CommandInfo(Category.GetSensor, "Laser(binär)", Unit = "bool")]
- REQ_LASER_VAL = 18,
- [CommandInfo(Category.GetSensor, "Laser(RAW)")]
- REQ_LASER_STATE = 19,
- [CommandInfo(Category.GetVariable, "Portdaten")]
- REQ_PORT = 20,
- [CommandInfo(Category.GetConstant, "Sollgeschwindigkeit (Aufstieg)", Unit = "m/s", Conversion = CommType.fixedpt)]
- REQ_REGLER_SPEED_ASCENT = 30,
- [CommandInfo(Category.GetConstant, "Sollgeschwindigkeit (Abstieg)", Unit = "m/s", Conversion = CommType.fixedpt)]
- REQ_REGLER_SPEED_DESCENT = 31,
- [CommandInfo(Category.GetConstant, "Pause (vor Aufstieg)", Unit = "ms")]
- REQ_DELAY_ASCENT = 32,
- [CommandInfo(Category.GetConstant, "Pause (vor Abstieg)", Unit = "ms")]
- REQ_DELAY_DESCENT = 33,
- [CommandInfo(Category.GetConstant, "Annäherungsgeschw. (oben)", Unit = "m/s", Conversion = CommType.fixedpt)]
- REQ_APPROACH_TOP_SPEED = 34,
- [CommandInfo(Category.GetConstant, "Annäherungsdistanz (oben)", Unit = "m", Conversion = CommType.thousands)]
- REQ_APPROACH_TOP_DIST = 35,
- [CommandInfo(Category.GetConstant, "Annäherungsgeschw. (unten)", Unit = "m/s", Conversion = CommType.fixedpt)]
- REQ_APPROACH_BOTTOM_SPEED = 36,
- [CommandInfo(Category.GetConstant, "Annäherungsdistanz (unten)", Unit = "m", Conversion = CommType.thousands)]
- REQ_APPROACH_BOTTOM_DIST = 37,
- [CommandInfo(Category.GetConstant, "Maximale Höhe", Unit = "m", Conversion = CommType.thousands)]
- REQ_MAX_HEIGHT = 38,
- [CommandInfo(Category.GetConstant, "Maximale Distanz", Unit = "m", Conversion = CommType.thousands)]
- REQ_MAX_DISTANCE = 39,
- [CommandInfo(Category.GetConstant, "Temperatur Offset", SecondaryName = "Sensor", Unit = "°C")]
- REQ_TEMPERATURE_OFFSET = 40,
- [CommandInfo(Category.GetConstant, "Temperatur Faktor", SecondaryName = "Sensor")]
- REQ_TEMPERATURE_SCALE = 41,
- [CommandInfo(Category.GetConstant, "Temperatur Threshold", SecondaryName = "Sensor", Unit = "°C")]
- REQ_TEMPERATURE_THRESHOLD = 42,
- [CommandInfo(Category.GetConstant, "Bandsensor Threshold")]
- REQ_ROPE_SENSOR_THRESHOLD = 43,
- [CommandInfo(Category.GetVariable, "PWM Sequenz Daten", SecondaryName = "Index Ende", Unit = "U/min")]
- REQ_PWM_SEQ_DATA = 45,
- [CommandInfo(Category.Response, "Status", Conversion = CommType.Status)]
- RES_STATE = 70,
- [CommandInfo(Category.Response, "Zyklen")]
- RES_CYCLES = 71,
- [CommandInfo(Category.Response, "Motor (Promille)", Unit = "‰")]
- RES_MOTOR_PROMILLE = 72,
- [CommandInfo(Category.Response, "Bremse (Promille)", PrimaryName = "", Unit = "‰")]
- RES_BRAKE_PROMILLE = 73,
- [CommandInfo(Category.Response, "Bremse (binär)", PrimaryName = "", Unit = "bool")]
- RES_BRAKE_STATE = 74,
- [CommandInfo(Category.Response, "Encoder (Gegenrad)", Unit = "U/min")]
- RES_ENCODER_GEGENRAD = 75,
- [CommandInfo(Category.Response, "Encoder (Motorwelle)", Unit = "U/min")]
- RES_ENCODER_MOTORWELLE = 76,
- [CommandInfo(Category.Response, "Alle Sensoren")]
- RES_CLIMBER_DATA = 77,
- [CommandInfo(Category.Response, "Gefahrene Strecke", Unit = "m", Conversion = CommType.thousands)]
- RES_DRIVEN_DISTANCE = 78,
- [CommandInfo(Category.Response, "Bandsensor (RAW)")]
- RES_ROPE_SENSOR_VAL = 79,
- [CommandInfo(Category.Response, "Bandsensor (binär)")]
- RES_ROPE_SENSOR_STATE = 80,
- [CommandInfo(Category.Response, "Temperatur", SecondaryName = "Sensor", Unit = "°C")]
- RES_TEMPERATURE = 81,
- [CommandInfo(Category.Response, "Laser(binär)", PrimaryName = "")]
- RES_LASER_VAL = 82,
- [CommandInfo(Category.Response, "Laser(RAW)", PrimaryName = "")]
- RES_LASER_STATE = 83,
- [CommandInfo(Category.Response, "Portdaten", PrimaryName = "")]
- RES_PORT = 84,
- [CommandInfo(Category.Response, "Sollgeschwindigkeit (Aufstieg)", Unit = "m/s", Conversion = CommType.fixedpt)]
- RES_REGLER_SPEED_ASCENT = 94,
- [CommandInfo(Category.Response, "Sollgeschwindigkeit (Abstieg)", Unit = "m/s", Conversion = CommType.fixedpt)]
- RES_REGLER_SPEED_DESCENT = 95,
- [CommandInfo(Category.Response, "Pause (vor Aufstieg)", Unit = "ms")]
- RES_DELAY_ASCENT = 96,
- [CommandInfo(Category.Response, "Pause (vor Abstieg)", Unit = "ms")]
- RES_DELAY_DESCENT = 97,
- [CommandInfo(Category.Response, "Annäherungsgeschw. (oben)", Unit = "m/s", Conversion = CommType.fixedpt)]
- RES_APPROACH_TOP_SPEED = 98,
- [CommandInfo(Category.Response, "Annäherungsdistanz (oben)", Unit = "m", Conversion = CommType.thousands)]
- RES_APPROACH_TOP_DIST = 99,
- [CommandInfo(Category.Response, "Annäherungsgeschw. (unten)", Unit = "m/s", Conversion = CommType.fixedpt)]
- RES_APPROACH_BOTTOM_SPEED = 100,
- [CommandInfo(Category.Response, "Annäherungsdistanz (unten)", Unit = "m", Conversion = CommType.thousands)]
- RES_APPROACH_BOTTOM_DIST = 101,
- [CommandInfo(Category.Response, "Maximale Höhe", Unit = "m", Conversion = CommType.thousands)]
- RES_MAX_HEIGHT = 102,
- [CommandInfo(Category.Response, "Maximale Distanz", Unit = "m", Conversion = CommType.thousands)]
- RES_MAX_DISTANCE = 103,
- [CommandInfo(Category.Response, "Temperatur Offset", SecondaryName = "Sensor", Unit = "°C")]
- RES_TEMPERATURE_OFFSET = 104,
- [CommandInfo(Category.Response, "Temperatur Faktor", SecondaryName = "Sensor")]
- RES_TEMPERATURE_SCALE = 105,
- [CommandInfo(Category.Response, "Temperatur Threshold", SecondaryName = "Sensor", Unit = "°C")]
- RES_TEMPERATURE_THRESHOLD = 106,
- [CommandInfo(Category.Response, "Bandsensor Threshold")]
- RES_ROPE_SENSOR_THRESHOLD = 107,
- [CommandInfo(Category.Response, "Reglerstatus", PrimaryName = "")]
- RES_REGLER_STATE_BROADCAST = 108,
- [CommandInfo(Category.Response, "PWM Sequenz Daten")]
- RES_PWM_SEQ_DATA = 109,
- [CommandInfo(Category.SetVariable, "Zyklen")]
- SET_CYCLES = 134,
- [CommandInfo(Category.SetVariable, "Status", Conversion = CommType.Status)]
- SET_STATE = 135,
- [CommandInfo(Category.SetVariable, "Motor (Promille)", Unit = "‰")]
- SET_MOTOR_PROMILLE = 136,
- [CommandInfo(Category.SetVariable, "Bremse (Promille)", Unit = "‰")]
- SET_BRAKE_PROMILLE = 137,
- [CommandInfo(Category.SetVariable, "Bremse (binär)", Unit = "bool")]
- SET_BRAKE_STATE = 138,
- [CommandInfo(Category.SetVariable, "Portdaten", PrimaryName = "")]
- SET_PORT = 148,
- [CommandInfo(Category.SetConstant, "Sollgeschwindigkeit (Aufstieg)", Unit = "m/s", Conversion = CommType.fixedpt)]
- SET_REGLER_SPEED_ASCENT = 158,
- [CommandInfo(Category.SetConstant, "Sollgeschwindigkeit (Abstieg)", Unit = "m/s", Conversion = CommType.fixedpt)]
- SET_REGLER_SPEED_DESCENT = 159,
- [CommandInfo(Category.SetConstant, "Pause (vor Aufstieg)", Unit = "ms")]
- SET_DELAY_ASCENT = 160,
- [CommandInfo(Category.SetConstant, "Pause (vor Abstieg)", Unit = "ms")]
- SET_DELAY_DESCENT = 161,
- [CommandInfo(Category.SetConstant, "Annäherungsgeschw. (oben)", Unit = "m/s", Conversion = CommType.fixedpt)]
- SET_APPROACH_TOP_SPEED = 162,
- [CommandInfo(Category.SetConstant, "Annäherungsdistanz (oben)", Unit = "m", Conversion = CommType.thousands)]
- SET_APPROACH_TOP_DIST = 163,
- [CommandInfo(Category.SetConstant, "Annäherungsgeschw. (unten)", Unit = "m/s", Conversion = CommType.fixedpt)]
- SET_APPROACH_BOTTOM_SPEED = 164,
- [CommandInfo(Category.SetConstant, "Annäherungsdistanz (unten)", Unit = "m", Conversion = CommType.thousands)]
- SET_APPROACH_BOTTOM_DIST = 165,
- [CommandInfo(Category.SetConstant, "Maximale Höhe", Unit = "m", Conversion = CommType.thousands)]
- SET_MAX_HEIGHT = 166,
- [CommandInfo(Category.SetConstant, "Maximale Distanz", Unit = "m", Conversion = CommType.thousands)]
- SET_MAX_DISTANCE = 167,
- [CommandInfo(Category.SetConstant, "Temperatur Offset", SecondaryName = "Sensor", Unit = "°C")]
- SET_TEMPERATURE_OFFSET = 168,
- [CommandInfo(Category.SetConstant, "Temperatur Faktor", SecondaryName = "Sensor")]
- SET_TEMPERATURE_SCALE = 169,
- [CommandInfo(Category.SetConstant, "Temperatur Threshold", SecondaryName = "Sensor", Unit = "°C")]
- SET_TEMPERATURE_THRESHOLD = 170,
- [CommandInfo(Category.SetConstant, "Bandsensor Threshold")]
- SET_ROPE_SENSOR_THRESHOLD = 171,
- [CommandInfo(Category.SetConstant, "Reglerstatus broadcasten")]
- SET_REGLER_STATE_BROADCAST = 172,
- [CommandInfo(Category.Command, "Start", PrimaryName = "")]
- CMD_START = 200,
- [CommandInfo(Category.Command, "Stopp", PrimaryName = "")]
- CMD_STOP = 201,
- [CommandInfo(Category.Command, "Fahren (manuell, geregelt)", Unit = "m/s")]
- CMD_SETSPEED = 202,
- [CommandInfo(Category.Command, "Fahren (manuell, geregelt)", Unit = "U/min")]
- CMD_SETSPEED_RPM = 203,
- [CommandInfo(Category.Command, "Fahren (manuell)", Unit = "‰")]
- CMD_SETSPEED_PROMILLE = 204,
- [CommandInfo(Category.Command, "Notaus", PrimaryName = "")]
- CMD_NOTAUS = 205,
- [CommandInfo(Category.Command, "Profil laden")]
- CMD_LOAD_PROFILE = 206,
- [CommandInfo(Category.Command, "Profil speichern", SecondaryName = "Set as Default")]
- CMD_SAVE_PROFILE = 207,
- [CommandInfo(Category.Command, "Kalibrierdaten speichern")]
- CMD_SAVE_CALIBRATION = 208,
- [CommandInfo(Category.Command, "Abstieg", PrimaryName = "")]
- CMD_DESCENT = 209,
- [CommandInfo(Category.Command, "PWM Sequenz Messung", PrimaryName = "Start-PWM ‰", SecondaryName = "End-PWM ‰")]
- CMD_START_PWM_SEQ = 210,
- [CommandInfo(Category.General, "Debugstring")]
- RAW_PAYLOAD = 255,
- #endregion
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement