Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Wichtig: Bevor Du wegen einem Problem mit der CC2 postest, stelle sicher, daß Du
die neueste OS-Version, die neuseste Compiler-DLL und die neuesten Modulversionen benutzt!
Beachte, daß sich auf der CD zur CC2-Unit/Station auch jetzt noch die ältesten Dateien befinden!
Es gelten folgende Anleitung und Regeln: Regeln CC2Net.de-Forum
Zurück zum Artikel  (Blaue Felder sind Pflichtfelder)


Name:   UserID: 
 E-Mail:
Kategorie
Betreff
Homepage:
Link-Titel:
Link-URL:
Cookie für Name, UserID, E-Mail, Homepage-URL setzen
(Erspart die Neueingabe bei Beiträgen und Antworten)
(Zum Löschen des Cookies hier klicken)
Ich nutze:
C-Control II Unit
C164CI-Controllerboard
C-Control II Station
CCRP5 mit CC2-Unit (Conrad Roboter)
CC2-Application-Board
CC2-StarterBoard
CC2-ReglerBoard
eigenes Board
original OS     OSOPT_V2     OSOPT V3.0 OSOPT V3.1

Kommentar:
Einfügen von HTML im Kommentar:

Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a>
Bild einfügen: <img src="BILDURL">
Text formatieren: <b>fetter Text</b>  <i>kursiver Text</i> <u>unterstrichener Text</u>
Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b>
C2 Quellcode formatieren: <code>Quellcode</code>
ASM Quellcode formatieren: <asm>Quellcode</asm>
(Innerhalb eines Quellcodeabschnitts ist kein html möglich.)
Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst !  

> > > Hallo > > > > > > ich habe versucht den PID-Regler von Krassos als Regler für meine Kesselkreispumpe einzusetzen. > > > Leider bleibt die Unit immer hängen wenn ich den Regler starte und ich weis nicht warum. > > > ich habe für die Werte tv und tn erstmal 0.1 eingesetzt als ausgang sozusagen. > > > dann habe ich für kp 0.01 eingesetzt ist das io ??? > > > ich denke ich poste mal den Code dann kann man sich das leichter vorstellen. > > > > Uff, > > > > ich werd mir mal Mühe geben, mich in das Konstrukt reinzudenken. > > > > > > > > <Code> > > > > //[mal eben gelöscht wegen der übersichtlichkeit] > > > > > /*****************************************************************/ > > > //Pumpe 2 > > > /******************************************************************/ > > > /* PID-Regler > > > /* > > > /* Author : Andreas Sperling > > > /* Vorlage : Andreas Sperling > > > /* Version : 0.4 > > > /* Datum : 29. Juni 2004 > > > /* geändert : 03. Juli 2004 > > > /* Getestet : ja > > > /* Benötigt : > > > /* > > > /******************************************************************/ > > > /* > > > Geändert: I-Anteil arbeitet nur innerhalb des Proportionalbandes > > > Dadurch wird die Überschwingweite bei grossen Führungssprüngen oder > > > grossen Störgrössen verringert. > > > > > > Geändert: Abtastzeit ta wird innerhalb der function berechnet. > > > */ > > > /* > > > w Sollwert > > > x istwert > > > ta abtastzeit > > > tv vorhaltezeit (D-Anteil) > > > tn nachstellzeit (i-anteil) > > > kp proportionalanteil > > > */ > > > function pid2 (int w,int x,int tv,int tn,float kp) returns int > > > { > > > int y1;float e,y,diff1; > > > z1=system.timer(); > > > ta=(z1-z2);ta=ta/twox;z2=z1;if ta<0.1 or ta>20.0 ta=1.0; //Abtastzeitermittlung > > > e = w - x;//regelabweichung > > > if kp*e<500 es = es + ((ea + e) / two);else es=0.01; //i-speicher > > > diff1=e-ea; > > > kd = (kd+tv / ta * diff1)/two; //D-anteilsberechnung und d-Anteil ausklingen > > > y = kp * (e +(ta / tn * es) + kd); //stellwertsberechnung > > > y=y*(-1); //wert invertieren > > > y1=y; > > > if tempaus.value[4]>700 y=14999; > > > if y>14999 or y<4499 > > > { > > > if y>14999 y1=14999; > > > if y <4499 y1=4499; > > > if y <3000 y1=0; > > > } > > > ea = e; > > > return y1; > > > } > > > //--------------------------------------------------------------------------- > > > //init und ausgabe der PWM ports > > > //--------------------------------------------------------------------------- > > > int pid[5],out,out2; > > > float d[2]; > > > > > > //************ > > > thread main > > > //************ > > > { > > > pid[0]=0.1; > > > pid[1]=0.1; > > > pid[2]=0.1; > > > pid[3]=0.1; > > > > > > Die Parameter die du hie vorgibst, sind float. In der Funktion wird int erwartet. > > Also übergibst Du hier 0. Division durch Null führt zum Absturz. > > > > > > > > > > > > > d[0]=0.01; > > > d[1]=0.01; > > > > > > plm.settimebase(0,5); > > > plm.settimebase(1,5); > > > plm.setmode(0,0); > > > plm.setmode(1,0); > > > plm.setperiod(0,15000); > > > plm.setperiod(1,15000); > > > plm.out(0,-1); > > > plm.out(1,-1); > > > loop > > > { > > > > > > out=pid1(500,tempaus.value[0],pid[0],pid[1],d[0]); > > > if regelung3.oelp==1 plm.out(0,out); > > > else plm.out(0,0); > > > > > > out2=pid2(600,tempaus.value[4],pid[2],pid[3],d[1]); > > > if regelung3.holzp==1 plm.out(1,out2); > > > else plm.out(1,0); > > > > > > } > > > } > > > //--------------------------------------------------------------------------- > > > > > > </Code> > > > Die Invertierung erfolgt weil ich einen Festen Sollwert für den Kessel vorgeben möchte. Um > > > Kondensat zu vermeiden einmal bei K1 50.0°C und bei K2 60.0°C und da venn der vorgabe Wert > > > größer als der Istwert ist die Pumpe laufen soll habe ich das Signal Invertert das ist alles. > > > > > > Ich hoffe Ihr könnt helfen > > > > > > Ich bin an meine Solarpumpe wie folgendermassen rangegangen: > > Die Funktion hab ich auf excel-vba portiert und dann das ganze für statische, > > von mir erwartete Soll- und Istwerte simuliert. > > Daraus kannst Du zumindest die Ergebnisse des Reglers im statischen Betrieb abschätzen. > > > > > > Ich hab grade eben noch ein Modul für die Sprungantwort gefunden: > > <code> > > 'pid-testalgorithmus > > 'versuchskonfiguration > > ' ta= abtastzeit > > 'tn=nachstellzeit (i-Anteil) > > 'tv=vorhaltezeit (d-Anteil) > > 'kp=proportionalbeiwert (p-Anteil) > > > > Sub testpid() > > > > es = 0 > > ea = 0 > > ea3 = 0 > > w = Cells(9, 3).Value 'w steht in C9 (für Sprungantwort =1) > > > > tn = Cells(11, 3).Value 'tn in C11 > > tv = Cells(12, 3).Value 'tv in C12 > > kp = Cells(13, 3).Value 'kp in C13 > > ta = 1 > > > > For t = 0 To 251 > > x = Cells(t + 4, 7).Value 'Der Startwert für x steht in G4 (für sprungantwort =0) > > 'x = Cells(t + 5, 7).Value > > 'ta = t + 1 > > e = w - x 'regelabweichung > > es = es + (ea + e) / 2 'i-speicher > > If e - ea > 0 Then > > > > kd = tv / ta * (e - ea) > > > > > > Else: > > If kd > 0.5 Then > > > > kd = kd * (1 - 1 / kd) > > Else: kd = 0 > > End If > > End If > > y = kp * (e + (ta / tn * es) + kd) > > > > ea = e > > > > > > 'Hier werden ab Zeile 5 Ausgaben berechnet. Diese lassen sich sehr schön als Diagramm darstellen > > ' und stellen das Reglerverhalten dar. Hier können sehr schön verschiedene Werte für > > ' die Parameter simuliert werden > > Cells(t + 5, 4).Value = y > > Cells(t + 5, 5).Value = e > > Cells(t + 5, 6).Value = ea > > Cells(t + 5, 7).Value = Cells(t + 4, 7).Value + y > > Next t > > > > End Sub > > </code> > > > > Gruß krassos > > > Danke für den Tip das mit der int habe ich im eifer gar nicht bemerkt (schäm) > > Das mit Exel ist ne gute Idee danke nochmal > > Mfg Guido
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB