Forum: Mikrocontroller und Digitale Elektronik cctalk Münzautomat mit JAVA


von Marc M. (vished)


Lesenswert?

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

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

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?

von Christoph B. (christophbudelmann) Benutzerseite


Lesenswert?

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).

von Kaj G. (Firma: RUB) (bloody)


Lesenswert?

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.

von Marc M. (vished)


Lesenswert?

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.

: Bearbeitet durch User
von Kaj G. (Firma: RUB) (bloody)


Lesenswert?

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.

von Christoph B. (christophbudelmann) Benutzerseite


Lesenswert?

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.

von Kaj G. (Firma: RUB) (bloody)


Lesenswert?

Christoph B. schrieb:
> WH hat Münzprüfer mit USB-Anschluss
ok, das wusste ich nicht. Wir haben nur Azkoyen...

von Marc M. (vished)


Lesenswert?

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?

von Kaj G. (Firma: RUB) (bloody)


Lesenswert?

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.pdf

Marc 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 :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.