Jump to content

assassin

Members
  • Gesamte Inhalte

    9
  • Benutzer seit

  • Letzter Besuch

assassin's Achievements

Newbie

Newbie (1/14)

0

Reputation in der Community

  1. Hallo, das habe ich auch schonmal gemacht, allerdings bleibt dann in der Konsole der raw_input stehen. Eben den will ich umgehen.
  2. Hallo, ich versuche ein Programm zu schreiben, dass beendet wird sobald von einem TF Aktuator ein Event eintritt. Im Moment nutze ich den Threshold von einem Poti dafür. Es klappt auch soweit, nur bleibt in der Konsole der raw_input stehen. Wie kann man das umgehen? Ich habe es mit einer while-Schleife probiert aber ich bekomme den Wert des Thresholds nicht in die Schleife. Wäre für Tipps sehr dankbar. Hier mein Code: HOST = "localhost" PORT = 4223 UID_TEMP = 'zv2' UID_OLED = 'Bgv' UID_ROTA = 'g5H' stop = 0.0 from tinkerforge.ip_connection import IPConnection from tinkerforge.bricklet_temperature import BrickletTemperature from tinkerforge.bricklet_rotary_poti import BrickletRotaryPoti from tinkerforge.bricklet_oled_128x64 import BrickletOLED128x64 import sys def cb_temperature(temperature): oled.write_line(0, 0, 'Temperature: ' + str(temperature/100.0) + ' C') def cb_position(position): oled.clear_display() ipcon.disconnect() if __name__ == "__main__": ipcon = IPConnection() t = BrickletTemperature(UID_TEMP, ipcon) rp = BrickletRotaryPoti(UID_ROTA, ipcon) oled = BrickletOLED128x64(UID_OLED, ipcon) ipcon.connect(HOST, PORT) t.register_callback(t.CALLBACK_TEMPERATURE, cb_temperature) t.set_temperature_callback_period(1000) rp.register_callback(rp.CALLBACK_ANALOG_VALUE_REACHED, cb_position) rp.set_debounce_period(100) rp.set_analog_value_callback_threshold('>', 3000.0, 4095) raw_input("Press key to exit\n")
  3. Hallo, das klingt stark nach Universität. Darf ich fragen welche? Gruß...
  4. Hallo, das mit den allergischen Reaktionen verstehe ich, ich kann da gerne aufklären. Es handelt sich um einen Mass Flow Controller (MFC), im Prinzip ein elektrisches Stellventil für Gasflüsse. Die Steuerung über RS232 ist meiner Meinung nach die preiswerteste (nicht die einfachste) Methode, da man so nur die Spannungsversorgung des Geräts plus die RS232 benötigt. Die Alternative wäre den analogen Ein- bzw. Ausgang des Gerätes plus die Spannungsversorgung zu nutzen. Das ist im Prinzip einfacher, benötigt aber eine Schnittstelle pro Regelgerät mehr. Daher versuche ich mein Glück über die serielle Schnittstelle. Schöne Grüße...
  5. Hallo, klappt prima. Muss jetzt den Code noch verstehen, habe es zunächst ohne zu denken getestet. Danke!
  6. Hallo, vom Prinzip her verstehe ich was du meinst. Da ich aber noch nicht mit Klassen gearbeitet habe, weiss ich nicht wie ich es umsetzen soll. Ich habe den Beispiel-Code von der TF-Seite nur minimal geändert. Ohne deinen Tipp bekomme ich immer noch reproduzierbar zwei getrennte Antworten. Wie kann ich deinen Vorschlag integrieren? Schöne Grüße und ich bin dankbar für jede Anregung... #!/usr/bin/env python # -*- coding: utf-8 -*- HOST = "localhost" PORT = 4223 UID = "uVr" # Change to your UID from tinkerforge.ip_connection import IPConnection from tinkerforge.bricklet_rs232 import BrickletRS232 # For this example connect the RX1 and TX pin to receive the send message # Convert string to char array with length 60, as needed by write def string_to_char_list(message): chars = list(message) chars.extend(['\0']*(60 - len(message))) return chars, len(message) # Assume that the message consists of ASCII characters and # convert it from an array of chars to a string def char_list_to_string(message, length): return ''.join(message[:length]) # Callback function for read callback def cb_read(message, length): s = char_list_to_string(message, length) print('Message (length: ' + str(length) + '): "' + s + '"') if __name__ == "__main__": ipcon = IPConnection() # Create IP connection rs232 = BrickletRS232(UID, ipcon) # Create device object ipcon.connect(HOST, PORT) # Connect to brickd # Don't use device before ipcon is connected rs232.set_configuration(9, 0, 1, 8, 0, 0) # Register read callback to function cb_read rs232.register_callback(rs232.CALLBACK_READ_CALLBACK, cb_read) # Enable read callback rs232.enable_read_callback() # Write "test" string rs232.write(*string_to_char_list(':06030401210120\r\n')) raw_input("Press key to exit\n") # Use input() in Python 3 ipcon.disconnect()
  7. Hallo, ich habe den Post oben nochmal geändert. Die Korrekte Meldung wird in zwei Strings geschnitten. Die Länge des "gesuchten" Strings ist 17 und mal wird in 9 und 8 und mal in 10 uns 7 geschnitten. Ich erhalte immer zwei Antworten aus dem Callback obwohl es nur eine sein dürfte.
  8. Hallo, ich versuche mit Python über das RS232 Bricklet einen MFC der Firma Bronkhorst anzusprechen. Nach längerem probieren, lesen und basteln habe ich das Kabel korrekt belegt und die ersten Tests gemacht. Wenn ich im BrickViewer den Sollwert als ASCII String anfrage (':06030401210120\r\n') erhalte ich im BrickViewer die korrekte Antwort (':06030201210000\r\n'). Wenn ich das Loopback Beispiel aus der Dokumentation des Bricklets anpasse, wird der String korrekt geschrieben und ich sehe im BrickViewer die korrekte Antwort. Wenn ich die Antwort über Python lesen möchte, erhalte ich ich allerdings immer zwei Antworten: (':', '0', '6', '0', '3', '0', '2', '0', '1', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00') ('2', '1', '0', '0', '0', '0', '\r', '\n', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00') Im BrickViewer kommt wiederum die korrekte Antwort als ganzes an. Der BrickViewer selbst ist auch in Python geschrieben, allerdings passt die Lese-Funktion dort nicht zu meinem Problem, da hier ein Schneiden bei '\r\n' in der Mitte abgefangen wird. Ich vermute so etwas wie ein Timing Problem, wäre aber für Anregungen sehr dankbar.
×
×
  • Neu erstellen...