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 Community, > > hab mal wieder 'n bischen Hirnschmalz zu veröffentlichen. Kann sein das es keiner braucht. > > Ich wollt einfach nur mal 'n Timer der so simpel funktioniert wie bei 'ner SPS. > Kommentare und Verbesserungen ausdrücklich erwünscht, sofern jemand diese Fuction zum > Einsatz bringt. > > mfg krassos > > <code> > /*******************************************************************************/ > /* Universaltimer */ > /* Autor : Andreas Sperling */ > /* Vorlage : */ > /* Version : 1.0 */ > /* Datum : 12. November 2004 */ > /* Getestet : ja */ > /* Benötigt : system.c2; constant.c2 > /* Bemerkungen: Function verwaltet 11 Timer (Nummer 0...10) > Kann für allgemeine Verzögerungesaufgaben verwendet werden > /****************************************************************** > Universaltimer auf Basis des Systemtimers im Millisekundentakt > > Rückgabewert=timerstatus > > Parameter: > num.......timernummer > start.....wenn gesetzt, wird startzeit gespeichert > res.......setzt status auf 0 > time......Laufzeit in Millisekunden > /****************************************************************************/ > > long t[10]; //speicher für startzeit > int state[10]; //speicher für status > > function t_v(int num,int start,int res,long time) returns int > { > long t1,t2; > t1=system.timer(); //aktuelle zeit speichern > if start > { //wenn start gesetzt, zeit speichern > t[num]=t1; //und status setzen > state[num]=constant.on; > } > t2=math.labs(t1-t[num]); //absolutdifferenzbildung > if t2 > time state[num]=constant.off; //zeitüberprüfung > if res state[num]=constant.off; //reset wenn res > return state[num]; > } > </code> > > Und so binde ich den Timer zur Zeit ein: > > (vorläufig funktionsfähiges Modul, welches laufend erweitert wird:) > Hier sieht man auch, wie ich meinen PID-Regler momentan betreibe. > > <code> > /************************************************************************* > Modul zur Ansteuerung einer Solarumwälzpumpe > */ > > //variablen > int scale,p1init,p1pumpenstart,p1pumpenfuehrung, > p1pumpenstop,p1tn,p1tv,p1min,p1y,kollmax,p1state; > float p1kp; > > function p1reset(){ > int p1[8]; > eeprom.readintarray(7,0,p1,8); > p1init=p1[0]; > p1pumpenstart=p1[1]; > p1pumpenfuehrung=p1[2]; > p1pumpenstop=p1[3]; > p1tn=p1[4]; > p1tv=p1[5]; > p1kp=p1[6];p1kp=p1kp/10.0; > p1min=p1[7]; > plm.settimebase(0,4); > plm.setperiod(0,p1init);plm.out(0,0); > scale=(p1init-p1min)/1000; > } > > > thread pumpe{ > //variablen > int kollektor,VL,RL,speicherunten,t1,s1,s2,s3,s4, > y,x,m1,m2; > > //initialisierungen > p1reset(); > plm.settimebase(0,4); > plm.setmode(0,plm.PORT_DIGITAL); > plm.setperiod(0,p1init);plm.out(0,0); > if p1tn==constant.FALSE p1tn=1; > p1state=constant.off; > m1=constant.off; > loop > { > > sleep 1450; > > wait cap.Capture(2); > kollektor=tempfuehler.solkollektor(); > VL=tempfuehler.solvl(); > RL=tempfuehler.solrl(); > speicherunten=tempfuehler.speicherunten(); > cap.Release(2); > if kollektor-speicherunten>=p1pumpenstart p1state=constant.on; > if system.hour()>8 and system.hour()<16 and ! timer.t_v(2,0,0,600000) > {if ! p1state > { > p1state=constant.on; > timer.t_v(2,-1,0,600000); > } > } > if kollektor-speicherunten<p1pumpenstop and p1state > { > if ! s1 {timer.t_v(0,-1,0,30000);s1=constant.on;} > p1state=timer.t_v(0,0,0,30000); > m1=p1state; > } > else s1=constant.off; > /* > if RL>VL or RL>1000 or speicherunten>850 > { > if ! s2 {timer.t_v(1,-1,0,30000);s2=constant.on;} > p1state=timer.t_v(1,0,0,30000); > m1=p1state; > } > else s2=constant.off; > */ > if p1state != m1 {m1=p1state;pid.es=500;} //pumpenstart mit erhöhter Drehzahl > > if p1state > { > /****************** > kollektor=tempfuehler.solvl();speicherunten=tempfuehler.solrl(); > /*********************/ > x=kollektor-speicherunten; > p1y=pid.pid(x,p1pumpenfuehrung,p1tv,p1tn,p1kp); > plm.out(0,p1y*scale+p1min-1); > } > else > { > p1y=0;plm.out(0,0); > pid.ea=constant.FALSE;pid.es=constant.FALSE;pid.kd=constant.FALSE; > } > }} > </code>
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB