Simple #define Frage

Gast #7214966
Lesenswert?

Ich habe hier folgendes Macro eines PID Reglers.

Wie kann ich dieses Macro aufrufen?
z.B.

PID_MACRO(v.Ref = 100;)

und wie kann ich das ergenis dieses Macros wieder einer Funktion 
übergeben?

z.B.
set_PWM (v.Out);
1
#define PID_MACRO(v) \
2
v.Err = v.Ref - v.Fdb; /* Compute the error */ \
3
v.Up = v.Kp * v.Err; /* Compute Up */ \
4
v.Ui = v.Ui + v.Ki*v.Up + v.Kc*v.SatErr; /* Compute Ui */ \
5
v.OutPreSat = v.Up + v.Ui;
6
/* Compute pre-saturated output */ \
7
if (v.OutPreSat > v.OutMax) /* Saturate output */ \
8
{v.Out = v.OutMax;} \
9
else if (v.OutPreSat < v.OutMin) \
10
{v.Out = v.OutMin;} \
11
else \
12
{v.Out = v.OutPreSat;} \
13
v.SatErr = v.Out - v.OutPreSat; /* Compute saturate difference */ \
14
v.Up1 = v.Up;


Vielen Dank Jungs
Gast #7214987
Lesenswert?

Simon schrieb:
> Wie kann ich dieses Macro aufrufen?
>
> PID_MACRO(v.Ref = 100;)
So nicht. Schau dir dein #define an.

> #define PID_MACRO(v) \
> v.Err = v.Ref - v.Fdb; /* Compute the error */ \

> und wie kann ich das ergenis dieses Macros wieder einer Funktion
> übergeben?

Das Macro liest und schreibt die übergebene Sturuktur.

Wie wärs mal mit "A Book on C"?
Gast #7214988
Lesenswert?

das wird irgendwie mit struct funzen denke ich.

wie ist den ein Macro zu verwenden das so deklariert ist?

#define PID_MACRO(v)

da muss ich doch irgendwie

struct v und dann kann man mit

v.Ref
v..... das irgendwie aufrufen
Gast #7214992
Lesenswert?

Anhand der gegebenen Informationen würde ich vermuten, dass das ‚v‘ im 
Macro eine Referenz zu einer definierten Struktur ist. Wie die Struktur 
aufgebaut ist, ergibt sich grob aus den Membernamen. Das steht aber 
bestimmt noch im Detail auf der nächsten Salamischeibe;)

Aufruf des Macros erfolgt dann via:

PID_MACRO(<struct>);

Das Ergebnis steht dann danach in <struct>.out

Warum das ein Macro und keine Funktion ist…?
Gast #7215149
Lesenswert?

Es gibt eine Menge Beschreibungen zu PID Regler. Die Formeln sind 
einfach selber umzusetzen.

https://de.wikipedia.org/wiki/Regler
https://rn-wissen.de/wiki/index.php/Regelungstechnik


Es gibt die Umsetzung sogar vorgefertigt für den Arduino,

https://playground.arduino.cc/Code/PIDLibrary/

und der Sourcecode ist sogar kommentiert!

https://github.com/br3ttb/Arduino-PID-Library/blob/master/PID_v1.cpp


Warum verwendet man nicht so eine freie und kommentierte Software, 
sondern nimmt so ein krankes Macro? Dann versteht man das Macro noch 
nicht einmal und zum Schluss kommt nur Murks heraus.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren