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 Markus, > im Bereich "Programme C2" findest du ein Zip zum Thema Heizungssteuerung. > Darin befindet sich auch eine gute Vorlage für die Mischeransterung: > Da habe auch ich meine ersten Denkanstöße her.... > > <code>/**********************************************************************/ > /* Modul zur Ansteuerung eines Mischermotors */ > /* Autor : Malte Alpers (malte.alpers@gmx.de) */ > /* Version : 0.9 */ > /* Datum : 20.06.2005 */ > /* Geändert : */ > /**********************************************************************/ > /* Es wird ein Proportionalbereich definiert. Innerhalb des Bereichs */ > /* wird das Laufzeit-/Pausenverhältnis abhängig von der Abweichung von*/ > /* Tist von Tsoll berechnet. Die Ein-/Ausschaltdauer ist dabei ab- */ > /* hängig von der Periodendauer. Es wird ein neutraler Bereich defi- */ > /* niert, in dem nicht geregelt wird (tolerierte Abweichung von Tsoll)*/ > /* Außerhalb des Bereichs wird für die Dauer der Periode eingeschaltet*/ > /* und dann die Mindestpause gewartet. */ > /* Durch diese Regelung soll ein Übersteuern und Regelschwingungen */ > /* verhindert werden. */ > /* Beim Initialisieren des threads wird der Mischer sicher zugefahren,*/ > /* um einen definierten Startpunkt zu erhalten. Die Endlagenerkennung */ > /* erfolgt dann über eine Laufzeitberechnung. */ > /**********************************************************************/ > /* WICHTIG: */ > /* - Nur für Mischer mit (fast) linearer Temperaturkennlinie geeignet.*/ > /* - Relais für Mischer AUF/ZU kontrollieren und ggf. ändern. */ > /* - Sensor für 'Tist' muss zugewiesen werden (am Anfang der 'loop'- */ > /* Schleife). */ > /* - 'Tsoll' in 1/10°C (z.B. 64°C = 640)! */ > /* - Wird Tsoll in einem anderen thread/function definiert, muss hier */ > /* die Wertzuweisung für Tsoll entfernt weden. */ > /* - für Mischer mit langer Laufzeit (>> ca. 2 min.) oder für schnel- */ > /* leres reagieren bei großen Abweichungen von Tsoll sollte die max.*/ > /* Laufzeit pro Durchlauf erhöht werden (siehe Hinweis im Quelltext)*/ > /**********************************************************************/ > thread mischer1 > { > byte Rzu, Rauf, tzu, i; > int P, dt, tein, taus, tamin, temin, offset, z, Tist; > long p, lz, LZ; > int Tsoll; // Wenn Tsoll als Festwert > > Rzu = 2; // Relais Mischer ZU, '0'-basiert! (Relais 3 = 2) > Rauf = 1; // Relais Mischer AUF, '0'-basiert! (Relais 2 = 1) > > P = 120; // Proportionalbereich in 1/10 K (z.B. 12 K = 120) > p = 20000; // Periodendauer in Millisekunden (z.B. 20s = 20000, max. 32767 !) > tamin = 10000; // Mindestpause (zul. Schaltspiele des Motors beachten) > temin = 2000; // Mindesteinschaltdauer > LZ = 120000; // Laufzeit des Mischermotors in Millisekunden > offset = -10000; // Für sicheres Zufahren; in Millisekunden (muss negativ sein!) > z = 10; // zul. Abweichung von TSoll in 1/10 K (z.B. +/- 1 K = 10) > > Tsoll = 640; // Nur wenn Tsoll als Festwert, in 1/10°C (z.B. 64°C = 640) > > > // Mischer sicher zufahren > sleep 3000; > rbports.set(Rzu,-1); > tzu=LZ/60000+1; > for i=0...<tzu sleep -5536; // -5536 entspricht 1 Minute > sleep 20000; > rbports.set(Rzu,0); > lz=offset; > sleep 10000; > > > loop > { > Tist = temp.T[1]; // Sensor für 'Tist' zuweisen > > // Bedingung Mischer AUF > if Tsoll-z > Tist and rbports.get(Rzu)==0 and lz < LZ > { > dt=(Tsoll - Tist); > if dt >= P > { > tein = p; /* max. Laufzeit pro Durchlauf, evtl. größeren Wert setzen > (Wertebereich für sleep beachten!) */ > taus = 0; > } > else > { > tein = (dt * p) / P; > taus = p - tein; > } > if taus < tamin taus=tamin; > if tein < temin tein=temin; > > rbports.set(Rauf,-1); > sleep tein; > rbports.set(Rauf,0); > lz=lz+tein; // Laufzeitberechnung > if lz > LZ lz=LZ; // Laufzeit rücksetzen > sleep taus; > } > else > // Bedingung Mischer ZU > if Tsoll+z < Tist and rbports.get(Rauf)==0 and lz > offset > { > dt=(Tist - Tsoll); > if dt >= P > { > tein = p; /* max. Laufzeit pro Durchlauf, evtl. größeren Wert setzen > (Wertebereich für sleep beachten!) */ > taus = 0; > } > else > { > tein = (dt * p) / P; > taus = p - tein; > } > if taus < tamin taus=tamin; > if tein < temin tein=temin; > > rbports.set(Rzu,-1); > sleep tein; > rbports.set(Rzu,0); > lz=lz-tein; // Laufzeitberechnung > if lz < offset lz=offset; // Laufzeit rücksetzen > sleep taus; > } > } > } > </code>
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB