Geld mit VB

ftComputing : Programme für die fischertechnik-Interfaces und -konstruktionskästen
  
ftComputing.de
Home
Back
Sitemap
Index
Links
Impressum
Mail
 

Das Visual Basic 6 Programm mit FishFa50.OCX

Der LLWin Terminal Baustein wurde durch eine VB Form ersetzt in die auch die Auswahl des Interface-Anschlusses integriert wurde. Nun die VB-Lösung zum LLWin Hauptprogramm :

Private Sub cmdAction_Click()

  If ft.OpenInterface(cboPortName.Text) = ftifehler Then
    MsgBox "InterfaceProblem", vbCritical + vbOKOnly, App.ProductName
    Exit Sub
  End If

  Home

  lblStatus = "Schacht Rechts"
  ft.SetMotor mSchlitten, ftiRechts
  ft.WaitForChange eSchlittenImpuls, 20
  ft.SetMotor mSchlitten, ftiAus
  Schieber Val(txtSchacht3)

  lblStatus = "Schacht Mitte"
  ft.SetMotor mSchlitten, ftiRechts
  ft.WaitForChange eSchlittenImpuls, 75
  ft.SetMotor mSchlitten, ftiAus
  Schieber Val(txtSchacht2)

  lblStatus = "Schacht Links"
  ft.SetMotor mSchlitten, ftiRechts
  ft.WaitForChange eSchlittenImpuls, 70
  ft.SetMotor mSchlitten, ftiAus
  Schieber Val(txtSchacht1)

  ft.CloseInterface
  lblStatus = "---Finis---"
  cmdEnde.SetFocus

End Sub

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 :

Private Sub Schieber(ByVal Anzahl&)
Dim i&

  lblStatus = "Münzausgabe"
  For i = 1 To Anzahl
    ft.SetMotor mSchieber, ftiLinks
    ft.WaitForInput eSchieberVorn, False
    ft.SetMotor mSchieber, ftiRechts
    ft.WaitForInput eSchieberHinten, False
    ft.SetMotor mSchieber, ftiAus
  Next i

End Sub

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 :

Private Sub Home()

  lblStatus = "Home"
  ft.SetMotor mSchieber, ftiRechts
  ft.WaitForInput eSchieberHinten, False
  ft.SetMotor mSchieber, ftiAus
  ft.SetMotor mSchlitten, ftiLinks
  ft.WaitForInput eSchlittenEnde, True
  ft.SetMotor mSchlitten, ftiAus

End Sub

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 : Betragsausgabe

Bislang 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 :

Private Sub Stueckelung(ByVal Betrag&, Z200&, Z100&, Z50&)

  Z200 = 0
  Do While Betrag - 200 >= 0
    Betrag = Betrag - 200
    Z200 = Z200 + 1
  Loop

  Z100 = 0
  Do While Betrag - 100 >= 0
    Betrag = Betrag - 100
    Z100 = Z100 + 1
  Loop

  Z50 = 0
  Do While Betrag - 50 >= 0
    Betrag = Betrag - 50
    Z50 = Z50 + 1
  Loop

End Sub

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 :

Private Sub cmdAction_Click()
Dim Z200&, Z100&, Z50&

.....

  Stueckelung Val(txtBetrag), Z200, Z100, Z50

  lblStatus = "Schacht Rechts"
  ft.SetMotor mSchlitten, ftiRechts
  ft.WaitForChange eSchlittenImpuls, 18
  ft.SetMotor mSchlitten, ftiAus
  Schieber Z200

......

End Sub

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.