121 lines
3.2 KiB
Python
121 lines
3.2 KiB
Python
#!/usr/bin/python3
|
|
import getopt
|
|
import hal
|
|
import sys
|
|
import comms
|
|
import time
|
|
|
|
class HalAdapter:
|
|
def __init__(self, name):
|
|
self.hal = hal.component(name) # instanciate the HAL-component
|
|
self.hal.newpin("ref-temp", hal.HAL_U32, hal.HAL_IN)
|
|
self.hal.newpin("enable", hal.HAL_BIT, hal.HAL_IN)
|
|
self.hal.newpin("curr-temp", hal.HAL_U32, hal.HAL_OUT)
|
|
self.hal.newpin("ref-temp-out", hal.HAL_U32, hal.HAL_OUT)
|
|
|
|
self.hal.ready()
|
|
|
|
def setReady(self):
|
|
self.hal.ready()
|
|
|
|
def readHAL_refTemp(self):
|
|
"""read values from LinuxCNC HAL"""
|
|
return self.hal['ref-temp']
|
|
|
|
def readHAL_enable(self):
|
|
"""read values from LinuxCNC HAL"""
|
|
return self.hal['enable']
|
|
|
|
def writeHAL_currTemp(self, val):
|
|
""" write internal wrapper pin values to LinuxCNC HAL """
|
|
self.hal['curr-temp'] = val
|
|
|
|
def writeHAL_refTemp(self, val):
|
|
""" write internal wrapper pin values to LinuxCNC HAL """
|
|
self.hal['ref-temp-out'] = val
|
|
|
|
class TempControllerFacade:
|
|
def __init__(self, port):
|
|
self.tempController = comms.instrument(port, self.msgHandler) #serial adaptor
|
|
self.currTemp = 100
|
|
self.refTemp = 100
|
|
self.enable = False
|
|
|
|
def __repr__(self):
|
|
return 'curr temp: ' + str(self.currTemp) + ', ref temp: ' + str(self.refTemp) + ' , enabled; ' + str(self.enable) + '\n'
|
|
|
|
def msgHandler(self, m):
|
|
if (m.name == 'mv'):
|
|
self.currTemp = int(m.data)
|
|
|
|
def setEnable(self, en):
|
|
self.enable = en
|
|
print('extruder temp controller enable: ' + str(self.enable))
|
|
|
|
if en == True:
|
|
self.tempController.writeMessage(comms.Message('en' , '1'))
|
|
else:
|
|
self.tempController.writeMessage(comms.Message('en' , '0'))
|
|
|
|
|
|
def setRefTemp(self, refT):
|
|
if self.enable == True:
|
|
if self.refTemp != refT:
|
|
self.tempController.writeMessage(comms.Message('sp' , str(refT)))
|
|
self.refTemp = refT
|
|
|
|
|
|
def main():
|
|
name = 'my-extruder'
|
|
port = '/dev/ttyUSB0' # default serial port to use
|
|
|
|
try:
|
|
opts, args = getopt.getopt(sys.argv[1:], "hp:c:", ["port="])
|
|
except getopt.GetoptError as err:
|
|
# print help information and exit:
|
|
print(err) # will print something like "option -a not recognized"
|
|
sys.exit(2)
|
|
|
|
for o, a in opts:
|
|
if o == "-h":
|
|
sys.exit()
|
|
if o == "-c":
|
|
name = a
|
|
elif o in ("-p", "--port"):
|
|
port = a
|
|
else:
|
|
print(o)
|
|
assert False, "unhandled option"
|
|
|
|
h = HalAdapter(name)
|
|
tc = TempControllerFacade(port)
|
|
#tc.setEnable(True)
|
|
|
|
print(tc)
|
|
|
|
try:
|
|
while 1:
|
|
tc.tempController.readMessages()
|
|
|
|
if h.readHAL_enable() == 1:
|
|
if tc.enable == False:
|
|
tc.setEnable(True)
|
|
else:
|
|
if tc.enable == True:
|
|
tc.setEnable(False)
|
|
|
|
if tc.enable == True:
|
|
refTemp = h.readHAL_refTemp()
|
|
tc.setRefTemp(refTemp)
|
|
|
|
h.writeHAL_currTemp(tc.currTemp)
|
|
h.writeHAL_refTemp(tc.refTemp)
|
|
#
|
|
time.sleep(1)
|
|
|
|
except KeyboardInterrupt:
|
|
raise SystemExit
|
|
|
|
if __name__ == '__main__':
|
|
main()
|