Сменщик инструмента на станке 6р13ф
Общая схема
Сменщик будет реализован на базе компонента python - для сменщика не требуется жесткий real-time поэтому можем использовать python.
Компонент
#!/usr/bin/python import hal, time h = hal.component("passthrough") h.newpin("tool-change", hal.HAL_BIT, hal.HAL_IN) h.newpin("tool-changed", hal.HAL_BIT, hal.HAL_OUT) h.newpin("tool-prep-number", hal.HAL_S32, hal.HAL_IN)
h.newpin("kantovatel", hal.HAL_BIT, hal.HAL_IN) h.newpin("manipulator", hal.HAL_BIT, hal.HAL_IN) h.newpin("got-instrument", hal.HAL_BIT, hal.HAL_IN)
h.newpin("kantovatel-move", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("reset", hal.HAL_BIT, hal.HAL_IN)
h.newpin("error", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("state", hal.HAL_S32, hal.HAL_OUT)
h.ready() import subprocess
def error(n,msg="") subprocess.Popen(['zenity', '--error', '--text="Ошибка %s %s"'%(n,msg)]) h["error"] = True
try: while 1: if h["reset"] : h["error"] = False
if h["tool-change"] and not last_tool_change : # начало смены инструмента h["tool-changed"] = False if not h["kantovatel"] : # проверяем датчик кантователя error(57, "Kantovatel") if not h["manipulator"] : # проверяем датчик кантователя error(71, "Manipulator") if not h["spindle-at-change"] : # проверяем датчик кантователя error(72, "---") if not h["spindle-at-change"] : # проверяем датчик кантователя error(72, "---")
h["kantovatel-move"] = 1 # двигаем кантователь
timeout = time.time() + 10 while not h["got-instruiment"] : # ждем захват инструмента, таймаут 10 секунд - если не взяли - ошибка time.sleep(0.1) if timeout > time.time() : error(0,"Timeout") break
last_tool_change = h["tool-change"]
time.sleep(0.1) except KeyboardInterrupt: raise SystemExit
Загрузка
loadusr tool_changer net