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
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB