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.
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
Ist leider nicht kommentiert (Schande über mich), aber ich denke man kann erkenne worauf es hinaus läuft.
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 :
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.
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.
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
Lesezeichen