Buffaloの16ボタンコントローラでEMC2/LinuxCNCを操作する
Buffalo のアナログジョイパッド BSGP1601をLinuxCNCのリモコンとして使うための設定.
ページ下の「analogjoypadBSGP1601.hal」ダウンロードして設定ファイルと同じディレクトリに置き、
「設定名.ini」ファイルの[HAL]セクションの中から,"HALFILE = custom.hal"を探し,
その次の行に,「HALFILE = analogjoypadBSGP1601.hal」を追加することで設定ファイルを呼び出すことで利用する.
前回の設定を流用しているところもあるので一部微妙.
##################################################################################
# for remote joypad control アナログ軸を含むコントローラ設定
loadusr -W hal_input -KRAL BSGP1601
## "Gamepad"の部分は各自のゲームパッドのN:欄 Name= から,必ずただ一つ識別できるようなキーワードにする.
## 今回はBSGP1601とした.
## 使用するリアルタイムモジュールの呼び出し
## count= の値は,利用したい論理が、宣言した個数だけ確保される
loadrt and2 count=10
loadrt not count=5
loadrt mux2
########################################################################################
## アナログ軸に関わるパラメータの設定
## 最大送り速度.ここの値はjoypadでのみ利用される(画面でのjog速度と独立)
setp halui.jog-speed 1000
## デッドバンド(禁止帯)の設定.あまり小さいと,スティックのニュートラルがずれると機械が停止しなくなる.
## 大きすぎる/未設定の場合,移動速度変化の分解能が少なくなる.
setp halui.jog-deadband 0.010
## y軸とrz軸がイメージと逆に動いたので,以下行を追加した.
#setp input.0.abs-y-scale -127.5
#setp input.0.abs-rz-scale -127.5
## 入力ピンの設定.-1から1までの少数値をとる「input._.abs-_-position」を設定する.
net analogX input.0.abs-x-position => halui.jog.0.analog
net analogY input.0.abs-y-position => halui.jog.1.analog
net analogZ input.0.abs-rz-position => halui.jog.2.analog
#####################################################################################
#digital-btn on-off デジタルボタンの設定
#クーラント (=[F8])
## 現在の状態を入力し,その状態とボタン操作とで論理をとることで同じボタンでon-offする.
## この方式のメリットは使用ボタン数が削減できること,
## 欠点はチョン押ししないと2回押したと判定されてしまうこと.
#現在の状態
net flood-is-on halui.flood.is-on => and2.0.in0
net flood-is-on halui.flood.is-on => not.0.in
net not-flood-is-on not.0.out => and2.1.in0
#ボタン状態
net button-6 input.0.btn-pinkie => and2.0.in1
net button-6 input.0.btn-pinkie => and2.1.in1
#動作
#net floodOff and2.0.out => halui.flood.off
#net floodOn and2.1.out => halui.flood.on
## 使うことにしたand2ふたつとnotひとつをservo-threadの間隔ごとに実行する.
## 起きうる最大の実行遅れ時間は「USB通信と信号解釈の時間+servo-thread間隔の時間」となる
addf and2.0 servo-thread
addf and2.1 servo-thread
addf not.0 servo-thread
##以下,同様に設定していく
#Spindle On-Off スピンドル(主軸)のオンオフ (=[F9/F10])
net spindle-is-on halui.spindle.is-on => and2.2.in0
net spindle-is-on halui.spindle.is-on => not.1.in
net not-spindle-is-on not.1.out => and2.3.in0
net button-5 input.0.btn-top2 => and2.2.in1
net button-5 input.0.btn-top2 => and2.3.in1
net spindleOff and2.2.out => halui.spindle.stop
net spindleOn and2.3.out => halui.spindle.start
addf and2.2 servo-thread
addf and2.3 servo-thread
addf not.1 servo-thread
#pause/resume (=[P/S])
net pause-is-on halui.program.is-paused => and2.4.in0
net pause-is-on halui.program.is-paused => not.2.in
net not-paused not.2.out => and2.5.in0
net button-14 input.0.key-301 => halui.program.pause
net button-16 input.0.btn-dead => halui.program.resume
#optional stop M1 (=[Alt+M 1]) オン時のみGコード中のM1コードで停止してくれる,オプショナルストップのオンオフ
net M1-is-on halui.program.optional-stop.is-on => and2.6.in0
net M1-is-on halui.program.optional-stop.is-on => not.3.in
net not-M1-is-on not.3.out => and2.7.in0
net button-15 input.0.key-302 => and2.6.in1
net button-15 input.0.key-302 => and2.7.in1
net M1Off and2.6.out => halui.program.optional-stop.off
net M1On and2.7.out => halui.program.optional-stop.on
addf and2.6 servo-thread
addf and2.7 servo-thread
addf not.3 servo-thread
#homing all
net button-13 input.0.key-300 => halui.home-all
#machine-on/run
net button-4 input.0.btn-top => halui.program.run
#mode auto
net button-3 input.0.btn-thumb2 => halui.mode.auto
#mode manual
net button1- input.0.btn-joystick => halui.mode.manual
#emergency-stop
net button-2 input.0.btn-thumb => halui.estop.activate
#feed-override
net button-10 input.0.btn-base4 => halui.feed-override.increase
net button-9 input.0.btn-base3 => halui.feed-override.decrease
#spindle-override
net button-8 input.0.btn-base2 => halui.spindle-override.increase
net button-7 input.0.btn-base => halui.spindle-override.decrease