Ich besitze einen Casio Taschenrechner, der über ein Kabel mit dem seriellen Port eines Computers Daten austauschen kann. Mit Hilfe des von Casio stammenden Windows-Programms funktioniert das.
Es gibt für Linux cafix und gafix, zwei Programme, die das ebenfalls leisten sollen, allerdings nicht für mein Modell. Der Versuch der Datenübertragung endet nach ca. 1 Sekunde mit einer allgemeinen Fehlermeldung auf dem TR-Display.
Ich habe nun - mal ganz naiv - mittels pyserial versucht, die Daten, die der TR beim Übertragen schickt, aufzusammeln, in der Hoffnung diese analysieren und dann selbst ein entsprechendes Programm schreiben zu können.
Diese Versuche enden im Prinzip so, wie die mit cafix/gafix: Fehlermeldung des TR. Vorher konnte ich eine Handvoll Bytes aufsammeln, die mir aber nicht weiterhelfen.
Meine Vermutung ist - auch ganz naiv -, dass der TR beim Übertragen (zunächst einmal nur TR -> PC) eine Kennung sendet und das Programm auf dem Computer eine entsprechende Kennung zurücksendet um anzuzeigen, dass Daten übertragen werden können. Da ich nicht weiß, was der TR vom PC erwartet, komme ich da nicht weiter.
Wenn es gelänge - auch ganz naiv gedacht -, den Port bei einer funktionierenden Übertragung durch das Windowsprogramm zu belauschen und die übertragenen Daten zu sammeln, dann käme ich damit vielleicht weiter. Ob so ein Belauschen (mit einfachen Mitteln) möglich ist, weiß ich nicht.
Das ganze ist nicht lebenswichtig, das Casio-Programm läuft auch unter wine, so dass mir eine Übertragung grundsätzlich möglich ist. Es wäre aber eine reizvolle Sache, so ein Programm mit Python selbst zu entwickeln.
Und jetzt die Frage: Wie stehen aus Expertensicht die Chancen, das zu realisieren?
Kommunikation mit Taschenrechner via pyserial
Hallo!
Ich bin neu hier.
Das heisst, so ganz neu nicht.
Ich lese schon ein Jahr mit.
Finde die Beiträge hier sehr produktiv und
die Kentnisse der Betreiber und Poster hervorragend. Grosses Lob!!
Ihr habt mir schon viel geholfen.
Zum Taschenrechner:
Wenn es erst mal geht, würde ich unter Windows
mit dem Programm portmon den Datenverkehr mitschneiden.
So ein Programm gibts bestimmt auch unter Linux.
Dann muss man die Bytes, na ja, entschlüsseln.
Geht ja nicht anders. Allerdingst haben die Geräte, mit denen
ich per pySerial kommuniziert habe, immer "lesbare" Kommandos
gehabt.
Achtung beim Datenempfang per pySerial.
evtl muss man jedes Zeichen einzeln vom COM-Port abholen
und die Strings wieder zusammensetzten.
Gruss
pyFan
Ich bin neu hier.
Das heisst, so ganz neu nicht.
Ich lese schon ein Jahr mit.
Finde die Beiträge hier sehr produktiv und
die Kentnisse der Betreiber und Poster hervorragend. Grosses Lob!!
Ihr habt mir schon viel geholfen.
Zum Taschenrechner:
Wenn es erst mal geht, würde ich unter Windows
mit dem Programm portmon den Datenverkehr mitschneiden.
So ein Programm gibts bestimmt auch unter Linux.
Dann muss man die Bytes, na ja, entschlüsseln.
Geht ja nicht anders. Allerdingst haben die Geräte, mit denen
ich per pySerial kommuniziert habe, immer "lesbare" Kommandos
gehabt.
Achtung beim Datenempfang per pySerial.
evtl muss man jedes Zeichen einzeln vom COM-Port abholen
und die Strings wieder zusammensetzten.
Gruss
pyFan
Hallo pyFan, willkommen im Forum!pyFan hat geschrieben:Wenn es erst mal geht, würde ich unter Windows
mit dem Programm portmon den Datenverkehr mitschneiden.
So ein Programm gibts bestimmt auch unter Linux.
Danke für den Hinweis auf portmon. Leider läuft das Programm unter wine nicht, einen Windowsrechner habe ich gerade nicht zur Hand. Für Linux gibt es jpnevulator, mit dem man am seriellen Port schnüffeln kann. Im Prinzip scheint es auch zu funktionieren, jpnevulator laufen zu lassen und dann mit dem funktionierenden Casio-Programm unter wine die Daten zu übertragen. Leider nur "im Prinzip", denn der TR scheint es irgendwie zu merken, dass er belauscht wird und meldet wieder die schon bekannte Fehlermeldung. Es kommen also die im ersten Post schon erwähnten paar Byte, die ich auch mit pyserial aufschnappen konnte und dann bricht die Verbindung ab.
Hallo numerix
Ich nehme an du hast das Internet schon nach Angaben betreffs dem Übertragungsprotokoll für den Casio-TR durchsucht?
Habe noch diverse Fragen:
1) Musst du auf dem Casio irgend etwas einschalten damit die Kommunikation TR<->PC funktioniert oder versucht der TR selber eine Kommunkation zu starten sobald etwas an seine serielle Schnittstelle angeschlossen wird?
2) Wie sieht die Schnittstelle zu deinem Rechner aus? Hast du ein USB-Port, welches über ein USB-Seriellkonverter mit dem Casio-TR verbunden ist?
3) Ist der Byte-Stream TR->PC immer der gleiche bis es zum Abbruch kommt? Wieviele Bytes sind es etwa?
4) Was ist die genaue Bezeichnung des Casio-TR?
Gruss wuf
P.S. Eventuell hilft dieser Link:
http://users.telenet.be/gp/casio/
unter Rubrik:
25.03.2001 : Communication between Casio & PC updated.
Ich nehme an du hast das Internet schon nach Angaben betreffs dem Übertragungsprotokoll für den Casio-TR durchsucht?
Habe noch diverse Fragen:
1) Musst du auf dem Casio irgend etwas einschalten damit die Kommunikation TR<->PC funktioniert oder versucht der TR selber eine Kommunkation zu starten sobald etwas an seine serielle Schnittstelle angeschlossen wird?
2) Wie sieht die Schnittstelle zu deinem Rechner aus? Hast du ein USB-Port, welches über ein USB-Seriellkonverter mit dem Casio-TR verbunden ist?
3) Ist der Byte-Stream TR->PC immer der gleiche bis es zum Abbruch kommt? Wieviele Bytes sind es etwa?
4) Was ist die genaue Bezeichnung des Casio-TR?
Gruss wuf
P.S. Eventuell hilft dieser Link:
http://users.telenet.be/gp/casio/
unter Rubrik:
25.03.2001 : Communication between Casio & PC updated.
Take it easy Mates!
Ich bereite den TR vor, bis dieser beim nächsten Tastendruck sendet. Er erwartet, dass der PC/Software lauscht und den ankommenden Datenstrom verarbeitet. Dazu starte ich die Software und dort dann den "Empfangen"-Button, der per Status anzeigt, dass jetzt gelauscht wird. Sobald ich dann die TR-Taste drücke, schickt der TR die Daten los, das Programm zeigt dies per Statusbalken an.wuf hat geschrieben:1) Musst du auf dem Casio irgend etwas einschalten damit die Kommunikation TR<->PC funktioniert oder versucht der TR selber eine Kommunkation zu starten sobald etwas an seine serielle Schnittstelle angeschlossen wird?
Nein, serieller Port (COM1), unter Linux ist das /dev/ttyS0.wuf hat geschrieben:2) Wie sieht die Schnittstelle zu deinem Rechner aus? Hast du ein USB-Port, welches über ein USB-Seriellkonverter mit dem Casio-TR verbunden ist?
Nein. Im Bereich von 5-12 Byte.wuf hat geschrieben:3) Ist der Byte-Stream TR->PC immer der gleiche bis es zum Abbruch kommt? Wieviele Bytes sind es etwa?
Casio Algebra FX 2.0wuf hat geschrieben:4) Was ist die genaue Bezeichnung des Casio-TR?
Mittlerweile bin ich ein Stückchen weiter. Auf einem Windows-Rechner konnte ich mittels portmon den Datenverkehr "mitschneiden". Die log-Datei einer erfolgreichen Übertragung TR -> PC sieht so aus:
Code: Alles auswählen
0 0.00000640 FA123 VCOMM_EscapeCommFunction 0x0 0x700465 Unknown Func: 38
1 0.00071760 FA123 VCOMM_OpenComm COM1 SUCCESS
2 0.00000640 FA123 VCOMM_SetupComm COM1 SUCCESS RxSize: 4096 TxSize: 4096
3 0.23723760 FA123 VCOMM_SetCommState COM1 SUCCESS Mask: ffffffff Baud: 9600 Bits: 7 Stop: 1 Parity: Even
4 0.00000480 FA123 VCOMM_SetCommEventMask COM1 SUCCESS
5 0.00000560 FA123 VCOMM_EscapeCommFunction COM1 SUCCESS GETCOMBASEIRQ
6 0.00000640 FA123 VCOMM_PurgeComm COM1 SUCCESS Receive Queue
7 0.00000560 FA123 VCOMM_PurgeComm COM1 SUCCESS Transmit Queue
8 0.20988560 FA123 VCOMM_SetCommState COM1 SUCCESS Mask: ffffffff Baud: 65307 Bits: 8 Stop: 1 Parity: None
9 0.00001040 FA123 VCOMM_EscapeCommFunction COM1 SUCCESS SETDTR
10 0.00000720 FA123 VCOMM_ReadComm COM1 SUCCESS Length: 0:
11 0.00000560 FA123 VCOMM_ClearCommError COM1 SUCCESS NOERROR
# usw usw.
Außerdem habe ich einen Blick in die Quelltexte von (lib)cafix und gafix geworfen - leider alles in C bzw. z.T. in Perl; beides beherrsche ich nicht, so dass es für mich mühselig ist, zu verstehen, was genau da gemacht wurde. Hilfreich ist auf jeden Fall der sourcecode von gafix, weil da z.B. die ganzen Hexcodes in die entsprechenden Zeichen übersetzt werden.
Hallo numerix
Danke für deine Antwort. Hier noch etwas, welches ich aus Angaben vom Internet zusammengestellt habe:
http://users.telenet.be/gp/casio/
Rubrik:
26.05.2001 : The communication protocol for Graph 100 and Algebra FX2.0 is added.
FESTSTELLUNG:
Die Kommunikation startet scheinbar mit einer 0x16 und erwartet eine 0x13 zurück.
Gruss wuf
Danke für deine Antwort. Hier noch etwas, welches ich aus Angaben vom Internet zusammengestellt habe:
Habe ich gefunden unter:Code: Alles auswählen
COMMUNICATION GRAPH 100 AND ALGEBRA FX: -------------------------------------- Since I don't own a Graph 100 or an Algebra FX, this information isn't complete, but it should give you a good start. PORT SETTINGS: ------------- Set your COM-port to 1 startbit, 8 databits, no parity, 2 stopbits, 38400 baud TRANSMIT/RECEIVE: ---------------- The communication process doesn't change, whether you transmit to your calculator or receive from it. So the transmitter will be referred as T, and the receiver as R. Both calculator and PC can be T or R. SCHEME: ------ This is the main scheme, for details about MAINHEADER, FILEHEADER, DATA and END, see HEADERS -------------------------------------------- Transmit Receive -------------------------------------------- 1 | 16h | 2 | | 13h 3 | <MAINHEADER> | 4 | | <MAINHEADER> 5 | 6h | 6 | | 6h 7 | <FILEHEADER> | 8 | | 6h 9 | <DATA> | 10| | 6h 11| if there is still | data to be send, goto 3 | HEADERS: ------- In this table you can find the data each header contains. Only values with a 'h' are to interpreted as a hexadecimal value, all the others are ASCII tokens. All headers are 40 bytes long, except from DATA, which is variable. Checksum is the value that makes the modulus 256 of the sum of all bytes in the header equal to 3Ah (ie : the sum of each byte, including the checksum byte, is A ; when you divide A it by 256, the rest should be 3Ah). This is used to check that all data is received well. ----------------------------------------------- MAINHEADER FILEHEADER DATA END ----------------------------------------------- 3Ah 3Ah 3Ah 3Ah M M 00h E D C 00h N L S 00h D 1 1 00h 1 Z 00h 00h FFh X 00h 00h FFh 9 00h 00h FFh 4 Size High Byte 00h FFh 5 Size Low Byte 00h FFh FFh 00h 00h FFh 0 Name or FFh Data FFh 3 Name or FFh Data FFh 8 Name or FFh .... FFh 4 Name or FFh Data FFh 0 Name or FFh Data FFh 0 Name or FFh 00h FFh N Name or FFh Checksum FFh 1 Name or FFh FFh 2Eh FFh FFh 1 FFh FFh 0 FFh FFh 00h FFh FFh 00h FFh FFh 10h FFh FFh 00h FFh FFh 00h FFh FFh 00h FFh FFh 04h FFh FFh 00h FFh FFh 00h FFh FFh 00h FFh FFh 01h FFh FFh 00h FFh FFh 07h FFh FFh FFh FFh FFh FFh FFh FFh FFh FFh FFh FFh FFh FFh Checksum Checksum Checksum
http://users.telenet.be/gp/casio/
Rubrik:
26.05.2001 : The communication protocol for Graph 100 and Algebra FX2.0 is added.
FESTSTELLUNG:
Die Kommunikation startet scheinbar mit einer 0x16 und erwartet eine 0x13 zurück.
Gruss wuf
Take it easy Mates!
@wuf: Danke für deine Mühe. Bei nächster Gelegenheit werde ich mit den nun verfügbaren Informationen mal versuchen, ein Stück weiter zu kommen. Da dieses Programm auf meiner "ToDo" Liste aber eine niedrige Priorität hat, wird es wohl etwas dauern ...