Für dieses Forum muß Javascript im Browser aktiviert werden!
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> > > >