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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.