| Das Delphi4 Programm mit FishFa50.DCUDer LLWin Terminal Baustein wurde durch eine Delphi Form ersetzt in die auch die Auswahl des Interface-Anschlusses integriert wurde. Nun die Delphi-Lösung zum LLWin Hauptprogramm : procedure TfrmMain.cmdActionClick(Sender: TObject); Was passiert da : Eine Menge, dass sich wiederholt : Das Anfahren der Schächte Rechts, Mitte und Links mit unterschiedlichen Werten für die Position und die Anzahl der auszugebenden Münzen. ft.SetMotor startet jeweils den Schlittenmotor, ft.WaitForChange zählt die Tasterimpulse, bei Erreichen der vorgegebenen Anzahl (Positionsangabe) wird der Schlittenmotor mit ft.SetMotor wieder ausgeschaltet. Bei Erreichen der Position wird das Unterprogramm Schieber aufgerufen, das die gewünschte Anzahl Münzen (Wert aus dem entsprechenden Feld der Form) ausgibt. Das ist schon (fast) alles. Es fehlen noch ft.OpenInterface und ft.CloseInterface für die Verbindung zum fischertechnik Interface und das Unterprogramm Home zum Anfahren der Home Position. Das Unterprogramm Schieber sieht so aus : procedure TfrmMain.Schieber(Anzahl: Integer); In einer For ... Next Schleife für die Anzahl der auszugebenden Münzen wird der Schiebermotor gestartet (ft.SetMotor), dann wird gewartet bis der Schlitten vorn ist (ft.WaitForInput, der Taster muß öffnen, die meiste Zeit liegt er auf dem Zahnstangegetriebe und ist geschlossen). Wenn der Schieber vorn angekommen ist, wird der Schiebermotor umgepolt, d.h. der Schieber fährt gleich wieder zurück, der Motor wird abgeschaltet. Und noch das Unterprogramm Home : procedure TfrmMain.Home(); Zuerst wird der Schiebermotor gestartet (ft.SetMotor), dann wird mit ft.WaitForInput gewartet bis der Schlitten hinten ist und der Schiebermotor abgeschaltet. Dann startet der Schlittenmotor in Richtung Endtaster ... Variante : BetragsausgabeBislang mußte man genau angeben wieviel Stück der jeweiligen Münzsorte ausgegeben werden sollen, wie wäre es mit der Angabe des auszugebenen Betrages? Das Programm müßte dann die Stückelung bestimmen. Deshalb zunächst das Unterprogramm Stueckelung : procedure Stueckelung(Betrag: Integer; out Z200, Z100, Z50: Integer); Was passiert da : Dem Unterprogramm wird der auszugebenden Betrag als Parameter übergeben. Ergebnis des Unterprgramms sind die Anzahlen der auszugebenden Münzen (Z200, Z100, Z50 für 2€, 1€ und 50€Cent). Die Anzahlen werden zunächst auf 0 gesetzt und dann wird in einer Schleife vom aktuellen Betrag immer der Cent-Wert einer Münze abgezogen - bis es nicht mehr geht. Das wird für jede Münzsorte gemacht. Man sieht : Die Rest-Cent werden verschlabbert, es dürfen also nur Beträge, die durch 50€Cent teilbar sind, eingegeben werden. Der Einbau in das vorhandene Programm ist einfach : procedure TfrmMain.cmdActionClick(Sender: TObject); Zu Beginn des Programms wird die Stückelung bestimmt und an den Stellen wo bisher ein Anzahlfeld aus der Form ausgelesen wurde, wird jetzt ein Z-Wert eingesetzt. Das war alles. Man kann natürlich noch prüfen, ob der Betrag durch 50€Cent teilbar ist, auf Höchstbetrag prüfen, Zähler für die vorhandenen Münzen führen und ggf. eine modifizierte Stueckelung vornehmen .... Viel Vergnügen. |