Hallo zusammen,
ich möchte gerne einen Münzautomat ansteuern.
Wichtig ist, dass ich irgendwo den Münzwert abspeichern kann.
Hat hier jemand Erfahrung mit cctalk und das mit JAVA ?
Ich würde gerne einen solchen Münzautomaten ansteuern:
http://www.whberlin.de/uploads/pics/EMP800_14v6_09.jpg
Ich freue mich über jede Hilfe.
Viele Grüße
Ein kurzes Googeln verrät, dass es mehrere unfertige oder rudimentäre
ccTalk Java Bibliotheken gibt. Hast du die von mal ausprobiert?
Wenn ja, und die taugen nichts, hast du zumindest die Hardware und
Treiber für ccTalk? Vorher muss man sich nicht über Java unterhalten.
Und dann, hast du eine JNA oder JNI Interface zum Treiber / der
Hardware?
Das Ganze hat erstmal nichts mit Java im Speziellen zu tun, daher hier
mal die Basics:
Das ccTalk-Protokoll kann man sich hier herunterladen:
http://www.cctalk.org/
Für den Anfang reichen eigentlich drei Befehle aus, wenn es nur um einen
Münzprüfer geht:
231: Modify Inhibit Status (setzt eine Annahme-Maske (welche Münzen
dürfen angenommen werden))
228: Modify Master Inhibit Status (wie 231, nur globales Flag verundet
mit den einzelnen Inhibit-Bits))
229: Read Buffered Credit or Error Codes (liefert die eingeworfenen
Münzen zurück)
Die Befehle kann man auch erstmal nur über ein Terminal-Programm an den
Münzprüfer schicken und danach in Java implementieren.
Man muss nur beachten, dass ccTalk Halb-Duplex-Betrieb mit 5V-Pegeln
macht. Zum Anschluss an eine RS232-Schnittstelle ist also noch ein
Konverter nötig (entweder gleich mitbestellen oder nach "RS232 ccTalk
converter" suchen und selber bauen).
ccTalk kenn ich, hab ein paar Slaves nachprogrammiert.
Das Protokoll von Hand zu implementieren ist super einfach. Alles was du
da in Java brauchst, ist eigentlich nur eine Lib um auf die serielle
Schnittstelle zuzugreifen.
Christoph B. schrieb:> Man muss nur beachten, dass ccTalk Halb-Duplex-Betrieb
Richtig, das Halb-Duplex muss man beachten, der rest ist ziemlich
einfach.
Marc M. schrieb:> Münzautomat
Genaugenommen ist es ein Muenzpruefer :)
Das Protokoll ist immer so aufgebaut:
1
[Zieladresse][Anzahl der Datenbytes][Quelladresse][Kommando][Checksumme]
1
0x04 0x00 0x01 0xFE 0xFB
Ziel: Slave mit Adresse 0x04
Anzahl der Datenbytes: 0
Absender: 0x01
Kommando: 0xFE
Checksumme: 0xFB
Ist die Anzahl der Datenbytes != 0, so stehen die Datenbytes zwischen
dem Kommando und der Checksumme
1
[Zieladresse][Anzahl der Datenbytes][Quelladresse][Kommando][Datenbytes][Checksumme]
Das was der Master sendet und was der Slave antwortet ist also immer
(naja, fast immer. Es gibt ein oder zwei kommandos wie die antwort
kuerzer ist) mind. 5 Byte lang, und maximal 5 + 255 Datenbytes lang.
Wir reden hier immer ueber Byte = 8 Bit!
Die Adressen (Ziel/Absender) sind bytes, gehen also von 0 bis 255.
anzahl der Datenbytes: 0-255, Kommando: 0-255 usw.
Christoph B. schrieb:> Für den Anfang reichen eigentlich drei Befehle aus, wenn es nur um einen> Münzprüfer geht:
Ich wuerde die 230 mit nehmen, um zu pruefen, ob der Status wirklich
gesetzt wurde. 209 & 210 koennte man auch mitnehmen.
Hallo,
erstmal vielen Dank für die schnelle Antworten.
Noch eine Ergänzung zunächst: Der Münzautomat soll über USB laufen, also
nicht über RS232.
Da ich noch nicht viel von der Thematik verstehe, wollte ich zunächst
prüfen/fragen, ob das überhaupt mit JAVA möglich ist. bevor ich den
Münzprüfer überhaupt kaufe.
Wo finde ich diese rudimentäre ccTalk Java Bibliotheken
Welche Schritte sind meinerseits notwendig?
1) Zuerst benötige ich das oben genannten Modell natürlich (EMP800)
2) Herunterladen des ccTalk Protokoll ?
3) ...
Was genau macht das ccTalk Protokoll? Ist das quasi dazu da, dass wenn
eine Münze eingeworfen wird, dass dann ein Befehl ausgeführt wird?
Vielen Dank für jede Hilfe.
Marc M. schrieb:> Der Münzautomat soll über USB laufen, also> nicht über RS232.
USB-Seriell-Wandler dazwischen. Der Muenspruefer braucht aber eine
eigene Spannugsversorgung, den kannst du nicht ueber USB mit Strom
versorgen. Kann sein, dass der 12V als Spannungsversorgung braucht, aber
ist ja dem Datenblatt des Herstellers zu entnehmen.
Marc M. schrieb:> 2) Herunterladen des ccTalk Protokoll ?
Du solltest dir die Spezifikationen anschauen, ja, denn da steht drin,
welche Befehle es gibt, und welche Antworten darauf zu erfolgen haben.
Marc M. schrieb:> Was genau macht das ccTalk Protokoll?
Es ist einfach nur ein Protokoll, was regelt, wer, wann, wie redet bzw.
wie die nachrichten aufgebaut sind. Das hab ich ja oben dargestellt.
Marc M. schrieb:> Ist das quasi dazu da, dass wenn> eine Münze eingeworfen wird, dass dann ein Befehl ausgeführt wird?
Nein! Das Protokoll hat nichts damit zu tun, was du tust, wenn eine
Muenze eingeworfen wird.
Du wirfst eine Mueze ein, und der Muenzpruefer registriert das. Punkt,
mehr nicht. Der Muenzprueffer, und auch Hopper, sind die Slaves. Du
bist der Master.
Entsprechend dem Master-Slave-Prinzip halten die Slaves solange die
Klappe, bis du sie was fragst.
Wenn du als Master also wissen moechtest, ob eine Muenze eingeworfen
wurde, musst du den Slave frage:
Hallo Muenzpruefer, wurde eine Muenze eingeworfen?
Darauf kann der Muenzprufer nun mit Nein antworten, oder er Antwortet
mit einem Ja, und sagt dir auch, was fuer eine Muenze eingeworfen wurde.
Vielleicht erkennst du jetzt schon: Wenn du etwas wissen willst, musst
du aktiv anfragen, d.h. du musst deine Slaves die ganze Zeit pollen.
Natuerlich kannst du nicht so schnell pollen wie dein PC das hergibt,
denn durch die Halb-Duplex-Uebertragung musst du immer auf eine Antwort
warten.
Marc M. schrieb:> wollte ich zunächst> prüfen/fragen, ob das überhaupt mit JAVA möglich ist.
Natuerlich. Das kannst du auch gerne in Assembler machen, wenn du lust
darauf hast :)
Du brauchst zugriff auf einen Seriellen Port/Usb-Port und du musst ein
bisschen Bitmanipulation betreiben. sollte also in jeder Sprache gehen.
C/C++, Python, Java, C#,... such dir was aus :)
Marc M. schrieb:> Was genau macht das ccTalk Protokoll? Ist das quasi dazu da, dass wenn> eine Münze eingeworfen wird, dass dann ein Befehl ausgeführt wird?
Neben ccTalk gibt es noch das MDB-Protokoll - Multi-Drop-Bus - das ist
aber... naja, schon ziemlich kacke. Da wird, soweit ich weiss, mit 9 bit
statt mit 8 bit uebertragung gearbeitet. Das bringt mal ganz andere
Probleme mit sich...
Stell dir das alles mal nicht zu kompliziert vor. das Protokoll regelt
nur wie eine Nachricht auszusehen hat und wie die uebertragen wird, mehr
nicht.
Was du dann tust, wenn du als Antwort z.B. ein 0xCD bekommst, hat nichts
mit dem Protokoll zu tun, zumindestens solange du Master bist.
Kaj G. schrieb:> Marc M. schrieb:>> Der Münzautomat soll über USB laufen, also>> nicht über RS232.> USB-Seriell-Wandler dazwischen.
WH hat Münzprüfer mit USB-Anschluss, da wird kein USB-Seriell-Wandler
mehr benötigt. Ich weiß aber nicht, ob die dann einfach nur einen
virtuellen COM-Port emulieren oder spezielle Treiber benötigen. Das
steht aber im Datenblatt des Münzprüfers mit Sicherheit drin und
ansonsten hat WH auch einen guten Support. Wir setzen immer nur
Münzprüfer mit ccTalk direkt ein.
Von MDB würde ich auch erstmal die Finger lassen. Wir haben das zwar
komplett implementiert in unserem Software-Stack, aber wenn es nur um
einen Münzprüfer geht, ist ccTalk einfacher und schneller umzusetzen.
Vielen Dank für die weiteren Antworten.
So langsam kommt Lichts ins Dunkle.
Was mir allerdings noch unklar ist, wie programmiere ich generell den
Münzautomaten?
Ich meine damit: irgendwie muss ich dem Münzautomat ja sagen, welche
Münzen er annehmen darf, wie die Münzgröße ist usw.?
In der Beschreibung des Münzautomaten wird hierbei von einer Software
gesprochen: wheasy 4 - wird das damit gemacht?
Zusätzlich habe ich dann mein JAVA Programm am Laufen, welches mir dann
quasi alle x Sekunden (oder wie auch immer eingestellt) prüft, ob es
eine neue Münze gibt etc.?
Ist das so korrekt?
Marc M. schrieb:> Was mir allerdings noch unklar ist, wie programmiere ich generell den> Münzautomaten?
Gar nicht. Der Münzprüfer enthält eine Firmware, die genau das macht,
was sie machen soll.
Wenn du genug von den Dingern kaufst, kannst du dem Hersteller ein paar
vorgaben zu dem Protokollablauf machen, der Hersteller setzt das dann
um, und flasht das ganze.
Der Münzprüfer ist für dich eine Blackbox, die einfach so funktioniert.
Anschließen, befehle senden und auf antwort warten. Fertig :)
Marc M. schrieb:> wie die Münzgröße ist usw.?
Die Münzgröße ist dem Münzprüfer bekannt, oder glaubst du, du musst dem
Teil sagen, welchen durchmesser die Münzen haben? Vergiss das ganz
schnell wieder. Der Münzprüfer weiß alles, was er über Münzen wissen
muss.
Marc M. schrieb:> irgendwie muss ich dem Münzautomat ja sagen, welche> Münzen er annehmen darf, wie die Münzgröße ist usw.?> In der Beschreibung des Münzautomaten wird hierbei von einer Software> gesprochen: wheasy 4 - wird das damit gemacht?
Ja, kann sein, dass du damit noch ein paar einstellungen an dem
Münzprüfer vornehmen kannst.
http://www.crownleisure.co.uk/Documents/Manuals/WH%20Munzprufer/WHTools/program%20files/whTools%204/Doc/wheasy%204%20%20Kurzanleitung.pdfMarc M. schrieb:> Zusätzlich habe ich dann mein JAVA Programm am Laufen, welches mir dann> quasi alle x Sekunden (oder wie auch immer eingestellt) prüft, ob es> eine neue Münze gibt etc.?
Jap. Wobei es da (im echten leben, also in entsprechenden Automaten)
noch mehr zu prüfen gibt.
Marc M. schrieb:> Ist das so korrekt?
Im großen und ganzen: ja :)