Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: Bitte um Hilfe - Zieleinlauf 4 Bahnen Kategorie: C-Control I V1.1 (von Dietmar, Homepage - 22.06.2005 9:50)
 Als Antwort auf Re: Bitte um Hilfe - Zieleinlauf 4 Bahnen von Reiner - 22.06.2005 7:20
Dietmar nutzt:  CC1-M-Unit V1.1, Advanced CC1-Unit, Open-Micro, Open-Mini

Hallo Reiner,

unten findest Du ein einfaches Demoprogramm für vier Bahnen, das sich sehr gut durchsimulieren läßt.

Während der Simulation müssen im Fenster 'C-Control-Digitalports" die Tasten 1, 2, 3 und 4 stellvertretend für die vier Lichtschranken gedrückt werden und dürfen nach dem Drücken nicht losgelassen werden. Denn das Loslassen wird natürlich als Portänderung (high auf low) detektiert. Um zu starten, muß die Taste 5 als Startpistole gedrückt werden. Die kann man nach dem Drücken wieder loslassen.

Diese Ausgaben werden erzeugt:

Ich warte, bis die Startpistole (an PORT[5]) gedrueckt wird.
Starttimer ist 18128
Ich warte, bis der 1. Laeufer ins Ziel geht.
Ich warte, bis der 2. Laeufer ins Ziel geht.
Ich warte, bis der 3. Laeufer ins Ziel geht.
Ich warte, bis der 4. Laeufer ins Ziel geht.
Ergebnisse:
Zeit des Siegers auf Bahn 3: 2740 ms
Zeit des Zweiten auf Bahn 2: 3960 ms
Zeit des Dritten auf Bahn 4: 4580 ms
Zeit des Vierten auf Bahn 1: 5220 ms


Natürlich kann man noch ein Menge verbessern oder das Programm an andere Signalformen anpassen. Ich habe zum Beispiel noch nicht den Fall beachtet, daß zwei Läufer zur gleichen Zeit ins Ziel kommen. Die C-Control kann außerdem nur Zahlen im positiven Bereich bis 255 (Byteformat) oder 32767 (Wordformat) verarbeiten. Falls ein Läufer länger als 32,767 Sekunden benötigt, kommt es zum Beispiel bei der Ausgabe der Zeit zu einem Überlauf. Durch ein etwas längeres Programm kann man das alles aber leicht beheben. Und zumindest die PRINT-Ausgabe "Ich warte, bis ein Laeufer ins Ziel geht" ist natürlich nur zur Verdeutlichung, was vor sich geht. In der richtigen Applikation hat das nichts zu suchen. Denn diese Ausgabe über die serielle Schnittstelle bremst erheblich. Ebenso wird eine laufende Ausgabe auf das LCD nicht sinnvoll sein. Das würde aber wahrscheinlich auch bei anderen Kontrollertypen nicht funktionieren, wenn die Lichtschranken, wie hier, per Polling abgefragt werden.

Hier das Programm:

define lichtschranke1 port[1] 'Hier im Programm wird angenommen, das Signal
define lichtschranke2 port[2] ' der Lichtschranke ist low (0 Volt), solange
define lichtschranke3 port[3] ' die Schranke nicht ausgeloest hat und wird
define lichtschranke4 port[4] ' high (5 Volt), sobald ein Laeufer ins Ziel
                              ' geht, und bleibt auch danach high.
define startpistole port[5]   'Die Startpistole wird high beim Schuss.
define achtports byteport[1]  'Damit lassen sich 8 Ports gleichzeitig abfragen.
define led port[6]            'Eine LED zur schnellen Status-Ueberpruefung.

define starttimer word        'Zwichenspeichern des TIMER-Standes.
define endetimer word

define alterzustand byte      'Hiermit werden Veraenderungen detektiert.
define zustand byte

define laeufer byte           'Zaehler fuer den Ersten, Zweiten, Dritten, ...

define zustand1 byte          'Zwischenspeichern der Lichtschranken und
define timer1 word            'Zielzeiten des ersten, zweiten, dritten
define zustand2 byte          'und vieren Zieleinlaeufers.
define timer2 word
define zustand3 byte
define timer3 word
define zustand4 byte
define timer4 word

laeufer=0

'Ausgabe ueber Terminal, z.B. Hyperterminal
'oder waehrend der Simulation im Fenster 'C-Control-Ausgaben'
print
print "Ich warte, bis die Startpistole (an PORT[5]) gedrueckt wird."

'LED einschalten
led=on

'Der WAIT-Befehl laesst das Programm solange auf der Stelle stehen,
'bis die angegebene Bedingung erfuellt ist, der Ergebniswert also
'ungleich Null ist.
wait startpistole
starttimer=timer

'Die vier Lichtschranken sind an den unteren vier Ports (Bits) von
'BYTEPORT[1] angeschlossen. Mit dem logischen Operator AND koennen
'beliebige Bits ausmaskiert werden.
alterzustand=achtports and &b00001111

print "Starttimer ist ";starttimer

#wartenochmal
  print "Ich warte, bis der ";laeufer+1;". Laeufer ins Ziel geht."

  'Warten, bis sich der Zustand einer Lichtschranke veraendert
  #wartelichtschranke
    zustand=achtports and &b00001111
  if zustand=alterzustand then wartelichtschranke
 
  'Zustand zwischenspeichern
  endetimer=timer
  alterzustand=zustand

  'LED umschalten
  tog led

  'Subroutine in Abhaengigkeit der Variablen 'laeufer' aufrufen,
  'um die Bahn und den Zeitpunkt des Siegers und der drei uebrigen
  'Laeufer festzuhalten
  on laeufer gosub erster, zweiter, dritter, vierter
 
  laeufer=laeufer+1
if laeufer<4 then wartenochmal

print "Ergebnisse:"
alterzustand=0

print "Zeit des Siegers";
zustand=zustand1
gosub printbahn
print ": ";(timer1-starttimer)*20;" ms"

print "Zeit des Zweiten";
zustand=zustand2
gosub printbahn
print ": ";(timer2-starttimer)*20;" ms"

print "Zeit des Dritten";
zustand=zustand3
gosub printbahn
print ": ";(timer3-starttimer)*20;" ms"

print "Zeit des Vierten";
zustand=zustand4
gosub printbahn
print ": ";(timer4-starttimer)*20;" ms"

end

#erster
  zustand1=zustand
  timer1=endetimer
return

#zweiter
  zustand2=zustand
  timer2=endetimer
return

#dritter
  zustand3=zustand
  timer3=endetimer
return

#vierter
  zustand4=zustand
  timer4=endetimer
return

'hier wird die logische Funktion XOR verwendet
#printbahn
  if (zustand xor alterzustand)=1 then print " auf Bahn 1";
  if (zustand xor alterzustand)=2 then print " auf Bahn 2";
  if (zustand xor alterzustand)=4 then print " auf Bahn 3";
  if (zustand xor alterzustand)=8 then print " auf Bahn 4";
  alterzustand=zustand
return


Gruß
Dietmar

Meine Homepage: http://ccintern.dharlos.de

 Antwort schreiben

Bisherige Antworten:

Re: Bitte um Hilfe - Zieleinlauf 4 Bahnen (von Reiner - 22.06.2005 17:16)
    Re: Bitte um Hilfe - Zieleinlauf 4 Bahnen (von Dietmar - 22.06.2005 23:40)
        Re: Bitte um Hilfe - Zieleinlauf 4 Bahnen (von Reiner - 23.06.2005 7:24)
            Re: Bitte um Hilfe - Zieleinlauf 4 Bahnen (von Dietmar - 23.06.2005 8:40)