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 liebe Freunde :-) > > > Mein altes Problem "Programm läuft nicht" besteht weiterhin. Aber das Problem hat sich verlagert. > Dank Ingo, der das Menü simplifiziert hat, kann man wenigstens Werte eingeben > (leider ist das Menü nur nicht mehr so, dass es bei jeder Fehleingabe nachfragt - damit gehts wohl > schlicht und einfach nicht). > Ab und zu wird in die Routine "Startposition anfahren" gesprungen (wenn ich ein loop mit break statt > while blubb <= bla schreibe) > und gar nicht in die Regelschleife - je nachdem, ob while oder loop dasteht, heißt es dann ganz am > Ende immer "laenge = 0" auf dem Display, aber "lagen = 6" oder "lagen = 0". > > > Logikfehler in der REgelschleife sind weiterhin meine Sache, aber warum springt es nicht hinein? > (Quelltext unten) > > Erich > > > <code> > > > long > TrommelBreite, > Hoehe[3], > > Puls0[3], Puls1[3], Puls2[3], PID, > TrommelAbstand, counter, count1, count2, boolturn, turncount, ok, > port2cnt[3], timerTor, tAvgl, laenge, Lagen, laengencount, lagencount, temp, port1cnt[3], FD, ErrCnt; > > > > string s; > > //string auf LCD ausgeben, Tastaturcode zurückgeben > function keyvalue(string s) returns long > { > lcdext.clear(); > lcdext.goto(1, 0); > lcdext.print(s); > return keyboardmod.getcode(); > } > > > > //------------ > thread main > //------------ > { > > lcdext.init(); > > ports.deact(8); > ports.deact(9); > ports.deact(10); > > ports.getcount(0); > ports.getcount(1); > ports.getcount(2); > ports.deact(11); > ports.deact(12); > ports.deact(13); > ports.deact(14); > > ErrCnt = 0; > boolturn = 0; > > plm.setperiod(0, 3000); > plm.setperiod(1, 3000); > plm.setperiod(2, 3000); > > counter = 0; > count1 = 0; > count2 = 0; > turncount = 0; > > port1cnt = 0; > port2cnt = 0; > > plm.out(0, 0); > plm.out(1, 0); > plm.out(2, 0); > ports.set(15, 1); > > wait ports.get(12); // wartet auf High-pegel am Port > > ports.set(15, 0); > > > Puls1[0] = 0; Puls1[1] = 0; Puls1[2] = 0; > Puls0[0] = 0; Puls0[1] = 0; Puls0[2] = 0; > Puls2[0] = 0; Puls2[1] = 0; Puls2[2] = 0; > > lagencount = 0; > laengencount = 0; > > tAvgl = system.timer(); > timerTor = system.timer (); > > ok = 0; > > > //Menü > while ok != 1 > { > laenge = 0; > s = "Laenge dm?"; > laenge = keyvalue(s); > > Lagen = 0; > if laenge == 0 > { > s = "Lagen"; > Lagen = keyvalue(s); > } > > s = "TrAbst mm"; > TrommelAbstand = 4*(keyvalue(s)- 40); > if (TrommelAbstand <= 0) > TrommelAbstand = 0; > > s = "TrBreit mm"; > TrommelBreite = TrommelAbstand + 4*keyvalue(s); > if TrommelBreite > 210*4 > TrommelBreite = 210*4; > > s = "Faserd. in um?"; > FD = keyvalue(s)*(8/51); //Verhältnis wichtig! Faserdicke * Encoder-Ergebnis1 * (32/51)/ 4 > > s = "1 = ok"; > ok = keyvalue(s); > > lcdext.clear(); > } > > //Ende Menü > counter = ports.getcount(2); > // Wickelführung: Startposition anfahren - da geht das Programm alle Schaltjahre rein > temp = 0; > plm.out(1, 2300); > loop > { > temp = temp + ports.getcount(1); > if temp >= TrommelAbstand > break; > lcdext.goto(1,0); > s="count(1):"; > str.putlong(s,temp); > lcdext.print(s); > lcdext.goto(2,0); > s="TrAbstand:"; > str.putlong(s,TrommelAbstand); > lcdext.print(s); > lcdext.clear(); > } > > lcdext.clear(); > plm.out(1, 0); > > // Regelschleife - die kann ich total vergessen > > loop > { > > if ((Lagen != 0) and (lagencount == Lagen)) > or ((laenge != 0) and (laenge <= counter)) or (ports.get(13) == 1) > or (ErrCnt >= 5) > break; > > if (system.timer()-500) >= tAvgl > { > Hoehe[0] = ports.adc(0) - 500; > Puls2[0] = Puls2[1] - 1*(Hoehe[0] - 1*Hoehe[1] + 1*Hoehe[0] - 1*(2*Hoehe[1] - Hoehe[2] - > Hoehe[0])); > if (Puls2[0] >= 3000) > Puls2[0] = 3000; > if (Puls2[0] < 0) > Puls2[0] = 0; > > Hoehe[2] = Hoehe[1]; > Hoehe[1] = Hoehe[0]; > tAvgl = system.timer(); > plm.out(2, Puls2[0]); > } > if (system.timer()-1000) >= timerTor > { > count1 = ports.getcount(1); > if boolturn == 0 > turncount = turncount + count1; > if boolturn == 1 > turncount = turncount - count1; > port1cnt[0] = ports.getcount(1)*1000 - FD*(ports.getcount(0)); //*1000, da FD integer bleiben soll. > Puls1[0] = Puls1[2] + 0.1*(port1cnt[0] - 1*port1cnt[1] + 1*port1cnt[0] - 1*(2*port1cnt[1] - > port1cnt[2] - port1cnt[0])); > > if (Puls1[0] > 3000) > Puls1[0] = 3000; > if (Puls1[0] < 0) > Puls1[0] = 0; > > Puls1[2] = Puls1[1]; > Puls1[1] = Puls1[0]; > port1cnt[2] = port1cnt[1]; > port1cnt[1] = port1cnt[0]; > timerTor = system.timer(); > > if (turncount > TrommelBreite)and(boolturn==0) > { > boolturn = 1; > ports.set(15, 1); > lagencount = lagencount + 1; > }; > if (turncount < TrommelAbstand)and(boolturn==1) > { > boolturn = 0; > ports.set(15,0); > lagencount = lagencount + 1; > }; > > if boolturn == 0 > plm.out(1, Puls1[0]); > else > plm.out(1, 3000 - Puls1[0]); > > count2 = ports.getcount(2); > if count2 != 0 > ErrCnt = 0; > else > ErrCnt = ErrCnt + 1; > counter = (counter + count2)/11; > if counter >= laenge > break; > > port2cnt[0] = count2 - ports.adc(1)/40 > if (port2cnt[0] >= 0) > PID = 1; > > if PID != 1 > { > Puls0[0]= Puls0[0] + 40; > Puls0[1]= Puls0[0]; > Puls0[2]= Puls0[0]; > port2cnt[1] = port2cnt[0]; > port2cnt[0] = port2cnt[0]; > } > else > { > Puls0[0] = Puls0[2] + 0.01*(port2cnt[0] - 1*port2cnt[1] + 1*port2cnt[0] - 1*(2*port2cnt[1] - > port2cnt[2] - port2cnt[0])); > Puls0[2] = Puls0[1]; > Puls0[1] = Puls0[0]; > port2cnt[2] = port2cnt[1]; > port2cnt[1] = port2cnt[0]; > } > plm.out(0, Puls0[0]); > timerTor = system.timer(); > } > } > > > > > plm.out(1, 0); > lcdext.clear(); > s = "Laenge: "; > str.putint(s, counter); > lcdext.goto(1, 0); > lcdext.print(s); > s = "Lagen: "; > str.putint(s, lagencount); > lcdext.goto(2, 0); > lcdext.print(s); > plm.out(1, 0); > ports.set(15, 0); > > halt; > } > </code>
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB