Wie kann ich einen Wert erneut einlesen Teil2

Gast #122436
Lesenswert?
• ▲
▼
#include <stdio.h>
#include <reg535.h>

uint HByte,LByte;
long int yr,y;
char x_string[32];       //Default is XRAM
uchar Fenster[4]={64,132,200,12};
uchar k;
float w=6100,e,x,g,z,a,b,h,Kr=1,Kpr=5,T=1.5,dt=0.7,di,
wert,D[4],Sum,Umax=10000,Zmax=1024;
uchar flag,k=(0),n;
float analog(uchar kanal);


void main (void)

{



z=(Umax/Zmax)*analog(1)*1.96;
e=w-z;
x=x+e*dt/T;
di=e*Kr-g;
g=g+di*Kpr;
 }
so sieht mein programm aus ich brauche die  Werte x und g vom alten
Zyklus, weil sonst mein regler schwingt und x und g bei einem reneuten
durchlauf null sind. Wer kann da helfen? Oder habe ich was falsch
gemacht? Ich habe auch schon versucht mit return zu arbeiten leider
klappt dieses auch nicht. Mit einem Programmbeispiel wäre super!
Gast #122441
Lesenswert?
• ▲
▼
x und g vom alten durchlauf bedeutet: wenn der alte wert im neuen
durchgang eingelesen wird ist die regeldifferenz natürlich kleiner.
da x und g bei mir aber immer null ist ist die regeldifferenz bzw
Stellgröße immer min oder max.

@ peter sorryx für die vielen fehler bin leider noch nicht so lange
dabei
Gast #122443
Lesenswert?
• ▲
▼
in diesem Programm gibt es aber gar keine Durchläufe...

Versuch doch am besten erstmal "dein" Programm zu verstehen. Wenn dir
nicht klar wird, was dir OldBug damit sagen will, dann solltest du
überhaupt erstmal mit nem guten Buch die Programmierung ganz am Anfang
beginnen.
Gast #122444
Lesenswert?
• ▲
▼
Also gut, ich versuchs dann mal...

--8<--

#include <stdio.h>
#include <reg535.h>

uint HByte, LByte;
long int yr, y;
char x_string[32];       //Default is XRAM
uchar Fenster[4] = { 64, 132, 200, 12 };
uchar k;
float w = 6100.0, e, x, g, z, a, b, h,
      Kr = 1, Kpr = 5, T = 1.5, dt = 0.7,
      di, wert, D[4], Sum, Umax = 10000,
      Zmax = 1024;
uchar flag, k = 0, n;

float analog(uchar kanal);

int
main (void)
{
  /* sicher irgendwelcher init-code... */

  /* Haupt-Schleife (main-loop): */
  while(1)
  {
    z  = (Umax / Zmax) * analog(1) * 1.96;
    e  = w - z;
    x  = x + e * dt / T;
    di = e * Kr - g;
    g  = g + di * Kpr;
  }
}

--8<--

Ich denke, das wolltest Du bezwecken...
Ich habe in meinem ersten Post vermutet, daß Du einen Teil des Codes
rausgeschnitten hast...

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.