Moin
Also ich hab mir auch eine kleine Controllerplatine gefrickelt.
http://sebastians-site.de/homepage/e...schneider.html
Die redet über RS232 mit nem EMC Hal Modul, was ich in Phyton geschrieben hab.
Ist leider nicht kommentiert (Schande über mich), aber ich denke man kann erkenne worauf es hinaus läuft.Code:#!/usr/bin/python ### # # EMC hal modul for hot-needle-cutter # Sebastian Schumb 2009 (www.sebastians-site.de) # ### import hal, time, serial hc = hal.component("hot_needle") hc.newpin("temp_setpoint", hal.HAL_FLOAT, hal.HAL_IN) hc.newpin("temp_value", hal.HAL_FLOAT, hal.HAL_OUT) hc.newpin("mc_ready", hal.HAL_BIT, hal.HAL_OUT) hc.newpin("temp_ready", hal.HAL_BIT, hal.HAL_OUT) hc.ready() ser = serial.Serial('/dev/ttyS1', 9600, timeout=0.2) try: while 1: hc['mc_ready'] = False hc['temp_ready'] = False while ser.read(4) != 'ackn': ser.write("init") hc['mc_ready'] = True retries = 0 while retries <= 5: time.sleep(0.1) sp = str(int(hc['temp_setpoint'] * 10)+1) sp = sp.rjust(4,'0') ser.write(sp) while ser.read(4) != 'ackn' and retries <= 5 : ser.write(sp) retries += 1 if retries <= 5: retries = 0 ret = ser.read(4) while not ret.isdigit() and retries <= 5 : ret = ser.read(4) retries += 1 if retries <= 5: retries = 0 ser.write('ackn') if ret.isdigit() : retf = float(ret) / 10; hc['temp_value'] = retf if retf >= hc['temp_setpoint']: hc['temp_ready'] = True else : hc['temp_ready'] = False except KeyboardInterrupt: raise SystemExit
Mittlerweile weiß ich auch von Zustandsautomaten und wie man die für sowas benutzt.
Von daher sollte ich es noch mal in elegant schreiben, wenn ich zeit habe.
An sich wird so kommuniziert :
Das wiederholt sich kontinuierlich, weil so merkt einerseits EMC sofort wenn der uC tot ist und dann wird über den mc-ready Pin der Notaus von EMC getriggert.Code:Modul : init uC zurücksetzen uC : ackn acknowledge Modul : 2578 Soll-Temperatur (257,8°C) uC : ackn uC : 2380 Ist-Temperatur (238,0°C) Modul : ackn Modul : 2578 Soll-Temperatur (257,8°C) Siehe oben.
Andererseits merkt uC wenn die Verbindung weg ist und schaltet erstmal die Heizung ab.
Man hätte auch eine Art keep-Alive Paket machen können, aber so gehts auch.
Ich hab irgendwann einmal mit M-Code-Scripten rumgespielt um die Temperatur setzen zu können.
Aber die sind irgendwo vergaben.
Gruß
Sebastian







Zitieren


Lesezeichen