NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

シグマ光機のステージ(SHOT-304GS)操作について

v1.1.0に移行し、新たにプログラムを組みなおしました。

以前回答していただいたプログラムで、プロパティノードのVal(Sgnl)がクリックのと同じイベントを発生させるということで、それを用いてケースストラクチャの方向キーを呼び出すようにしました。

 

左側のストラクチャでジョイスティックの方向を場合分けし、ジョイスティックが中央にある場合は右側のストラクチャを空にしています。

右に倒れた時は右側で"3"のストラクチャを実行し、Val(Sgnl)で"➡"ボタンのクリックイベントを発生させます。

 

しかし、このVIをもとに色々試しましたがボタンを反応させることはできても実際にRightやLeftを実行してくれなく動きません。

 

 

Val(Sgnl)は繰り返し送信しないで倒れているのを確認したら一度だけ送信するということでしょうか? (ストップ命令は必要ないということですか?)

 

ブロック2.png

ブロック1.png

0 件の賞賛
メッセージ11/16
1,546件の閲覧回数

すみません。CU Controlの解読を間違えていました。

Val(Sgnl)プロパティはボタンの値が変えられた(値変更)イベントを模擬しますが、CU Controlは値変更ではなくマウスボタンを押した(マウスダウン)イベントを使っていました。またJogの場合はボタン上でマウスを放した(マウスアップ)イベントでStop Jogを実行しています。たぶんJogとStepを同じボタンで使い分けたかったのだと思います。

 

制御器のマウスイベントをプログラム的に生成することはできないかもしれません。

sh_hrさんが前回やられたように、キューで必要なステートを送ってやればできるのはわかっていますが、CU Controlのマウスイベントの処理でいろいろ条件判定しているのと同じことをしなくてはならないので手間はかかります。

0 件の賞賛
メッセージ12/16
1,535件の閲覧回数

エラそうに書いておいて間違いでしたでは申し訳ないので、とりあえず最初の方針(ダイナミックイベント)で、追加の操作デバイスに対応できそうなところまで組んでみました。

なるべく既存のコードを生かして手抜き(そのための時間は惜しまないのがエンジニアという生き物(^^;)?)しました。ダイアグラムのコメントを参考にしてください。

 

CU Controlの使用条件が見当たらなかったのですが、ソースを公開していてハードウェアがないと動かないことから、問題はなさそうだと判断しました。必要なファイルだけ抜き出してパックしてあります。

0 件の賞賛
メッセージ13/16
1,524件の閲覧回数

こちらこそなかなか理解できなくて申し訳ございません。

後日また試してみてみます。

ありがとうございます。

0 件の賞賛
メッセージ14/16
1,514件の閲覧回数

J.H.Watson様

ジョイスティックの状態が変化したときに信号を送るというプログラムの作成ができず画像のような範囲を設定して現在動作させています.

ジョイスティックを戻すとKeyUpのコマンドが実行されはするのですが, やはり完璧なプログラムではなく, 素早くジョイスティックを起こすと反応しません.

状態が変化した瞬間に移動命令を変えることはできるのでしょうか?

ジョイスティックの状態が変化してもすぐにKeyUpの命令がすぐに実行されないことが問題です.

また, この問題解決のため現在, ジョイスティックを倒した時の値の絶対値が小さくなったらKeyUpのコマンドを実行するようなプログラムの作成をしていますが解決には至っておりません.

何か良い解決策はありますでしょうか?

KeyRange.png

Right KeyDown.png

 Right KeyDown

Right KeyUp.png

Right KeyUp

absolute.png

前回の動作との絶対値の比較後, Key状態決定

0 件の賞賛
メッセージ15/16
1,428件の閲覧回数

素早く戻したときに反応しないのは100msのポーリング間隔中にマップの赤い部分を通過してしまうからだと思います。100msを小さくすれば反応する確率は上がりますが100%にはなりません。またX,Y値の変化方向を判定するのもあまりうまくない気がします。

 

このマップからは、
1) スティックを倒したらその方向にモータが動き続ける
2) スティックを戻したらモータが止まる
という動きを、各方向に対してさせたいように読み取れますが、合っていますか?

 

そうであれば、「モータ動作状況」をシフトレジスタの要素に追加(初期値は【動作なし】)したうえで、以下(1)~(3)を繰り返すのはいかがでしょうか?(方向は一例です)
1) スティックがLeft Key Down範囲内で【動作なし】ならLeft Key Down命令発行し【Left動作中】にする
2) スティックがLeft Key Down範囲内で【Left動作中】なら命令発行しない
3) スティックがLeft Key Down範囲外で【Left動作中】ならLeft Key Up命令発行し【動作なし】にする


(3)から(1)に戻ったときスティック位置はLeft Key Down範囲外であり、たとえばRight Key Up範囲内で【動作なし】ならRight Key Down命令発行し【Right動作中】にする・・・と続きます。
机上の空論かもしれませんが、何かの参考になれば・・・

0 件の賞賛
メッセージ16/16
1,421件の閲覧回数