-
-
Erfahrener Benutzer
Robotik Einstein
Der Code, so wie ich ihn geschrieben habe geht? Auch das Portb=Pina?
Das Problem mit Wartezeiten ist nicht so einfach zu lösen.
SPS kenne ich noch aus der Berufsschule, aber das ist zum einen schon ein paar Jahre her und zum anderen waren die Teile damals schon alt
Eine S7 kenne ich nur von Bilder oder wenn mal eine in nem Schaltschrank ist.
Aber wo ist der Unterschied ob das Programm erst eingelesen wird und am Ende die Ausgänge gesetzt werden zu die Ausgänge werden dann gesetzt wenn es grade nötig ist?
Wenn die SPS warten muss, wartet sie doch auch nur, oder? Und das erst eingelesene Programm muss auch erst schauen, welche Bedinungen erfüllt sind um Ausgänge zu setzen.
Um in den Wartezeiten trotzdem arbeiten zu können, gibt es die Möglichkeit Interrupts zu nutzen.
Während der Wartezeit kann der RS232-Port abgefragt werden. Wenn Daten empfangen wurden, kann auf diese Reagiert werden, obwohl der Rest des Programm noch "wartet".
Oder ein Taster an einem externen Interrupt (INT0, INT1). Wird der Taster während der Wartezeit betätigt, wird das warten in den Hintergrund gestellt und es wird geschaut, was passieren soll, wenn der Taster gedrückt wird.
Oder das einlesen von ADC-Werten. Wenn dauerhaft was gemessen werden muss, kann nach Ende der Wandlung der Wert verarbeitet werden.
Diese Variante ist aber weniger sinnvoll, weil eine Wandlung zu schnell abgeschlossen ist. Der AVR ist dann die meiste Zeit damit beschäftigt die Werte zu verarbeiten.
Wenn man dann noch die Takte für das sichern der Register bedenkt, könnte das Hauptprogramm ins stocken kommen. Aber möglich wäre es und ist ggf. auch mal von nöten.
Eine weitere Variante ist das einsetzen von Timern.
Damit lässt sich viel machen.
Ein Timer löst nach einer eingestellten Zeit aus und unterbricht das Programm und damit das warten. So wäre es z.B. möglich jede Sekunde einen ADC-Wert zu messen, auch wenn das Hauptprogramm noch 9 Sekunden warten will.
Aber auch andere Sachen würden sich in der ISR des Timer erledigen lassen.
Komplizierter wird es, wenn das Programm nahzu multitaskfähig werden soll wie man es vom PC her kennt. (Wobei ein PC auch nur einen Schritt nach dem anderen abarbeiten kann!!!)
Der Timer könnte auch jede Sekunde auslösen und eine Variable hochzählen. Im Hauptprogramm kann man dann schauen, ob die 10 Sekunden schon abgelaufen sind und sich dann der nächsten Aufgabe zuwenden.
Sind die 10 Sekunden noch nicht abgelaufen, können erstmal andere Sachen gemacht werden.
Schau dir wirklich mal die Seite von Roland Walter an. Für den Einstieg ist die sehr gut!
Zum Thema Multitasking und AVRs findest du im Internet auch ein paar Infos.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen