Damit konnte Igor das erste mal mit neuer Steuerung bewegt werden. Wie gesagt es war nicht alles so linear wir hier dargestellt. Das ganze hier dient mir mehr oder weniger als Dokumentation, Falls ich sowas nochmal machen muss, auch welchem Grund auch immer. Aber mit all den Voran gegangen Schritten ließ sich das ganze Starten und Homen:

Mit dem Schritt können wir uns nun dem Werkzeugwechsel und dem Wechseltisch widmen. Probe Basic arbeitet normalerweise mit einem Karussell-Wechsler, der sich doch etwas anders Verhält als der Korbwechsler von Igor. Daher habe ich die Seite für den Werkzeugwechsel an meine Bedürfnisse angepasst und mich dabei an den Funktionen orientiert, die auch in der Sinumerik zur Verfügung standen

ATC Page

Die einzelnen Knöpfe mit den dazugehörigen Programmen werde ich hier durch gehen. Doch zuvor kommen noch zwei kleine Programme, die helfen Fehler zu vermeiden weil bestimmte Parameter nicht erreicht wurden waitfor liegt im $USER/bin/ Ordner:

#!/bin/bash
n=0
if [ $# != 2 ]; then
    echo usage: $0 SignalName DesiredValue
    exit 1
fi
signal=$1
value=$2

while :; do
    set -- $(halcmd -s show sig $signal)
    if [ x"$2" == x"$value" ]; then
        exit 0
    fi
    sleep 0.25
    if [ $n -gt 20 ]; then
        zenity --info --text "$signal hat nach $n Zyklen den Wert $value nicht erreicht"
    fi
    let "n++"
done


Fangen wir dem dem “ATC Manual Control Panel” hier haben wir mehr oder weniger die Komplette Steuerung der einzelnen Teilschritte, die für den Tisch und Werkzeugwechsel notwendig sind Jeweils der Knopf und das dazugehörige Programm dazu:

Drawbar loose - MDI Buttom - M110

#!/bin/bash
#Werkzeug lösen
halcmd sets o-tool-open true
waitfor i-tool-is-open TRUE
exit 0
Drawbar Tight - MDI Buttom - M111

#!/bin/bash
#Werkzeug spannen
halcmd sets o-tool-open FALSE
waitfor i-tool-is-open FALSE
exit 0

ATC UP - MDI Button - M113

#!/bin/bash
#Korb anheben

halcmd sets o-tool-basket-down FALSE
halcmd sets o-tool-basket-up TRUE
#waitfor i-tool-basket-is-down FALSE
waitfor i-tool-basket-is-up TRUE
halcmd sets o-tool-open FALSE
waitfor i-tool-is-open FALSE

exit 0
ATC Down - MDI Button - M112

#!/bin/bash
#Kor Absenken
halcmd sets o-tool-open true
waitfor i-tool-is-open TRUE
halcmd sets o-tool-basket-up FALSE
halcmd sets o-tool-basket-down TRUE
waitfor i-tool-basket-is-up FALSE
waitfor i-tool-basket-is-down TRUE
#halcmd sets o-tool-basket-down FALSE

exit 0
Arm Down - MDI Button M131 P#<Armnr>

#!/bin/bash
#Arm Absenken
P=$1
Q=$2
armnr=${P%.*}
waitfor i-tool-basket-is-down 	TRUE
halcmd sets o-tool-01-down	FALSE
halcmd sets o-tool-02-down	FALSE
halcmd sets o-tool-03-down	FALSE
halcmd sets o-tool-04-down	FALSE
halcmd sets o-tool-05-down	FALSE
halcmd sets o-tool-06-down	FALSE
halcmd sets o-tool-07-down	FALSE
halcmd sets o-tool-08-down	FALSE
halcmd sets o-tool-09-down	FALSE
halcmd sets o-tool-10-down	FALSE
halcmd sets o-tool-11-down	FALSE
halcmd sets o-tool-12-down	FALSE
halcmd sets o-tool-all-up   	TRUE
#
waitfor i-tool-01-is-down	FALSE
waitfor i-tool-02-is-down	FALSE
waitfor i-tool-03-is-down	FALSE
waitfor i-tool-04-is-down	FALSE
waitfor i-tool-05-is-down	FALSE
waitfor i-tool-06-is-down	FALSE
waitfor i-tool-07-is-down	FALSE
waitfor i-tool-08-is-down	FALSE
waitfor i-tool-09-is-down	FALSE
waitfor i-tool-10-is-down	FALSE
waitfor i-tool-11-is-down	FALSE
waitfor i-tool-12-is-down	FALSE
#
waitfor i-tool-01-is-up	TRUE
waitfor i-tool-02-is-up	TRUE
waitfor i-tool-03-is-up	TRUE
waitfor i-tool-04-is-up	TRUE
waitfor i-tool-05-is-up	TRUE
waitfor i-tool-06-is-up	TRUE
waitfor i-tool-07-is-up	TRUE
waitfor i-tool-08-is-up	TRUE
waitfor i-tool-09-is-up	TRUE
waitfor i-tool-10-is-up	TRUE
waitfor i-tool-11-is-up	TRUE
waitfor i-tool-12-is-up	TRUE
#
halcmd sets o-tool-all-up   	FALSE
#
echo $armnr
if [ $armnr = 1 ]; then
	halcmd sets o-tool-01-down	TRUE
	  waitfor i-tool-01-is-up	FALSE
	  waitfor i-tool-01-is-down	TRUE
	halcmd sets o-tool-01-down	FALSE
fi
#
if [ $armnr = 2 ]; then
	halcmd sets o-tool-02-down	TRUE
	  waitfor i-tool-02-is-up	FALSE
	  waitfor i-tool-02-is-down	TRUE
	halcmd sets o-tool-02-down	FALSE
fi
#
if [ $armnr = 3 ]; then
	halcmd sets o-tool-03-down	TRUE
	  waitfor i-tool-03-is-up	FALSE
	  waitfor i-tool-03-is-down	TRUE
	halcmd sets o-tool-03-down	FALSE
fi
#
if [ $armnr = 4 ]; then
	halcmd sets o-tool-04-down	TRUE
	  waitfor i-tool-04-is-up	FALSE
	  waitfor i-tool-04-is-down	TRUE
	halcmd sets o-tool-04-down	FALSE
fi
#
if [ $armnr = 5 ]; then
	halcmd sets o-tool-05-down	TRUE
	  waitfor i-tool-05-is-up	FALSE
	  waitfor i-tool-05-is-down	TRUE
	halcmd sets o-tool-05-down	FALSE
fi
#
if [ $armnr = 6 ]; then
	halcmd sets o-tool-06-down	TRUE
	  waitfor i-tool-06-is-up	FALSE
	  waitfor i-tool-06-is-down	TRUE
	halcmd sets o-tool-06-down	FALSE
fi
#
if [ $armnr = 7 ]; then
	halcmd sets o-tool-07-down	TRUE
	  waitfor i-tool-07-is-up	FALSE
	  waitfor i-tool-07-is-down	TRUE
	halcmd sets o-tool-07-down	FALSE
fi
#
if [ $armnr = 8 ]; then
	halcmd sets o-tool-08-down	TRUE
	  waitfor i-tool-08-is-up	FALSE
	  waitfor i-tool-08-is-down	TRUE
	halcmd sets o-tool-08-down	FALSE
fi
#
if [ $armnr = 9 ]; then
	halcmd sets o-tool-09-down	TRUE
	  waitfor i-tool-09-is-up	FALSE
	  waitfor i-tool-09-is-down	TRUE
	halcmd sets o-tool-09-down	FALSE
fi
#
if [ $armnr = 10 ]; then
	halcmd sets o-tool-10-down	TRUE
	  waitfor i-tool-10-is-up	FALSE
	  waitfor i-tool-10-is-down	TRUE
	halcmd sets o-tool-10-down	FALSE
fi
#
if [ $armnr = 11 ]; then
	halcmd sets o-tool-11-down	TRUE
	  waitfor i-tool-11-is-up	FALSE
	  waitfor i-tool-11-is-down	TRUE
	halcmd sets o-tool-11-down	FALSE
fi
#
if [ $armnr = 12 ]; then
	halcmd sets o-tool-12-down	TRUE
	  waitfor i-tool-12-is-up	FALSE
	  waitfor i-tool-12-is-down	TRUE
	halcmd sets o-tool-12-down	FALSE
fi

exit 0
Airblast - MDI Button - M130 P3

#!/bin/bash
#Kegel Ausblasen beginnen
P=$1
halcmd sets o-tool-clean TRUE
sleep $P
#Kegel Ausblasen beenden
halcmd sets o-tool-clean FALSE

exit 0
ALL UP - MDI Button - M116

#!/bin/bash
#Arme Anheben
waitfor i-tool-basket-is-down TRUE
halcmd sets o-tool-clean FALSE
halcmd sets o-tool-01-down	FALSE
halcmd sets o-tool-02-down	FALSE
halcmd sets o-tool-03-down	FALSE
halcmd sets o-tool-04-down	FALSE
halcmd sets o-tool-05-down	FALSE
halcmd sets o-tool-06-down	FALSE
halcmd sets o-tool-07-down	FALSE
halcmd sets o-tool-08-down	FALSE
halcmd sets o-tool-09-down	FALSE
halcmd sets o-tool-10-down	FALSE
halcmd sets o-tool-11-down	FALSE
halcmd sets o-tool-12-down	FALSE
halcmd sets o-tool-all-up   	TRUE
#
waitfor i-tool-01-is-down	FALSE
waitfor i-tool-02-is-down	FALSE
waitfor i-tool-03-is-down	FALSE
waitfor i-tool-04-is-down	FALSE
waitfor i-tool-05-is-down	FALSE
waitfor i-tool-06-is-down	FALSE
waitfor i-tool-07-is-down	FALSE
waitfor i-tool-08-is-down	FALSE
waitfor i-tool-09-is-down	FALSE
waitfor i-tool-10-is-down	FALSE
waitfor i-tool-11-is-down	FALSE
waitfor i-tool-12-is-down	FALSE
#
waitfor i-tool-01-is-up	TRUE
waitfor i-tool-02-is-up	TRUE
waitfor i-tool-03-is-up	TRUE
waitfor i-tool-04-is-up	TRUE
waitfor i-tool-05-is-up	TRUE
waitfor i-tool-06-is-up	TRUE
waitfor i-tool-07-is-up	TRUE
waitfor i-tool-08-is-up	TRUE
waitfor i-tool-09-is-up	TRUE
waitfor i-tool-10-is-up	TRUE
waitfor i-tool-11-is-up	TRUE
waitfor i-tool-12-is-up	TRUE
#
halcmd sets o-tool-all-up   	FALSE

exit 0
Erster Test
unlock table - MDI Button - M120

#!/bin/bash
#Tisch anheben M120
halcmd sets o-table-lock FALSE
waitfor o-table-lock FALSE
sleep 1
halcmd sets o-table-up TRUE
waitfor i-table-is-up TRUE
exit 0
Lock table - MDI Button - M121

#!/bin/bash
#Tisch verriegeln M121
while :; do
	set -- $(halcmd -s show sig i-table-is-1)
	seite1=$2
	set -- $(halcmd -s show sig i-table-is-2)
	seite2=$2
        echo $seite1 
	echo $seite2
    if [ "$seite1" == "TRUE" ] || [ "$seite2" == "TRUE" ] ; then
        halcmd sets o-table-up FALSE
	halcmd sets o-table-lock TRUE
	waitfor i-table-is-up FALSE
	waitfor o-table-lock TRUE
	exit 0
    fi
    sleep 2
done

exit 0
Change Table - MDI Button - M124

#!/bin/bash
#Tisch wechseln M124
set -- $(halcmd -s show sig i-table-is-1)
seite1=$2
set -- $(halcmd -s show sig i-table-is-2)
seite2=$2
if [ "$seite1" == "TRUE" ] ; then
        ~/linuxcnc/configs/IgorProbe/nc_files/M123
fi
if [ "$seite2" == "TRUE" ] ; then
        ~/linuxcnc/configs/IgorProbe/nc_files/M122
fi

exit 0
1 - MDI Button - M122

#!/bin/bash
#Tisch Seite 1 M122
set -- $(halcmd -s show sig i-table-is-1)
seite1=$2
if [ "$seite1" == "TRUE" ] ; then
        exit 0

else
	~/linuxcnc/configs/IgorProbe/nc_files/M120
	waitfor i-table-is-up TRUE
	halcmd sets o-table-1 TRUE
	waitfor i-table-is-1 TRUE
#    sleep 3
	~/linuxcnc/configs/IgorProbe/nc_files/M121
	halcmd sets o-table-1 FALSE
fi

exit 0
2 - MDI Button - M123

#!/bin/bash
#Tisch Seite 2 M123
set -- $(halcmd -s show sig i-table-is-2)
seite2=$2
if [ "$seite2" == "TRUE" ] ; then
        exit 0

else 
	~/linuxcnc/configs/IgorProbe/nc_files/M120
	waitfor i-table-is-up TRUE
	halcmd sets o-table-2 TRUE
	waitfor i-table-is-2 TRUE	
#    sleep 3
	~/linuxcnc/configs/IgorProbe/nc_files/M121
	halcmd sets o-table-2 FALSE
fi
exit 0 
Tischlein Wechsel Dich

Dann wäre da noch die Rechte Seite, bei der geht es um das Eigentliche Laden von Werkzeugen in den Wechsler:

Begin Load Basket - subcall Button - beginloadtoolchanger.ngc

o<beginloadtoolchanger> sub
(print, o<beginloadtoolchanger>)
O10 if [#<_current_tool> gt 0] ; checks if spindle empty
(MSG, Spindle not epmty)  
 o<toolchange> endsub [1]
M2
O10 endif
M110
M112
M116

o<beginloadtoolchanger> endsub [1]

M2
Load Toolchanger - subcall Button - loadtoolchanger.ngc

(author: PL)
(version: 0.1)
(date: 7.3.2020)

(Bring ATC Arm down for loading)

o<loadtoolchanger> sub

O10 if [#<_current_tool> gt 0] ; checks if spindle empty
(MSG, Spindle not epmty)  
 o<toolchange> endsub [1]
M2
O10 endif
O20 if [#<_hal[i-tool-basket-is-down]> eq 0 ] ; checks if basket is ready
(MSG, basket not ready)  
 o<toolchange> endsub [1]
M2
O20 endif
;assign the variables from UI to some parameters
#<loadarmnr_atc_page> = #1
#<tool_number_entry_atc_page> = #12
;M108 P#<tool_number_entry_atc_page> Q#<loadarmnr_atc_page>
M131 P#<loadarmnr_atc_page>
M132 P#<tool_number_entry_atc_page>
(DEBUG, EVAL[vcp.getWidget{"dynatc"}.store_tool{#<loadarmnr_atc_page>, #<tool_number_entry_atc_page>}])
#[5189 + #<loadarmnr_atc_page>] = #<tool_number_entry_atc_page> 
;M108 P[5189 + #<loadarmnr_atc_page>] Q#[5189 + #<loadarmnr_atc_page>]
M116
;assign the tool numbers in the pockets to the parameters

o<loadtoolchanger> endsub

M2
#!/bin/bash
#M132 Arm Laden
P=$1
Q=$2
newnr=$P
echo $newnr
toolline=$(grep  "T$newnr " tool.tbl )
tool=$(cut -d ";" -f2 <<< $toolline)
temp=$(cut -d "Z" -f2 <<< $toolline)
Offset=${temp:1:3}  
zenity --info --title="Korb Laden" --text "Werkzeug: T$newnr \n\n $tool \n\n Z-Offset: $Offset mm \n\n einsetzen"

zenity --info --title="Korb Laden" --text "Werkzeug T$P Gesichert?"
exit 0
#!/bin/bash
#M133 Arn leeren
P=$1
Q=$2

zenity --info --text "Werkzeug Aus Arm $P entfernen"

zenity --info --text "Arm $P Gesichert?"
exit 0
End Load Toolchanger - subcall button - endloadtoolchanger.ngc

o<endloadtoolchanger> sub
(print, o<endloadtoolchanger>)

M116
M113
M111

o<endloadtoolchanger> endsub [1]

M2
Copland pump 1 - MDI Button - M127

#!/bin/bash
#toggle relais 1
set -- $(halcmd -s show sig o-pump-1)
status=$2
if [ "$status" == "TRUE" ] ;    then
	halcmd sets o-pump-1	FALSE
    else
    halcmd sets o-pump-1	TRUE
fi

exit 0
ATC Automatic control Panel - subcall button - fillwidget.ngc

o<fillwidget> sub
(print, o<fillwidget>)
#1 = 0
o130 while [#1 LT 12]
    #1 = [#1+1]
    #2 = #[5189+#1]
    (DEBUG, EVAL[vcp.getWidget{"dynatc"}.store_tool{#1, #2}])
o130 endwhile

(DEBUG, EVAL[vcp.getWidget{"dynatc"}.atc_message{"Igor"}])
o<fillwidget> endsub [1]

M2
Power Up Sequence
Tool Arm test