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 !  

> > > Liebe Leute! > > > > > > Ich benutze die CC2 um per Druckluft Proben von einem Punkt A zu einem Punkt B zu schießen und wieder > > > zurück. Die Relais der C-Control steuern dabei die Druckluft. Die Zeit, wie lange die Proben in Punkt B > > > verweilen, kann über die Station eingegeben werden. Wenn die Probe von Punkt B wieder zurückgeschossen > > > wird, dann erhalte ich eine Anzeige, die mir die Uhrzeit des Ausschusszeitpunkts und die Verweildauer in > > > Punkt B angibt. Wichtig ist für mich, dass die Verweildauer (<code>akzeit</code>) exakt eingehalten wird > > > und zusätzlich möchte ich erreichen, dass der Ausschuss zu einer vollen Minute erfolgt. Das Problem ist > > > nun, dass obwohl der Einschuss richtig erfolgt, die Ausschusszeit laut Anzeige nicht genau auf eine volle > > > Minute fällt. Mit dem systeminternen Timer messe ich die Verweildauer (<code>deltat</code>) und die > > > stimmt auch bis auf einige wenige Millisekunden. Warum stimmt die Anzeige des Ausschusszeitpunkts > > > nicht? > > > Ich würde mich sehr über eure Hilfe freuen. > > > Stefan > > > > > > Hier noch der gekürzte Quellcode: > > > > > > <code>// Variablen zur Zeitmessung werden definiert > > > type ZeitPunkt > > > { > > > system.TIME zeit; > > > long punkt; > > > } > > > > > > // Funktion zum Einschießen > > > function EinSchuss(ZeitPunkt Ein) > > > { > > > lcdext.clear(); > > > lcdext.print("Einschuss..."); > > > stports.setRel(1,1); // Relais 1 wird geschaltet > > > Ein.punkt=system.timer(); // Systeminterner Timer wird ausgelesen > > > system.gettime(Ein.zeit); // Zeit wird ausgelesen > > > sleep einzeit; > > > stports.setRel(1,0); > > > } > > > > > > // Funktion zum Ausschießen > > > function AusSchuss(ZeitPunkt Aus, int auszeit) > > > { > > > stports.setRel(2,1); > > > Aus.punkt=system.timer(); > > > system.gettime(Aus.zeit); > > > lcdext.clear(); > > > lcdext.print("Ausschuss..."); > > > sleep auszeit; > > > stports.setRel(2,0); > > > } > > > > > > thread main > > > { > > > long akzeit; > > > long deltat; > > > long test; > > > ZeitPunkt EinZeit,AusZeit; > > > > > > akzeit=AktZeit(akzeit); // hier wird Verweildauer eingelesen > > > > > > // Modulodivision, damit Einschuss erst startet, wenn die Ausschusszeit > > > // auf eine volle Minute fällt > > > while((system.second()+akzeit) % 60 != 0); > > > EinSchuss(EinZeit); > > > test=EinZeit.punkt+akzeit*1000; > > > stkeyb.waitReleased(); > > > while(test>system.timer())&(stkeyb.get()==255); > > > AusSchuss(AusZeit,auszeit); > > > stkeyb.waitReleased(); > > > deltat=AusZeit.punkt-EinZeit.punkt; > > > AusAnzeige(AusZeit.zeit,deltat); // Zeitanzeige > > > }</code> > > > > > > > > > > > > > > > > Hallo Stefan, > > > > wenn ich dein Programm richtig verstehe, dann wartest du erst auf eine volle Minute. > > Es folgt der Einschuss, danach ein sleep auf eine mir unbekannte Zeit, > > danach wartest du dann deine Deltazeit akzeit*1000 und auf eine Taste > > bevor der Ausschuss erfolgt. Anhand des Ablaufes würde ich vermuten das die Auszeit > > wohl sehr selten auf eine volle Minute fällt. Wie gross ist den die Differenz? > > In deinem Beispiel dürfte auch die "einzeit" niemals grösser sein als akzeit*1000 da sonst die > > erste Bedingung der letzten while schleife direkt erfüllt wäre. Da mit dem warten auf die Taste > > macht das ganze ja erst recht unkalkulierbar. > > "Immer bezugnemhmend, dass ich dein Programm auch richtig verstanden habe" > > > > Gruss > > Peter > > Hallo Peter, > > ich warte nicht mit dem Einschuss auf eine volle Minute, sondern lege den Einschuss so, dass der > Ausschuss auf eine volle Minute fällt. > <code> while((system.second()+akzeit) % 60 != 0);</code> > Die akzeit ist die Verweildauer in Punkt B. Wenn die Sekunden der momentanen Uhrzeit einen Wert > erreicht haben, der nach Addition mit akzeit eine volle Minute ergibt, erfolgt der Einschuss. > Die einzeit beträgt 10 und die auszeit 4 Sekunden, eine Eingabe der akzeit unter 15 Sekunden ist nicht > möglich. > Der Ausschuss erfolgt automatisch. Wenn system.timer gleich groß wird wie test oder größer. Ein > Tastendruck würde nur ein vorzeitiges Ende der Schleife und damit einen Ausschuss herbeiführen. > <code> while(test>system.timer())&(stkeyb.get()==255);</code> > Das System funktioniert eigentlich auch ganz gut und ich glaube, dass der Ausschuss auch zu einer vollen > Minute erfolgt. Das Problem ist, dass die Anzeige nicht stimmt. Die Ausschussanzeige gibt mir immer einen > Wert aus, der 1 bis 3 Sekunden vor Erreichen einer vollen Minute ist (also bei x Minuten und 57 bis 59 > Sekunden). Ich verstehe nicht warum die Anzeige nicht stimmt. Vielleicht habe ich irgendwo beim Auslesen > der Uhrzeit Probleme? > Ich hoffe ich konnte das Problem nun ein wenig besser erklären. > > Liebe Grüße > Stefan
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB