Liebes Forum, für einen Versuchsaufbau muss ich die Vorgaben des Laserschutzbeauftragten erfüllen. Dazu habe ich mir gedacht, meine Laserquellen (1x Thorlabs KLS635 und 3x Thorlabs TLS001) per USB mit einem Raspi oder Ähnlichem zu verbinden und ihnen per "USB-Befehl" gemäß dem (angehängten) Communications Protocol eine definierte Leistung zuzuweisen. Darüber hinaus möchte ich ebenfalls mittels Befehl die Bedienung auf Software-only ändern, damit niemand Schabernack mit den Drehreglern spielen kann. Nach einigem Rumprobieren, komme ich allerdings auf keinen grünen Zweig mit dem "Versenden" der Befehle. Meines Erachtens nach sollte es doch reichen, die PID und VID jeder Laserquelle auszulesen und dann mithilfe der python-usblib die angegebenen Messages zu verschicken oder? Oder übersehe ich da etwas grundsätzliches mit dem FTDI? Danke schon mal für Eure Hilfe!
:
Verschoben durch Moderator
Wenn da ein FT232 drin ist, sollte das eher über pySerial als über die USB-Lib gehen, da das ding eine virtuelle serielle Schnittstelle darstellt.
Hallo Sebastian, Danke für Deine schnelle Antwort. ich habe mich gerade daran versucht scheitere ich scheinbar bei den Messages:
1 | import serial |
2 | s = serial.Serial('/dev/ttyUSB0 ', 115200) |
3 | identify =b"x23/x02/x00/x00/x50/x01" |
4 | s.write(identify) |
Damit habe ich versucht das Geräte zur Identifikation blinken zu lassen (siehe Comm.-Protocoll S.40). Der write Befehl gibt 23 zurück, was ja die Anzahl der gesendeten Bytes sein müsste - das verwirrt mich wiederrum, da ich ja eigentlich nur 6 Bytes mitschicke. Wie würdest Du nun weiter vorgehen?
Du musst den Bytes als Hexadezimalzahl ein \x (Backslash x) voranstellen:
1 | ... |
2 | identify =b"\x23\x02\x00\x00\x50\x01" |
3 | ... |
Richtig encodiert sind das dann nun auch nicht 24 (in Deinem Code 23), sondern lediglich 6 Bytes.
Beitrag #5990215 wurde von einem Moderator gelöscht.
Hallo Sönke, vielen Dank! Das hat zumindest damit geklappt. Nun kann ich das Gerät immerhin schon mal blinken lassen. Auch Laser enable/disable klappt, aber leider schaffe ich es nicht ihm eine Leistung einzustellen (siehe S.255ff MGMSG_SET_PARAMS 0x0800). Mein Laser hat maximal 8mW, damit sollte ja nach Anleitung ein Wert von 0x1000 = 1mW eingestellt werden ... nach littleEndian sind das am Ende der Message ja die Bytes \x00\x10, oder? Ich habe es mit folgender Message probiert:
1 | setPower = b"\x00\x08\x04\x00\xD0\x01\x01\x00\x00\x10" |
2 | s.write(setPower) |
Danach macht der Controller aber leider nichts mehr und lässt sich auch nicht mehr weiter ansteuern (identify oder ähnliches)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.