374470
NC井戸端掲示板

[HOME] [留意事項] [ワード検索] [私的BBS] [過去ログ] [管理用]

*おなまえ 
タイトル     
*コメント 
添付ファイル  ( GIF,JPEG,LHA,ZIP,AVI,SWF 最大500KB )
ファイル 1 
ファイル 2 
pass  記事メンテ時に使用(英数字で8文字以内)
投稿キー  (投稿時 投稿キー を入力してください)
 
  [1264] 不要なゼロを 出力しない  ZENKYU  12/01/12 木 23:12  

mmyさん、こんばんは。

今年もよろしく。

firefox使ってるんですがzipファイルがダウンロードできなくて
すったもんだしましたが、エクスプローラだとすんなり・・・・・

ところで、AWKスクリプトなんとか出来ました。
これで自作のCAMスクリプトでは希望通りに出力できるはず・・・たぶん

BEGIN{
n = 3456

printf "X%s\n",cut_out( n )
}

# 数値データを書式指定し、文字列末尾のゼロのひとつ以上の繰り返しを
# 省いた文字列を返す

function cut_out(adrs_dat){
string = sprintf ("%-10.3f\n", adrs_dat)
if( index(string,/[0]+$/) == 0 )
m = length(string)
else
m = index(string,/[0]+$/) -1
cut_out = substr(string,1,m)
return cut_out
}

   返信   修正・削除 最上段  最下段
 

  [1265] Re: 不要なゼロを 出力しない  mmy  12/01/13 金 13:52  

ども、今年もよろしく♪

あと
0 の時は 0. じゃなくて 0 と出力させればOKかと・・・

Firefox でも DL できるように直したつもりだけど どうかな?

   返信   修正・削除 親記事  最上段  最下段
 

  [1266] Re: 不要なゼロを 出力しない  ZENKYU  12/01/13 金 23:46  

JGAWK WIN98 では問題なかったんですが

GAWK XP ではゼロのとき数値が無くなっちゃいました。

仕様の違いがあるみたいなのでもう少し考えてみます。

0.000000 X
1.000000 X1.
1.200000 X1.2
1.230000 X1.23
1.234000 X1.234

BEGIN{
n = 0
printf "%f\tX%s\n",n ,cut_out( n )
n = 1
printf "%f\tX%s\n",n ,cut_out( n )
n = 1.2
printf "%f\tX%s\n",n ,cut_out( n )
n = 1.23
printf "%f\tX%s\n",n ,cut_out( n )
n = 1.234
printf "%f\tX%s\n",n ,cut_out( n )
}

function cut_out(adrs_dat){
string = sprintf ("%-10.3f\n", adrs_dat)
if( index(string,/[0]+$/) == 0 )
m = length(string)
else
m = index(string,/[0]+$/) -1
new_string = substr(string,1,m)
return new_string
}

>Firefox でも DL できるように直した

出来る様になりました。ありがとうございます。
Firefox の設定をあれやこれや見てもさっぱりわからなかったのですよ。

   返信   修正・削除 親記事  最上段  最下段
 

  [1267] Re: 不要なゼロを 出力しない  ZENKYU  12/01/14 土 12:04  

無理やりゼロを出力してみた。
return 文が同じ function 内にふたつあるのは気にいらないけど・・・
まだ 0.0004 と 0.0009 は四捨五入しないといけませんね。

よくわからないのにあれこれいじくりまわしていると
さらにどんどん訳が判らなくなっていってそのうち放り出してしまいます。

GAWK JGAWK どちらでもいいみたいですが
JGAWK だとXPのコマンドプロンプトで、画面にはなにも表示されないのに
リダイレクトでファイルには書き出し出来てました。なぜだ。

>「Visual C#」これからは、これ
やっぱり「これ」ですかね。

0.000000 X0
0.000400 X0
0.000900 X0
1.000000 X1.
1.200000 X1.2
1.230000 X1.23
1.234000 X1.234
1.234565 X1.235
1.234333 X1.234

BEGIN{
n = 0
printf "%f\tX%s\n",n ,cut_out( n )
n = 0.0004
printf "%f\tX%s\n",n ,cut_out( n )
n = 0.0009
printf "%f\tX%s\n",n ,cut_out( n )
n = 1
printf "%f\tX%s\n",n ,cut_out( n )
n = 1.2
printf "%f\tX%s\n",n ,cut_out( n )
n = 1.23
printf "%f\tX%s\n",n ,cut_out( n )
n = 1.234
printf "%f\tX%s\n",n ,cut_out( n )
n = 1.234564789
printf "%f\tX%s\n",n ,cut_out( n )
n = 1.234333333
printf "%f\tX%s\n",n ,cut_out( n )
}

# 小数点以下の不要なゼロを出力しない ===============
function cut_out(adrs_dat){
if ( abs(adrs_dat + 0) < 0.001){
new_string = "0"
return new_string
exit
}
string = sprintf("%-.3f", adrs_dat + 0 )
if( index(string,/[0]+$/) == 0 )
m = length(string)
else
m = index(string,/[0]+$/) - 1
# m = index(string,/[0]+$/)
new_string = substr(string,1,m)
return new_string
}

# アブソリュート関数 ===============
function abs(n){
return ( n < 0 ) ? -n : n
}

   返信   修正・削除 親記事  最上段  最下段
 
  [1248] 出力フォーマット  ZENKYU  11/12/10 土 20:02  

mmyさん、みなさんこんにちは。

AWKを使って次のようにNCデータを処理しています。

printf "G00 Z%.3f\n" , safe_z

この出力フォーマットですとたとえばsafe_zが「2」の場合
G00 Z2.000
という形で出力されます。この少数点以降の不要なゼロを
出力しないようにするにはどのようにフォーマットを指定したらいいのでしょうか。

C言語などではできますか?それとも
独自のファンクションを作って処理をしないとできないでしょうか。

   返信   修正・削除 最上段  最下段
 

  [1249] Re: 出力フォーマット  乱造  11/12/11 日 21:24  

http://www.osaka-kyoiku.ac.jp/~kokugo/nonami/awk/awkmini.html

まったくわかってないのに検索だけしてみました
%dとか%gとかはだめかなあ
たぶん小数点もなくなっちゃうからだめでしょうねえ
fのまえの数字が小数点以下の桁数らしいので
%.0fとかできないでしょうかねえ

awkをインストールしたけど、動かし方がわからないので
想像だけです
すいません

   返信   修正・削除 親記事  最上段  最下段
 

  [1250] Re: 出力フォーマット  乱造  11/12/12 月 06:40  

>%.0fとかできないでしょうかねえ

もともと小数点3桁が必要なのに、これでは
NCデータがたいへんなことになりますね(^^

やはり、2回処理するしかないのでしょうかねえ

   返信   修正・削除 親記事  最上段  最下段
 

  [1251] Re: 出力フォーマット  乱造  11/12/12 月 22:03  

safe_z=2.000
gcode= "G00 Z"safe_z
print gcode
y = match(gcode,/\./)
print y
if(y ==0)
{ gcode= gcode"." }

n = sub(/\.000/,".",gcode)

print gcode


なんかすごく頭悪いことしてるみたい

   返信   修正・削除 親記事  最上段  最下段
 

  [1252] Re: 出力フォーマット  ZENKYU  11/12/12 月 22:22  

乱造さん、ど〜もです。

いろいろやってはみたのですが、どうも希望するかたちにできなくて
これまでずっと G01 X50.000 Y40.000 Z25.600 のように
無駄なゼロがついたデータで加工してます。

それほど大きなサイズのデータを扱っているわけでもないですし
作成したあとで処理することも出来なくはないんですけど
もうちょっと簡単に出来ないもんかなと。

   返信   修正・削除 親記事  最上段  最下段
 

  [1253] Re: 出力フォーマット  乱造  11/12/13 火 12:29  

正規表現で、リーディングゼロを表示させない方法があればいいのでしょうけど
どうも、ないみたいですねえ
やはり、自分でつくるしかないのでは?

あとは、C言語などに堪能なかたがたに、お願いしましょう

   返信   修正・削除 親記事  最上段  最下段
 

  [1254] Re: 出力フォーマット  mmy  11/12/14 水 10:02  

0(ゼロ)以外は全て小数点付きのデータで良いの?
小数点以下3桁のNCの場合
0.001 と 1 は同値を表すけど、文字数は 5 と 1 で、だいぶ違うよね♪
プログラム自体は、難しくないけど
ルールが分からないとフォーマットが決まらないです。

   返信   修正・削除 親記事  最上段  最下段
 

  [1255] Re: 出力フォーマット  ZENKYU  11/12/14 水 21:53  

mmyさん、ばんは〜

>0.001 と 1 は同値を表すけど、文字数は 5 と 1 で、だいぶ違うよね♪

そうなりますね。微小線分の連続したデータであればインクレで
少数点無しのほうがデータサイズが小さくなるのは判ります。

ぼくが作成しているのは簡単な二次元輪郭のデータで
G90
G00 X100.000 Y0.000
G00 Z5.000
G01 Z2.000 F200
G01 Z-3.000 F50
G41 D01 G01 X105.000 Y0.000 F300
G01 X105.000 Y20.000
G03 X95.000 Y30.000 I-10.000 J0.000
G01 X0.000 Y30.000
G40 G01 X0.000 Y25.000
G00 Z50.000
G00 X0 Y0

のようなかんじ。また深さを変化させてXY輪郭の繰り返しの
データが多いので小数点以下のゼロが目立ちます

>0(ゼロ)以外は全て小数点付きのデータで良いの?
>ルールが分からないとフォーマットが決まらないです。
小数点以下の不要なゼロを出力せず
G03 X95. Y30. I-10. J0.
のようなかたちにしたいのです。

数値としてではなく、文字列に変換して出力すれば出来るのかな?

   返信   修正・削除 親記事  最上段  最下段
 

  [1256] Re: 出力フォーマット  ZENKYU  11/12/14 水 23:35  

数値を文字列に変換
文字数を調べ n に代入し、一文字ずつ配列に格納
n 文字目から、n−1 文字目、n−2 文字目の順に見て
ゼロ以外(1−9)が何文字目にあるか調べ m に代入。
1文字目から m 文字目までを出力する。

こんな手順になるんでしょうか?頭痛くなりそうでっす

   返信   修正・削除 親記事  最上段  最下段
 

  [1257] Re: 出力フォーマット  ゆず  11/12/15 木 14:56  

みなさん、こんにちは。ゆずです。

printf "G00 Z%df\n" , safe_z
safe_z=2.

じゃ、だめですか?

ご参考までに

print 文を数値を出力するために使った場合、awkは内部で
数値を (その数値を表す)文字列に変換し、その文字列を出力する。 awkはこの変換動作のためにsprintf関数を使用する。

x=97.5

printf(":%d\n",x) #整数として出力
printf(":%5d\n",x)     #5桁で右詰の整数として出力
printf(":%e\n",x)     #浮動小数点数(eの後の数字                  は10の累乗を表す)
printf(":%7.2f\n",x) #浮動小数点数、7桁で小数第                  2位まで
printf(":%6.2f\n",x) #浮動小数点数、6桁で小数                   第2位まで
printf(":%5.2f\n",x) #浮動小数点数、5桁で小数                   第2位まで
printf(":%4.2f\n",x) #浮動小数点数、4桁で小数                   第2位まで
print "-------------"

   返信   修正・削除 親記事  最上段  最下段
 

  [1258] Re: 出力フォーマット  mmy  11/12/22 木 20:08  

こんなもんでどう?
NC_to_NC.exe にドラッグ&ドロップで変換します。

改訂しました。(2011/12/20)
改訂しました。(2011/12/21)

改訂しました。ver 0.95 (2011/12/22) これを使って下さい。
ver 0.96 の方が良いかも〜♪

あっ、ちなみにアドレス重複チェックもできるかも〜♪

   返信   修正・削除 親記事  最上段  最下段
 

  [1259] Re: 出力フォーマット  ZENKYU  11/12/16 金 21:20  

ゆずさん、こんにちは。

参考までにとして書いていただいてる内容は承知しています。
AWKの書式としては変ですけど・・・

>printf "G00 Z%df\n" , safe_z

この文で、整数と浮動小数点数の両方を指定していますが
このような書き方もあるのでしょうか。

mmyさん、あす兵庫までお出かけするのでちょっと返事が遅くなります。

   返信   修正・削除 親記事  最上段  最下段
 

  [1260] Re: 出力フォーマット  MAM  11/12/23 金 09:51  

みなさん、こんにちは
mmyさん、使いやすいものを有難うございます。
自分のは,いちいち桐を起動しなくちゃいけなかったもので...

きちんと重複チェックできます。(ver0.95)
あり難く使わせて頂きます。
欲を言えば重複部分はメッセージのみで最後まで実行して
くれるとうれしいです。

   返信   修正・削除 親記事  最上段  最下段
 

  [1261] Re: 出力フォーマット  mmy  11/12/26 月 15:46  

こんなもんかな?
無保証・無責任ですので、検証は自分でやってね♪

   返信   修正・削除 親記事  最上段  最下段
 

  [1263] Re: 出力フォーマット  MAM  11/12/28 水 17:36  

mmyさん、こんにちは
そして有難うございます。
チェックしましたら(4箇所),エラーが多すぎますと言われちゃいました。感謝です。

   返信   修正・削除 親記事  最上段  最下段
 
  [1235] マクロチェック  MAM  11/11/11 金 12:31  

こんにちは、お世話になります。
困った問題が発生しました。
マクロ呼び出し時にG65X10.Y20.Y40.Z-10.
のように引数が複数あった場合にエラーを
返せる条件式をお教えください。
なにかヒントでもよいのでよろしくお願いします。

   返信   修正・削除 最上段  最下段
 

  [1236] Re: マクロチェック  乱造  11/11/11 金 23:30  

残念ながら、マクロでどうにかできる問題ではないようです

16i-Mの場合ですけど
パラメータ3403#6で
同一ブロックに同じアドレスが2つ以上指令された場合
アラームとする
パラメータがあります
どうしてもとなれば
これを有効にするしかないのでは?

そうすると、マクロの引数でijkijk...の繰り返しで
指定する方法は使えなくなると思いますが。。。

   返信   修正・削除 親記事  最上段  最下段
 

  [1237] Re: マクロチェック  乱造  11/11/12 土 09:31  

無理やり、マクロでチェックするようなプログラムを
つくってみました
1つの変数ごとに分解して
それを#101〜#133に仮にいれておいて
重複して設定しようとしたら
アラームにする

非常に使いづらいマクロ
これではせっかくのマクロの使いやすさまったくなくなってしまいます

まあ、お話の種として。。。。

O1(MAIN)
....
....
....
M98P100 (INIT)
#24=10
G65P101X#24 (CHECK)
#25=40
G65P101Y#25 (CHECK)
#26=-10
G65P101Z#26 (CHECK)
M98P100 (INIT)

G65P9010X#24Y#25Z#26(実際のマクロ)
...
M30



O100(INIT)
#1=100
WHILE[#1LE133]DO1
#[#1]=#0
#1=#1+1
END1
M99

O101(CHECK)
#100=1
N10IF[#100NE#0] GOTO 20
#100=#100+1
IF [#100GT33]GOTO99
GOTO10
N20IF [#[#100+100]EQ #0 THEN #[#100+100]=#[#100]
GOTO99
N30#3000=199(DOUBLE VALUE)
N99 M99

   返信   修正・削除 親記事  最上段  最下段
 

  [1238] Re: マクロチェック  乱造  11/11/12 土 12:47  

間違ってる

O101(CHECK)
#100=1
N10IF[#[#100]NE#0] GOTO 20
#100=#100+1
IF [#100GT33]GOTO99
GOTO10
N20IF [#[#100+100]EQ #0 ]THEN #[#100+100]=#[#100]
GOTO99
N30#3000=199(DOUBLE VALUE)
N99 M99

ほかにも間違いあるかも

ncがないので確認できませんので
なにをしたいのかということを汲み取っていただき
修正して読んでください

   返信   修正・削除 親記事  最上段  最下段
 

  [1239] Re: マクロチェック  euclid3  11/11/12 土 22:59  

>マクロ呼び出し時にG65X10.Y20.Y40.Z-10.

20か40のどちらで実行されるのか興味あります、
多分、後の40でしょうか?

   返信   修正・削除 親記事  最上段  最下段
 

  [1240] Re: マクロチェック  ZENKYU  11/11/12 土 23:13  

>20か40のどちらで実行されるのか興味あります、

同じ変数を指令した場合は後からのものが有効となる。
と、記載されています。

>多分、後の40でしょうか?

なので、正解!
これはマクロ呼び出しに限らず通常の移動指令でも同様ですよね。

   返信   修正・削除 親記事  最上段  最下段
 

  [1241] Re: マクロチェック  MAM  11/11/14 月 15:11  

返信ありがとうございます。
>パラメータ3403#6で
>同一ブロックに同じアドレスが2つ以上指令された場合
>アラームとする
マクロ文もチェックできるのですね。知りませんでした。
最終手段で使ってみます。
そんなに複雑なマクロではないので、CAMで作った穴位置
データをコピペで修正したときの間違いなのですが...
乱造さんのをヒントにやってみます。
うまくいったら報告します。

   返信   修正・削除 親記事  最上段  最下段
 

  [1242] Re: マクロチェック  乱造  11/11/14 月 22:49  

MAMさん、こんばんわ
>そんなに複雑なマクロではないので、CAMで作った穴位置
>データをコピペで修正したときの間違いなのですが...

定型的な処理なら、エディターのスクリプトで自動処理されるようなほうがいいような、気がします

といって、わたしには、そっちの知識はありませんけど(^^;

   返信   修正・削除 親記事  最上段  最下段
 

  [1243] Re: マクロチェック  MAM  11/11/28 月 09:08  

乱造さん、こんにちは
NCのマクロでは諦めました。
エディタではないですが、データベースの桐で
とりあえずやってみました。興味がある方は
みてください。とりあえず、ですから
不具合がありましたらご勘弁を...

   返信   修正・削除 親記事  最上段  最下段
 

  [1244] Re: マクロチェック  乱造  11/11/28 月 21:43  

MAMさん
さすがですね。
やはり、NCマクロでは、厳しいと思います
融通が利くのはパソコンでしょうね

わたしも、なにか言語を覚えようかと思って
はや20年。思っただけでは、覚えられません(^^;

   返信   修正・削除 親記事  最上段  最下段
 

  [1245] Re: マクロチェック  mmy  11/11/29 火 08:30  

マクロでのチェックはできないでしょうね。

乱造さん
「Visual C#」でググってみてください。
これからは、これだと思います。

   返信   修正・削除 親記事  最上段  最下段
 

  [1246] Re: マクロチェック  おいくまん  11/11/29 火 22:21  

これからはじめる人はいいけどね。

今まで CやC++で作っていた人は混乱するよね。

   返信   修正・削除 親記事  最上段  最下段
 

  [1247] Re: マクロチェック  ZENKYU  11/12/03 土 21:38  

>「Visual C#」でググってみてください。

うっ!見るだけで頭が拒否しました

   返信   修正・削除 親記事  最上段  最下段
 
  [1228] ヒントください  マクロ初心者  11/06/08 水 22:30  

こんにちわ。
マクロを作りたく机に向かいましたが、考え方がぐちゃぐちゃになって前にすすみません。

今作ろうとしているマクロですが…。
ワークをバイスでつかみ上面をフルバックで寸法どうりに切削ということです。
使うフルバックは1つでツール選定交換もいりません。
自分としてはバイスの下面を高さ0として、プラス寸法をプログラムに入力して切削したいと思っています。
また、ヨウカンを使ってワークを浮かせたときにも対応できるよう、ヨウカンの厚みを入力すればヨウカン分の厚みをシフトできるようにしたいです。

さらにZ切り込み量、最終Z切り込み、(欲を言えば、最終切り込みの時に機械原点に戻って一時停止の有無)を選定できたらうれしいです。


わかりずらいかもしれませんが、基本的にワークの上面加工で寸法どおりに決めたいということです。

使用機種はファナックのプロAです。
ワークの削りだしに使おうかと思っております。
何を基準に考えたらいいかもわからず困っております。
ヒントでもよいので、教えてください。
宜しくお願いします。

   返信   修正・削除 最上段  最下段
 

  [1229] Re: ヒントください  乱造  11/06/09 木 12:24  

まず、今使ってるNCデータのなかから
変数にする部分をチェックします
それから、
入力する変数で、その部分を書き換えてみる

ということをする
のが私のスタイルです。
また晩にでも。。。。

   返信   修正・削除 親記事  最上段  最下段
 

  [1230] Re: ヒントください  マクロ初心者   11/06/09 木 13:45  

>>乱造様
>>今使ってるNCデータのなかから
現在ではワーク削りだしを汎用機で行っているため、実際プログラムがありません^^;
それをNCフライス機で半自動化できればと考えております。

今仕事終わって時間ある時に少しずつ考えていき
図示しながら思考しております。
なかなか進みませんが、なんとか使えるプログラムにしたいと思っております。
よろしくお願いします。

   返信   修正・削除 親記事  最上段  最下段
 

  [1231] Re: ヒントください  乱造  11/06/10 金 02:51  

こんな感じでしょうかね。
使ってる引数のアドレスのセンスは、いまいちですが
あとは、肝心の中身ですね

   返信   修正・削除 親記事  最上段  最下段
 

  [1232] Re: ヒントください  乱造  11/06/10 金 03:13  

肝は、粗取りの繰り返し処理のところ
だと思います
参考までに。
眠いので、まちがってたらごめんなさい

K[#5]は、粗加工の1回あたりの切り込み

#10=#1+#2+#3
#11=FIX[#7/#5]
WHILE[#11GE0]DO1
#30=#10+#11*#5
G1Z#30 F300
X-#23 F900
G0 Z[#30+1]
G0 X0Y0
#11=#11-1
END1

   返信   修正・削除 親記事  最上段  最下段
 

  [1233] Re: ヒントください  マクロ初心者  11/06/10 金 21:28  

>>乱造様
わざわざ図つきで分かりやすくありがとうございます。
また書いてくださったマクロプログラム、時間を頂いて勉強させてください。
自分なりにも少し考えてみますので、詰まったらここに載せさせてください。

   返信   修正・削除 親記事  最上段  最下段
 

  [1234] Re: ヒントください  乱造  11/06/11 土 04:03  

実用的なマクロプログラムになるかどうかは
エラー処理がちゃんとできてるかどうかです

ワークの高さがバイスの高さより低かったらエラーにするとか
アドレスがなかったら、どうするとか。

がんばってください

   返信   修正・削除 親記事  最上段  最下段
 
  [1227] 最近  ルパン  11/06/02 木 22:42  

ここがおとなしいですね。。。
なにか話題でもいれてもりあげましょうよ〜!!!

   返信   修正・削除 最上段  最下段

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15]
- 以下のフォームからもご自分の投稿記事を修正・削除することができます -
処理   記事No   pass 

- Joyful Note - CGI-design - isso - kaism - 電光! - modified by mmy ver 2.52 -