Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Probleme mit Zeitmessung Kategorie: Programmierung (von Stefan - 16.01.2007 13:47)
Ich nutze:
C-Control II Station, OSOPT V3.1
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 (akzeit) 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 (deltat) 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:

// 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
 }






    Antwort schreiben


Antworten:

Re: Probleme mit Zeitmessung (von Schroeder - 16.01.2007 17:58)
    Re: Probleme mit Zeitmessung (von Stefan - 17.01.2007 13:44)
        Re: Probleme mit Zeitmessung (von Schroeder - 18.01.2007 11:17)
            Re: Probleme mit Zeitmessung (von Stefan - 19.01.2007 11:38)
                Re: Probleme mit Zeitmessung (von Schroeder - 19.01.2007 21:09)
                    Re: Probleme mit Zeitmessung (von Stefan - 22.01.2007 15:03)