Hallo zusammen!
Dumme Frage zu folgendem Fall:
Ich habe ein Gerät das jetzt Modbus lernen soll. D.h. alle Parameter und
daten sollen per Modbus ausgelesen und beschrieben werden. Die
eigentliche Modbus Kommunikation läuft schon.
Aktuell habe ich z.B. solche Variablen
1 | typedef struct
|
2 | {
|
3 | uint8_t batt_nr; // ausgewählter Batterie Typ
|
4 | uint8_t batt_cells; // Batterie Zellen
|
5 | uint16_t capacity; // in A/h
|
6 | int16_t temp;
|
7 | } selected_batt_t;
|
8 |
|
9 | typedef struct {
|
10 | ext_output_mode_t ext_output_mode;
|
11 | uint8_t v_high;
|
12 | uint8_t v_low;
|
13 | uint8_t inverted;
|
14 | uint8_t hold_time;
|
15 | } ext_output_config_t;
|
16 |
|
17 | uint16_t act_pwm;
|
18 | float voltage_batterie;
|
19 | float current_batterie;
|
20 | selected_batt_t selected_batterie;
|
21 | ext_output_config_t output_config[4];
|
Damit die Variablen jetzt immer an eine feste Adresse liegen, und ich
diese einfach per Modbus ausgeben kann, habe ich angefangen alles in ein
großes Array zu machen:
1 | #define ADR_ACT_PWM 0
|
2 | #define ADR_VOLTAGE_BATTERIE_H 1
|
3 | #define ADR_VOLTAGE_BATTERIE_L 2
|
4 | #define ADR_CURRENT_BATTERIE_H 3
|
5 | #define ADR_CURRENT_BATTERIE_L 4
|
6 |
|
7 | uint16_t system_data[5];
|
Jetzt kann ich einfach die Werte übertragen wenn die Adressen vom Modbus
Master abgefragt werden.
Nur was mache ich mit den Strukturen? z.B. die output config Struktur,
in der die Konfiguration der Ausgänge gespeichert ist. Davon habe ich
vier Stück mit jeweils 5 Parametern. Ich könnte das jetzt aufdrösseln,
ins große Array packen und die 20 Adressen mit #define definieren. Aber
ich denke das wird unübersichtlich. Außerdem habe ich im programm sowas
stehen:
[c]
for (x=0;x <= 3; x++)
{
switch (ext_output_config[x].ext_output_mode)
{
case EXT_OUTPUT_MODE_DISABLED:
break;
case EXT_OUTPUT_MODE_CHARGER_STATE:
if (charger_mode==charger_mode_float_charging)
{
switch_output_on(x);
}
else
{
switch_output_off(x);
}
break;
}
}
Das würde dann ja gar nicht mehr gehen, wenn ich keine Struktur für die
Konfiguration eines Ausgangs habe....
Jetzt steh ich irgendwie auf den Schlauch, wie man das am cleversten
machen kann... irgendwelche Vorschläge?
Gruß
Falko