- 締切済み
マシニング加工で年月日の情報を製品に加えるNCプログラム
- マシニングセンタにて加工日時のドリル痕を製品つけたいと考えていますが、どうやってNCプログラムを組んでよいか分からず悩んでいます。
- FANUCのシステム変数に#3011:年月日 #3012:時分秒の情報があるとの事で、この情報を鋳出ししたマトリクス表にドリル痕でマークを付けて表現する方法を知りたいです。
- システム変数から抽出した数字を年月日の各情報に切り分けて、マトリクスの加工パターンに反映させる方法が分かりません。ご経験のある方、ご教示頂けますようお願いいたします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
実にユニークなご質問、また(1)さんの完璧なご回答に唸りました #3011から年月日を取り出す方法はプログラムにおける常套手段ですが まさに芸術ですね #101~#105に0か1のビットパターンが入れば、あとは下記のような 方法で加工ができると思います #33=1. 穴位置カウンタ(#33番目の穴位置) G90G54G00X0Y0Z100.M03 最初の穴位置に位置決め,主軸起動 Z5.M08 R点に移動、クーラントON WHILE[#33LE5.DO20] 1~5番目までループ IF[#[100+#33]EQ0]GOTO10 #33番目の穴加工有無の判定 M98P2001 穴加工プログラム呼び出し N10X5. 2穴目へ移動 #33=#33+1. カウントアップ END20 G90GOZ100. Z逃がし 上記で縦一列目の加工が完了しますので、さらに縦方向のループを 組めばよいでしょう 間違えました ×縦一列目の加工 〇横一列目の加工 当面、2031年12月31日までのことを考えれば良いと思いますので (1)さんのプログラムを #1=FIX[#3011/10000.]-2000. として年を下2桁で表せば5×5で運用できますね 2032年以降のプログラマーのために、キチンとしたプログラム 解説資料を残しておいた方が良いでしょう 素晴らしいご質問、(1)さんのご回答ありがとうございます 考えるにとても楽しかったです 分は59まででしたね... 細かいことまで気にする必要が無ければ÷2にしては如何でしょう おおおおおおおおおおおおおおっ グリッドのXY座標を変数にした(1)さんの芸術プログラム まさに「気持ちいいー」、尊敬します
論理回路でデコーダーを設計するように、真理値表をまず作成する。どの入力に対してどの出力という対応表。できるだけ冗長な部分を簡単化するように、論理設計する。あとは読み込んだ変数をひたすら条件分岐で出力に対応させていく、、という方法が一番簡単かと思います。論理の簡単化が苦手であれば、そのまま入出力の対応テーブルをプログラムに入れてしまう。というか入力をバイナリにする演算記号はOSPには標準で有るけど、FUNUCには無いのですか?
お礼
コメント頂きありがとうございます。 プログラム作成も初心者の為、ご指導いただいた内容で初めて聞く 単語も有ったりと、勉強不足を痛感しております。
教示はとてもできないのですが面白そうなんで読んでみました。 31まで表示できる5マスの組み合わせで、32以上をどう表現するのかが興味深いです。 2進数なら7マス(桁)必要だと思うのは頭が固いのかな... 59を表記なら32も追加で6マス 99を表示であれば64も追加で7マスと思いました。
お礼
ご指摘いただきありがとうございます。 仰る通り6マス及び7マス必要です。 その後の皆さんのご教示により解決策もありそうなので 大変助かりました。 ありがとうございました。
年 は 20151022.を10000で割って端数を切り捨てる 月 は 20151022.を100で割って端数切り捨て、201500を引く 日 は 20151022.から20151000を引く マクロ構文にすると #1=FIX[#3011/10000.] ←年 #2=FIX[#3011/100.]-#1*100. ←月 #3=#3011-#1*10000.-#2*100. ←日 時分秒についても同様の考えで分ければ宜しいかと。 もしかして10進数から2進数への変換方法についても必要だったでしょうか。 10進数を2進数に変換するには、例えば2で割った余りを求めていく方法や 奇数か偶数かで判定する方法などがあります。 (例) 入力:#30:31以下の10進数 出力:#101~#105にビットパターン #101:1 に対応する桁 0 or 1 #102:2 に対応する桁 0 or 1 #103:4 に対応する桁 0 or 1 #104:8 に対応する桁 0 or 1 #105:16に対応する桁 0 or 1 #31=5. (ループカウンタ:2進数の桁数) WHILE[#31GT0]DO1 #32=#30-FIX[#30/2.]*2. 余り( 0 or 1) #30=FIX[#30/2.] #31=#31-1. #[105.-#31]=#32 END1 #32を求める式は下記などでもOK #32=#30 AND 1. 桁数を制限しないでやるにはWHILEの条件を商がゼロより大きいかどうか などに変えれば良いですが、結果をどこに格納するのか考えないと バッファがオーバーフローするかも知れないので注意。 自分なら2進数は読み辛いので、 (1) モロに数値を刻印するか (2) マスの中に麻雀牌のようなドットパターンを打つか すると思います。 0~9の数字毎にサブプロを作っておいて M98 P[5000+#10] とかで呼べば良いです。 サブプロはインクリにしておいて、マスの決まった所からスタート 次のマスの開始位置に移動した所で終了とかにしておけば呼び出しが楽かと。 上の方式だと加工時間は掛かってしまうので 読みやすさよりも生産性の方が重要であれば マトリックス方式の方が良いですね。 ポンチ打ちするかどうかを、対応する変数が ゼロか 否か で判断する というので良ければ、ループを使わずに #101 = #30 AND 1. #102 = #30 AND 2. #103 = #30 AND 4. #104 = #30 AND 8. #105 = #30 AND 16. とやっても良いかも。 色んなやり方があるのでお好きな方法でどうぞ。
お礼
ご返答遅くなりました。 現在グリッドを利用したご教示内容まで理解したところです。 ご察しの通りマクロに関し素人なのですが、基礎部分から 最終的な手法まで懇切丁寧なご説明、大変参考になりました。 最終まで読んだ時点で不明点がでたら改めて質問させて下さい。 取り急ぎお礼申し上げます。ありがとうございました。
お礼
ご返答遅くなりました。 プログラム実例までご指導いただきありがとうございます。 この1日でマクロに対する知識が一気に広がった気分です。 出来ればマス目を増やしたくないのも本音なので ご提案頂いた内容も加えてPRG作成してみます。 ありがとうございました。