есть же Естоп?
Аналогичным образом сделать другую "железную" кнопку, к входу в котрой в хал привязать halui.mdi-command-10(например), на который в ини задать запуск скрипта..
Код: Выделить всё
// sudo halcompile --install jogaxisget.comp
component jogaxisget "determines which axis jogging";
pin in bit Xin0 "axis.0.kb-jog-active";
pin in bit Xin1;
pin in bit Yin0 "axis.1.kb-jog-active";
pin in bit Yin1;
pin in bit Zin0 "axis.2.kb-jog-active";
pin in bit Zin1;
pin out bit Xtrigger ;
pin out bit Ytrigger ;
pin out bit Ztrigger ;
pin out bit activeX ;
pin out bit activeY ;
pin out bit activeZ ;
pin in bit Xverify =FALSE "axisui.Xisactive";
pin in bit Yverify =FALSE "axisui.Yisactive";
pin in bit Zverify =FALSE "axisui.Zisactive";
variable hal_bit_t prev_Xtrigger = FALSE;
variable hal_bit_t prev_Ytrigger = FALSE;
variable hal_bit_t prev_Ztrigger = FALSE;
license "GPL";
function _;
;;
FUNCTION(_) {
if (( Xin0 && !Xin1 ) || ( Xin1 && !Xin0 )) {/* XOR2 axisX */
Xtrigger = 1;
} else {
Xtrigger = 0;
}
if (( Yin0 && !Yin1 ) || ( Yin1 && !Yin0 )) {/* XOR2 axisY */
Ytrigger = 1;
} else {
Ytrigger = 0;
}
if (( Zin0 && !Zin1 ) || ( Zin1 && !Zin0 )) {/* XOR2 axisZ */
Ztrigger = 1;
} else {
Ztrigger = 0;
}
if(!!Xtrigger != !!prev_Xtrigger) /* Xtrigger has changed */
{
activeX = 1;
if(!!Xverify) {prev_Xtrigger = Xtrigger; activeX = 0;}
}
if(!!Ytrigger != !!prev_Ytrigger) /* Ytrigger has changed */
{
activeY = 1;
if(!!Yverify) {prev_Ytrigger = Ytrigger; activeY = 0;}
}
if(!!Ztrigger != !!prev_Ztrigger) /* Ztrigger has changed */
{
activeZ = 1;
if(!!Zverify) {prev_Ztrigger = Ztrigger; activeZ = 0;}
}
}
Код: Выделить всё
if hal_present == 1 :
ucomp = hal.component("axisui.user")
ucomp.newpin("activeX",hal.HAL_BIT,hal.HAL_IN)
ucomp.newpin("activeY",hal.HAL_BIT,hal.HAL_IN)
ucomp.newpin("activeZ",hal.HAL_BIT,hal.HAL_IN)
ucomp.newpin("Xisactive",hal.HAL_BIT,hal.HAL_IN)
ucomp.newpin("Yisactive",hal.HAL_BIT,hal.HAL_IN)
ucomp.newpin("Zisactive",hal.HAL_BIT,hal.HAL_IN)
ucomp.ready()
def fun(pin,act):
global flag
if pin:
if flag :
flag = 0
try:
act()
except:
print "except flag = ", flag
else:
flag = 1
def activate_axisX():
print "activate_axisX"
activate_axis(0)
def activate_axisY():
print "activate_axisY"
activate_axis(1)
def activate_axisZ():
print "activate_axisZ"
activate_axis(2)
def user_live_update():
if "xyzabcuvw".index(vars.current_axis.get())!=0:
fun(ucomp["activeX"],activate_axisX)
if "xyzabcuvw".index(vars.current_axis.get())!=1:
fun(ucomp["activeY"],activate_axisY)
if "xyzabcuvw".index(vars.current_axis.get())!=2:
fun(ucomp["activeZ"],activate_axisZ)
if "xyzabcuvw".index(vars.current_axis.get())==0:
ucomp["Xisactive"] = 1
ucomp["Yisactive"] = 0
ucomp["Zisactive"] = 0
if "xyzabcuvw".index(vars.current_axis.get())==1:
ucomp["Xisactive"] = 0
ucomp["Yisactive"] = 1
ucomp["Zisactive"] = 0
if "xyzabcuvw".index(vars.current_axis.get())==2:
ucomp["Xisactive"] = 0
ucomp["Yisactive"] = 0
ucomp["Zisactive"] = 1
Код: Выделить всё
loadrt jogaxisget
addf jogaxisget.0 servo-thread
net activeX jogaxisget.0.activeX axisui.user.activeX
net activeY jogaxisget.0.activeY axisui.user.activeY
net activeZ jogaxisget.0.activeZ axisui.user.activeZ
net axis:0:kb jogaxisget.0.Xin0 axis.0.kb-jog-active
net axis:1:kb jogaxisget.0.Yin0 axis.1.kb-jog-active
net axis:2:kb jogaxisget.0.Zin0 axis.2.kb-jog-active
net Xisactive jogaxisget.0.Xverify axisui.user.Xisactive
net Yisactive jogaxisget.0.Yverify axisui.user.Yisactive
net Zisactive jogaxisget.0.Zverify axisui.user.Zisactive
Код: Выделить всё
flag = 0
Код: Выделить всё
forget(widgets.homebutton, "halui.home-all")