• 締切済み
※ ChatGPTを利用し、要約された質問です(原文:プログラム)

プログラム作成時の引数入力に関する解決法は?

このQ&Aのポイント
  • プログラム作成時に引数の入力が多い場合、書き換えが煩雑になることや数字の入力ミスが問題となっています。その解決法をまとめました。
  • プログラム作成時の引数入力が多い場合、書き換えの手間や数字の入力ミスが発生しやすいことが課題となっています。ここでは、その解決法について考えてみます。
  • プログラム作成時には引数の入力が多くなることがあり、その際に書き換えの手間や数字の入力ミスが問題となっています。解決法について考えてみましょう。

みんなの回答

noname#230359
noname#230359
回答No.4

引数が10個以上もあり入力が大変であれば、デフォルト値を設定してはどうでしょうか? 例えば引数Aを省略したとして IF [#1 NE #0] GOTO1 #1 = 1.0 N1 という形で、#1になにか数値が入っていればジャンプし、空であれば数値が自動的に入力されるようにする。 自動入力される値は、定数だけでなく計算式にしたり、たとえば2.5次元の繰り返し加工のピッチであれば径オフセット値X0.1など。 可能なものはこのようにして、最低限の入力でも加工できるようにしておき、さらに細かい設定をしたい場合だけ必要な引数を入力するようにすれば加工者も楽になると思います。

noname#230358
質問者

お礼

ありがとうございます。 なるほど!勉強になります。ぜひ参考にさせて頂きます。

全文を見る
すると、全ての回答が全文表示されます。
noname#230359
noname#230359
回答No.3

引数が10個以上も必要とするのは実用にはちょっと・・・・ そこで省略する方法をアドバイスさせて頂きます。 例えは、座標移動するマクロとして G65P1000X? Y? Z? などとして引数を付けることになるわけですが 日常的にX0,Y0,Z0とすることが多い場合には、これらを省略することができます 例 G65P1000 X0 Y0 Z0(通常形式)   ↓ G65P1000(省略形式) 内容としてはローカル変数とコモン変数を組み合わせて利用します X,Y,Zのローカル変数は#24,#25,#26だから 対応するコモン変数として#124,#125,#126を用意してやります -------------------- O1000(FANUC形式) #124=0.0 #24 EQ #0 GOTO 10 #124=#24 N10 #125=0.0 #25 EQ #0 GOTO 20 #125=#25 N20 #126=0.0 #26 EQ #0 GOTO 30 #126=#26 N30 G00X#124 Y#125 Z#126 M99 -------------------- このマクロの実用例 G65P1000 (X0 Y0 Z0へ移動) G65P1000X50. (X50. Y0 Z0へ移動) G65P1000Z50. (X0 Y0 Z50.へ移動) G65P1000X10.Y20.Z30. (X10.Y20.Z30.へ移動) となります。 プログラムの基本は、マシンオペレーターやプログラマーがいかに理解しやすいかです。 マクロを使えば2.5次元のメインプログラムなどの視認性は圧倒的に有利になります。 さらにG65P1000というようなマクロ呼出しではなく、マクロプログラムのユーザーGコード割り当てなどを行えば、G?? X10.Y20.Z30.との表現が可能となり、使い勝手は更に向上します。 マクロを使用しないNCオペレーションは考えられなくなりますよ!

noname#230358
質問者

お礼

ありがとうございます。 参考にさせて頂きます。 #100からはオプションになるんですかね?

全文を見る
すると、全ての回答が全文表示されます。
noname#230359
noname#230359
回答No.2

こんばんは、いくつか投稿を見せていただきました。かなり苦労されているみたいですね。 プログラマーさんには少々厳しい意見も混じると思いますが現場からの屈託のない意見として参考にしてください。 質問のアドレス10個以上も現場が指定しなければいけないマクロを渡されたとしても現場オペレーターは動作確認等で困惑するばかりになると思います。 良いプログラムとは現場作業者が確認しやすく安全で理解が容易なプログラムであると断言できます。 NCコードの組み合わせのみでも2.5次元の加工以前でしたら用途に合わせかなり汎用性の高いものが出来ると思います。(実加工において) 私の場合オペレーター兼プログラマーですが他人に渡すプログラムの場合出来る限りマクロの使用は避けています。 解決方法と問われますと… 一番初めに考えていただきたいのが現場に渡すプログラミングの仕方ではないでしょうか?むしろマクロプログラムは必要ではない限り現場からの要請、要望があった場合にとどめておいたほうが良いと思います。 さて質問はたぶん今後の汎用性を持たせる為かと思います。 加工内容は判断しかねますが入力時アドレスが10以上とはたぶん簡略化されてはいないのではないでしょうか? あくまでも顧客や他人が使う「加工する為のプログラム」ですから現場オペレーターの意図は必ず参考にしてください。 1、仕上げか粗加工の判定式を入れる、または分ける。 2、径方向やZ方向の切り込み量などは刃物径に合わせて自動判別。 3、2を利用して繰り返し回数もマクロ処理してください。 4、回転、工具長補正などはメインで。 など工夫する余地は多々あるのではと想像します。 またマクロを組むに当たっては、 1、演算式、判定式などは可能な限り一纏めにする(連続ブロックで処理) 2、繰り返し処理の多い場合、演算誤差を修正処理させる。 3、アドレスやマクロ処理に注釈を入れる。 だけでかなり見やすく間違いの少ない扱いやすいプログラムとなります。 いずれにせよ、オペレーターとプログラマーの知識の共有部分が少ないように想像してしまいます。 他投稿のドリル条件などは実加工しているオペレーター(作業員?)や現場の方の意見を参考にされるのが一番かと思います。実際にワークを加工しているのは彼らなのですから。(ワークの状態、材質、機械剛性、工具種類、ツール突き出し…) 「職人の経験はデーターより勝る!」←これが現在の私の考えです。 逆にプログラマーの意見としては理解を求めたい場合も多く直面しているとは思いますが…。 それでは、今後も頑張ってください。

noname#230358
質問者

お礼

ありがとうございます。 すごいですね、私とはレベルが違いすぎます!! ほとんどが私が困っていた事なのでとても勉強になります。 参考にさせて頂きます。

全文を見る
すると、全ての回答が全文表示されます。
noname#230359
noname#230359
回答No.1

引数は便利ですが、時には書き換えが面倒かもしれません。 1.今の引数方式を利用するなら #500=... #501=... として G65 P1000 Z#500 Q#501 S......とすれば、結構簡単ではないでしょうか。 2.パソコンで管理して簡単な対話形式を作成。メインの引数をPCで作成したあと、NC機に送る ヒューマンエラーは無くなりません。(押さえる事は出来ますが) 出来るだけ手入は減らす考えが必要では。 こちらでよく使う方法を紹介 NC装置がファナックならパターンデータ入力があります。 名称が付けられるので入力がしやすくなります。またメニュー選択で入力項目が切り替えも可能です。 メニューHOLE PATTERN O0000 N00000 1. BOLT HOLE 2. GRID 3. LINE ANGLE 4. TAPPING 5. DRILLING 6. BORING 7. POCKET 8. PECK 9. テストパターン 10. BACK で10パターンまで選択できます。 選択すると下のようにメニューに対応する入力項目が表示されます。 500 TOOL 0.000 501 KIJUN X 0.000 *BOLT HOLE 502 KIJUN Y 0.000 CIRCLE* 503 RADIUS 0.000 SET PATTERN 504 S. ANGL 0.000 DATA TO VAR. 505 HOLES NO. 0.000 NO. 500 - 505. 506 0.000 507 0.000 #500~の変数は電源を切っても保持されます。#100~#199までは保持されません。

noname#230358
質問者

お礼

ありがとうございます。 本当に皆さんレベルが高いですね!! 竜の子さんもすごいですね、私も早くそこまでの知識が欲しいです。 とても勉強になります。参考にさせて頂きます。 引数は#100~、#500~はオプションなのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • プログラムについて

    お世話になります。 プログラムで、意味がわからない箇所があるので、お願いします。 G90G10Q2P1X0Y0Z0; と言うプログラム使うのですが、Q2の意味がわかりません。 G90はプログラム原点 G10はデータ設定 P1はG54と同じ意味 と解釈しています。 XYZは機械値が入ります。 Q2だけどう調べてもわからないので、どうか宜しくお願いします。 制御装置はヤスナックです。

  • ファナックのプログラムについて

    前まで、6年前にでた森精機の機械を使っていました。 プログラムはファナックでした。 その機械は同じプログラム内にサブプログラムを入れて加工することが出来たのですが、最近転職して20年ぐらい前のMCを使っています。 それもプログラムはファナックなのですが、同じプログラム内にサブプログラムを作って加工出来ません。 自分なりに調べて見て、無理とは書かれていたのは見つけたものの納得出来ず投稿しました。 昔の機械なので容量も少なくプログラムもあまり入れておけません。 リピート品やるときは、メインとサブプロを全部転送しなおしてやっています。 非常に不便です。 前は同じプログラム内にサブプロがあったので、メインだけ転送すれば大丈夫でした。 マクロ、変数、何を使ってもいいので、どなたかわかるかたいませんでしょうか? 同じプログラム内にサブプログラムを作り加工したい感じです。 前まで作っていたのは O100 メイン M30 N10 サブプロ M99 こんな感じでO100に全部入れて作っていました。 よろしくお願いいたします。

  • 二進数にするプログラム

    C言語の問題なんですが、なかなかできません。 途中までやったんですがこれからどうすればいいか分かりません。 1、まず、整数をどんどん入力し、最後に負の数を入力する。負の数が入力されると、これまで入力された数を逆順で表示するプログラムを作成する。 2、1でできたものを利用して、何か数字が入力されたら、それを二進数に直すプログラムを作成する。ただし、二進数の桁数は1000桁以内とする。 ここまでやったんですがこれからどうすればいいか分かりません。 どなたか知恵を貸してくれませんか? #include<stdio.h> int main() { int z[1000],Z,i; printf("正の整数を入力してください:\n"); for(i=0;1<1000;i++); { scanf("%d",&z[i]); if(z[i]<0) break; } Z=i; for(i=0;i<Z/2;i++) { int temp=z[i]; z[i]=z[Z-1-i]; z[Z-1-i]=temp; } printf("入力した要素を逆順に並べると:\n"); for(i=0;i<Z;i++) printf("%d\n",z[i]); return(0); }

  • メイキング・プログラム!

    プログラムで、 ・二次関数のp,qのずれがあるグラフの定数などの値を入力して、 グラフを描くプログラム ・分数関数のp,qのずれがあるグラフの定数などの値を入力して、 グラフを描くプログラム ・式を入力して、その逆関数の式を表示し、さらにグラフを描くプログラム ・べき関数のグラフを描くプログラム 参考にして、やってみたいのです。これは、宿題とかではありません。なるべく簡単な構文でおしえてくださいまし 。

  • Excelのプログラムについて

    "Excel エクセル"で添付画像のようなプログラムの作成は可能でしょうか? (1)Sheet1の入力欄に数字を入力すると、(2)Sheet2にある総当たり表を参照して、(3)Sheet1に入力した数字で新しく総当たり表を作成する ※入力欄に入れる数字を変えれば自動で出力される総当たり表の内容も変わる 私は、エクセルのマクロとか関数の初心者で詳しいことが分からなくて困っています。 これを機に勉強しようと考えておりまして 〇エクセルでこのプログラムが書けるのか 〇どの関数を勉強すればよいのか を教えていただければと思います。 よろしくお願いいたします。

  • 数学におけるプログラムの問題です。

    「次のプログラムは何をするものか説明し、nに360が入力されたときのp,qを求めよ。   100 INPUT n     110 FOR i=1 TO SQR(n)   120 IF MOD(n,i*i)=0 THEN LET p=i   130 NEXT i   140 LET q=n/(p*p)   150 PRINT "p=";p   160 PRINT "q=";q    END」 という問題です。  p=6,q=10 はわかります。このプログラムは「入力された値に対して、2乗して割り切れる最大の値とその時の商を求めるものである」でよろしいのでしょうか?

  • プログラムの考え方。

    コマンドラインから引数を入力してお金の種別に分類せよ。(2000円札は考えない) main関数ではコマンドラインからの引数を判断し、引数の数や値がおかしいときにはエラーメッセージを表示する。正しいときはsyubetu関数にデータを渡してその結果を表示する。 syubetu関数は以下のとおりである。 ・関数名 syubetu ・引数 金額 money(int) 金種格納 kinsyu(int*) ・戻り値 なし ・機能 金額、金種格納用ポインタを引数とし、金種ごとの枚数を計算する関数 こういう問題があって、 コマンドラインの引数に数字を入力したら 一万円札から順番に何枚あるかの種別に分けるプログラムなんですが、 その分類をどうやってさせていいのかがわかりません。 例えば13531とかいれたら 一万円 一枚 5千円 0枚 千円 3枚 5百円 1枚 百円 0枚 50円 0枚 10円 3枚 5円 0枚 1円 1枚 っと表示させます。 この分類のところはどのように考えたらプログラムできるでしょうか? フローチャートを考えている途中なのですが、いまいち考え方がわかりません。 よろしくおねがいします。

  • 文字列を大文字にするプログラムがわかりません。

    小文字を大文字に、大文字はそのまま、それ以外は表示しないプログラムなんですが、 「それ以外を表示しない」というところが書けません。 #include <stdio.h> int main(void) { char x; char *p; puts("文字列を入力"); scanf("%s", &n); for(p = &n; *p != '\0'; p++){ if(*p >= 'a' && *p <= 'z'){ *p = *p - 'a' + 'A'; } } printf("%s\n", &n); return 0; } これではもちろん数字などはそのまま表示されてしまいます。 しかも、4文字までは普通に大文字で表示されるんですが 6文字だとcoredumpedしてしまいます。 すいませんが、ソース書いて教えていただけると嬉しいです。

  • 3つほどプログラムをおしえてください。

    (1)100までの整数をいくつか入力し、10刻みでの個数を表示し、負の数が入力されると整数の入力を終わるプログラムです。各範囲の個数は配列に格納する。 実行結果 65 30 21 95 5 -1 0--- 9 : 1 10--- 19 : 0 20--- 29 : 1 30--- 39 : 1 40--- 49 : 0 50--- 59 : 0 60--- 69 : 1 70--- 79 : 0 80--- 89 : 0 90---100 : 1 (2)数字の文字列を入力し、その文字列に含まれる各数字(文字)'0','1',~'9'の個数を表示するプログラムの作成。 実行結果 1231234567 0: 0 1: 2 2: 2 3: 2 4: 1 5: 1 6: 1 7: 1 8: 0 9: 0 (3) 変数xは、0~1までの0.01刻みの値(101個)を取るとする。このとき、2次関数 f(x)=3x^2+2x+1の値が2.0<f(x)<3.0となるxの値をの個数を求めるプログラムの作成。ただし、xを引数としf(x)の値を返す関数を作成して、それを使用する。 実行結果 number=21 やってるうちにわけがわからなくなってしまいます。どなたかよろしくおねがいします。

  • G91による位置決め方法が知りたいです。

    最近、オークマの機械(OSP)で加工する事になったのですが、ファナックで操作出来たプログラム機械が動きません。 ファナックの時のプログラムを書きますので、アドバイスお願いします。 メインプログラム(ファナックの時のプログラム) G91G28Z0T1 M16M6 G90G0G54X0Y0T2 G43Z2.H1 S2500M3M8 G81R2.Z-1.F160K0 M98P22 G91G28Z0T2 M16M6 G90G0G54X0Y0T3 G43Z10.H2 S600M3M8 G73R2.Q5.Z-20.F60K0 M98P22 G91G28Z0T3 M16M6 G90G0G54X0Y0T4 G43Z2.H3 S600M3M8 G81R2.Z-2.75F120K0 M98P22 G91G28Z0T4 M16M6 G90G0G54X0Y0T1 G43Z5.H4 M00 M29S200 G84R5.Z-15.F160K0 M98P22 G91G28Y0Z0T#100 M30 サブプログラム(問題の位置決め) G90X10Y-20 G91X10 X10 X20K5(このX20を5回繰り返すのも、出来ないです) Y-20K10 X-20K5 M99 G90G0G54X0Y0 → G15 H1にする G43Z5.H4 → G56 H1にするとか、何とかOSP用に覚え直す事が出来たのですが、サブで位置決め「G91」使用では、思い通りに動きません。 面倒でも「G90」で座標を入力すると思い通りに動きます 単品の部品加工が主なので、G90でXY座標も入力出来るのですが、 出来ればG91を使用し、簡単に組みたいです。

停電後親機が使用できない
このQ&Aのポイント
  • 停電後、ブラザー製品の親機のパネルにbrotherの字が点滅しており、どのボタンを押しても反応しない状態です。
  • Windows10を使用しており、無線LANで接続されています。
  • 関連するソフトやアプリはありません。電話回線はひかり回線です。
回答を見る