<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Fanuc | じじぃの引出し</title>
	<atom:link href="https://www.kazuban.com/blog/tag/fanuc/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.kazuban.com/blog</link>
	<description>なにかしら、皆さんの参考になれば幸いです！</description>
	<lastBuildDate>Wed, 25 Dec 2024 02:15:56 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://www.kazuban.com/blog/wp-content/uploads/2020/05/cropped-ICON-1-32x32.png</url>
	<title>Fanuc | じじぃの引出し</title>
	<link>https://www.kazuban.com/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>カスタムマクロの読みやすい書き方を考えてみる</title>
		<link>https://www.kazuban.com/blog/custom-macro-2/</link>
					<comments>https://www.kazuban.com/blog/custom-macro-2/#comments</comments>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Tue, 21 Feb 2023 21:38:00 +0000</pubDate>
				<category><![CDATA[NC]]></category>
		<category><![CDATA[カスタムマクロ]]></category>
		<category><![CDATA[Fanuc]]></category>
		<category><![CDATA[G-Code]]></category>
		<category><![CDATA[NCプログラム]]></category>
		<category><![CDATA[ファナック]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=7445</guid>

					<description><![CDATA[サイトへのコメントで記事ネタをいただきました。確かに、ネットなどで調べても、変数や分岐などの構文の書き方を説明している記事はよく見かけますが、読みやすさや保守を題材にした記事はあまり見つかりません。筆者自身ほとんど独学な [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><a href="https://www.kazuban.com/blog/custom-macro/#comment-782">サイトへのコメントで記事ネタをいただきました。</a><br>確かに、ネットなどで調べても、変数や分岐などの構文の書き方を説明している記事は<br>よく見かけますが、読みやすさや保守を題材にした記事はあまり見つかりません。<br>筆者自身ほとんど独学なので、はたして的を射た記事になるのかは、「？」ですが、<br>自分の経験から、考えてみようと思います。<br>ご意見やアドバイスなどいただければ、うれしいです。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">変数</a><ol><li><a href="#toc2" tabindex="0">とりあえず、ローカル変数（#1～#33）を使おう</a></li><li><a href="#toc3" tabindex="0">変数宣言</a></li></ol></li><li><a href="#toc4" tabindex="0">コメント</a></li><li><a href="#toc5" tabindex="0">ユーザー設定パラメータ</a><ol><li><a href="#toc6" tabindex="0">ユーザー定義変数</a></li><li><a href="#toc7" tabindex="0">マクロ仕様の説明</a></li><li><a href="#toc8" tabindex="0">ファイル名仕様</a></li></ol></li><li><a href="#toc9" tabindex="0">マクロ呼び出し（G65、G66）の引き数</a><ol><li><a href="#toc10" tabindex="0">引数対応変数のコメントの活用</a></li></ol></li><li><a href="#toc11" tabindex="0">モーダル情報変更の注意点</a><ol><li><a href="#toc12" tabindex="0">マクロ内でのG90,G91指令は注意</a></li><li><a href="#toc13" tabindex="0">モーダル情報を得るシステム変数</a></li><li><a href="#toc14" tabindex="0">マクロの最初で取り出し、終了前で戻す</a></li></ol></li><li><a href="#toc15" tabindex="0">サンプルデータ</a><ol><li><a href="#toc16" tabindex="0">メインプログラム</a></li><li><a href="#toc17" tabindex="0">マクロ・サブプログラム</a></li><li><a href="#toc18" tabindex="0">加工位置データ</a></li></ol></li><li><a href="#toc19" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">変数</span></h2>



<p class="wp-block-paragraph">C言語など、プログラミング言語でコードを書く場合、悩ましいのが「変数の名前」です。<br>変数名は、後日読み直す時など、あまり単純な名前だけにすると、この変数は何だったっケ？<br>と、変数の分析からから始める必要があり、分かりづらいコードになってしまいます。<br>プログラミングの変数名は、使える文字（言語によっては漢字も）や文字数の制限も少なく<br>自由度があるので悩んでしまいます。<br>しかしカスタムマクロは「#」+「数字」なので、悩みは少ないかもしれませんが<br>逆に変数名が単純なこの言語仕様から、結局分かりづらいコードになってしまいます。<br>さらに数字の範囲で、ローカル変数、コモン変数、システム変数と性質が変わるので<br>ゴチャゴチャです。<br></p>



<h3 class="wp-block-heading"><span id="toc2">とりあえず、ローカル変数（#1～#33）を使おう</span></h3>



<p class="wp-block-paragraph">ローカル変数は、プログラムが異なる場合、同じ変数でも、それぞれ別の意味として作用しますが<br>コモン変数「#100～」は同じ変数として扱われます、<br>したがって、マクロプログラムのなかで、別マクロを呼び出した場合、そのマクロによって<br>書き換えられてしまう危険性があります。<br>特に必要性がない場合には、ローカル変数を使用した方が無難です。</p>



<h3 class="wp-block-heading"><span id="toc3">変数宣言</span></h3>



<p class="wp-block-paragraph">C言語などは、これから「使う変数名」を必ず変数宣言をする必要がありますが<br>必須でない言語も多くあります。<br>カスタムマクロも</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">#1=50.0<br>G00 X#1</p>
</blockquote>



<p class="wp-block-paragraph">このように、いきなり変数を使用する事ができます。<br>ただし、長く複雑になるにつれて、変数の役目が分からなくなってきます。<br>プログラム上部で、使用する変数を初期化しておいたりコメントとして、<br>明示しておく事でこのマクロではどんな目的で、どの変数を使っているのか、<br>分かりやすくなります</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">(&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;)<br>#10=#0 (Tool Length)<br>#11=#0 (T)<br>#12=#0 (V)<br>#13=#0 (f)<br>#14=#0 (SP)<br>#15=#0 (F)<br>(&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;)</p>
</blockquote>



<p class="wp-block-paragraph">こんな感じです。ここでは、使用する変数を「#0」で初期化しています。<br>「#0」は「0（ゼロ）」ではありません。「空」です。<br>コントローラ側でマクロ参照すると、何も入っていない状態になります。<br>特に必須ではないですが、使う予定の番号が分かり、逆に使っていない番号もわかります。<br>さらに「空」にしておいたほうが、思わぬミスの防止になるかもしれません。</p>



<h2 class="wp-block-heading"><span id="toc4">コメント</span></h2>



<p class="wp-block-paragraph">（　）で囲む事で、制御機が無視する文字を入力できます。<br>一般的には、その変数や箇所の用途が分かりやすいように「コメント」を付加します。<br>制御機は無視するので、コメントの有無は機械動作に影響ありませんが<br>他人のマクロや自作のものでも、後日読み直す場合に、理解しやすくなります。<br>重要な変数には、必ずコメントを付加しましょう！<br>ただ、制御機によっては、「漢字」を受け付けません。<br>英語にするか？、ローマ字にするか？読む人が分かりやすいコメントを考えてください。<br>ちなみに、ソディックは漢字が使えるので、かなり分かりやすいです。</p>



<h2 class="wp-block-heading"><span id="toc5">ユーザー設定パラメータ</span></h2>



<p class="wp-block-paragraph">カスタムマクロは、ユーザーがパラメータを変更する事で、類似形状定義や面倒な計算を<br>自動的に定義させCAMを使用しなくても汎用的な加工データを作成する事ができます。</p>



<h3 class="wp-block-heading"><span id="toc6">ユーザー定義変数</span></h3>



<p class="wp-block-paragraph">利用するユーザーが定義するパラメータは、変数を利用しますから、<br>この変数は分かりやすいように、プログラム上部にコメント付きで書くようにします。<br>利用ユーザーは、この変数を変更するだけで、希望の加工データが作成できるようにしておきます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">G90G00G17G40G80G49<br>(++++++++++++++++++++)<br>#1=54. (WORK ORIGIN)<br>#2=5.7 (Hole Dia)<br>#3=-16.0 (Drill Shoulder Heigth)<br>#4=0.0 (Surface Coordinat)<br>#5=50.0 (Initial Point)<br>#6=5.0 (R Point)<br>#7=3.0 (Q )<br>#8=8. (Coolant )<br>(+++++++++++++++++++)</p>
<cite>・　<br>・</cite></blockquote>



<p class="wp-block-paragraph">このように、上部にまとめておき、利用者の編集部分は、コメント文で区切りをいれ<br>分かりやすくしておきます。</p>



<h3 class="wp-block-heading"><span id="toc7">マクロ仕様の説明</span></h3>



<p class="wp-block-paragraph">プログラム最上部には、そのマクロの説明や、バージョン、作成日、作成者など<br>記入しておくと、管理しやすくなります。</p>



<blockquote class="wp-block-quote is-style-default is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">%<br>O1234<br>(+++++++++++++++++++++++++++++++)<br>( Drill Program Ver1.0 )<br>( 2023-02-18 By Kazuban)<br>(++++++++++++++++++++++++++++++)</p>
</blockquote>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading"><span id="toc8">ファイル名仕様</span></h3>



<p class="wp-block-paragraph">コントローラによっては、「O番号」でなく、ファイル名が使用できる機械もあります。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">%<br>O1234<br>・<br>・</p>



<p class="has-large-font-size wp-block-paragraph"><strong>↓</strong></p>



<p class="wp-block-paragraph">%<br>&lt;DRILL.NC&gt;<br>・<br>・</p>
</blockquote>



<p class="wp-block-paragraph">このように、O番号でなく、「 &lt;　&gt; 」　でファイル名を囲みます。<br>呼び出しは、P「番号」でなく同様に「 &lt;　&gt;」で呼び出します。<br>あまり一般的ではないので、もしかすると、調べてみるとあなたの機種も可能かもしれません。<br>ちなみに、ソディックは「 (　) 」になります。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">M98&lt;DRILL.NC&gt;</p>



<p class="wp-block-paragraph">G65&lt;DRILL.NC&gt;A5.7B2</p>
</blockquote>



<p class="wp-block-paragraph">例えば、「センター」「下穴」「面取り」「タップ」と複数のマクロを呼び出すプログラムの場合<br>O番号で呼び出すよりも、分かりやすく、管理も楽になります。</p>



<h2 class="wp-block-heading"><span id="toc9">マクロ呼び出し（G65、G66）の引き数</span></h2>



<p class="wp-block-paragraph">マクロ呼び出しでマクロプログラムを呼び出す場合、引数を指定して変数を渡す事ができます。<br>したがって、上の例のように、プログラムを開いて変数を編集するのではなく<br>呼び出しの引き数で変数を設定する事ができます。<br>これは、便利なようですが、<a href="https://www.kazuban.com/blog/chamfering-with-g66/#outline__2_1">引数のワードに対応している変数番号がバラバラ</a>で<br>非常に分かりづらく間違いやすいです。</p>



<h3 class="wp-block-heading"><span id="toc10">引数対応変数のコメントの活用</span></h3>



<p class="wp-block-paragraph">G65などマクロ呼び出しの前に、引数対応変数をコメントにしておくと、<br>プログラムする場合も、編集する場合も、わかりやすくミスも防げます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">G90G00G17G40G80G49<br>(++++++++++++++++++++)<br>#1=54. (WORK ORIGIN)<br>#2=5.7 (Drill Dia)<br>#3=-16.0 (Drill Shoulder Heigth)<br>#4=0.0 (Surface Coordinat)<br>#5=50.0 (Initial Point)<br>#6=5.0 (R Point)<br>#7=3.0 (Q )<br>#8=8. (Coolant )<br>(+++++++++++++++++++)<br>・<br>・<br>(++++ Drill +++++++++)<br>(A:#1=#2_Drill Dia)<br>(B:#2=#3_Drill Shoulder Depth)<br>(C:#3=#4_Surface Coordinat)<br>(I:#4=#5_Initial Point)<br>(Q:#17=#7_Q)<br>(R:#18=#6_R Point)<br><font color="RED"><strong>(&#8212;- argument table &#8212;&#8212;)</strong></font><br>(<strong>A:#1 B:#2 C:#3 I:#4</strong> J:#5 K:#6 D:#7 E:#8 F:#9 H:#11 M:#13)<br>(<strong>Q:#17</strong> <strong>R:#18</strong> S:#19 T:#20 U:#21 V:#22 W:#23 X:#24 Y:#25 Z:#26)<br>(&#8212;&#8212; Drill Macro Read &#8212;&#8212;)<br>G65 P1234 <strong>A</strong>[#2] <strong>B</strong>[#3] <strong>C</strong>[#4] <strong>I</strong>[#5] <strong>Q</strong>[#7] <strong>R</strong>[#6]</p>
</blockquote>



<p class="wp-block-paragraph">マクロで使用するメインのユーザー定義の変数は、「#2」～「#7」なのに対して、<br>呼び出されるドリルマクロ「O1234」は、「#1、#2、#3、#4、#17、#18」<br>の変数を使い、プログラムします。<br>間違えろと言わんばかりですが、コメント付加で少しはミスも防げます。<br>Q、Rアドレスは、一例として固定サイクルに似せただけで、特に必須ではありません。</p>



<h2 class="wp-block-heading"><span id="toc11">モーダル情報変更の注意点</span></h2>



<p class="wp-block-paragraph"><a href="https://www.kazuban.com/blog/nc-program-g91/">「G91は意外と便利」</a>という記事で少しふれましたが、<br>複数個所に輪郭加工させるマクロを作成する場合、「G91」と「G66」を使うと結構便利です。<br><a href="https://www.kazuban.com/blog/nc-program-g91/#outline__1_3">こちらで紹介しているサブプログラム</a>をマクロ化すれば、真円切削するサイクルが作れます。<br>ところが、このようなモーダル情報をメインから呼び出されるマクロ内で<br>変更する場合には注意が必要です。</p>



<h3 class="wp-block-heading"><span id="toc12">マクロ内でのG90,G91指令は注意</span></h3>



<p class="wp-block-paragraph">メインプロの座標系指令（G90、G91）をマクロ内で変更した場合には注意が必要です。<br>マクロから戻った時点で、座標指令が変わってしまっていると、<br>メインプロだけ見ると、マクロ読み込み前の指令が目立つので、マクロ後の状態も<br>その状態（モーダル）だと思い込みやすいので大変危険です。<br>マクロでは、必ず元に戻すようなコードを書きましょう。<br>これは、座標系指令だけでなく、加工条件や主軸工具などのモーダル情報も同様です。<br>例えば、タッチプローブで測定させるマクロを利用する場合で、<br>そのマクロが内部でプローブと交換する仕様で測定後元の工具に戻さなかった場合、<br>マクロの呼び出し前と後で主軸工具が違う事になります。<br>モーダル情報は、マクロ終了時には、元に戻しておくほうが思わぬミスを回避できます。<br>X、Yなども、モーダルなので、前の行から動作のない軸は省略する場合もよくあります<br>これが、マクロを挟んだ場合、思わぬ位置誤動作になる事もあります。<br>X、Y、Z、など軸指令は、省略しないほうが安全ですし<br>マクロプログラムでは終了時に、主軸を安全位置へ退避させておくとより安全です。</p>



<h3 class="wp-block-heading"><span id="toc13">モーダル情報を得るシステム変数</span></h3>



<p class="wp-block-paragraph">モーダル情報は、システム変数の「#4001～」「#4100～」で取り出す事ができます。<br>制御機によっても違うと思うので、使用機械の取説の確認は必要ですが、<br>マクロ作成で利用できそうなシステム変数は下記になります。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">★モーダル情報<br>　#4001～#4030<br>　　下二桁はＧコードグループ番号<br>　　グループ01 : G00,G01,G02,G03,G04<br>　　グループ03 : G90,G91<br>　　グループ14 : G54,G55,G56,G57,G58,G59</p>



<p class="wp-block-paragraph">　#4107 : Ｄコード<br>　#4109 : Ｆコード<br>　#4111 : Ｈコード<br>　#4113 : Ｍコード<br>　#4114 : シーケンス番号<br>　#4119 : Ｓコード<br>　#4120 : Ｔコード</p>
<cite>★現在位置情報<br>　#5021～#5024 （X、Y、Z、４軸：機械座標系）<br>　#5041～#5044 （X、Y、Z、４軸：ワーク座標系）</cite></blockquote>



<p class="wp-block-paragraph">G90、G91 の情報は、「#4003」<br>現在のワーク座標系での、Ｚ軸座標は「#5043」<br>T番号は、「#4120」 から取り出せます。</p>



<h3 class="wp-block-heading"><span id="toc14">マクロの最初で取り出し、終了前で戻す</span></h3>



<p class="wp-block-paragraph">まったく、モーダル情報を扱わないマクロの場合とか、メインプロ側から呼び出す前後で<br>確実に処理する場合には不要だと思いますが、余裕があればやっておいたほうが安心です。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">#1=#4003 (G91orG90)<br>#2=#4120 (T No)<br>・・<br>T03 M06<br>G91 <br>・・<br>・・<br>G[#1]<br>T[#2] M06<br>M99<br>%</p>
</blockquote>



<h2 class="wp-block-heading"><span id="toc15">サンプルデータ</span></h2>



<p class="wp-block-paragraph">上記の事を考慮して、簡単なマクロサンプルを作ってみます。<br>このマクロは、単純にZ方向に切込み、径補正で真円加工し、<br>イニシャル点に戻るだけのマクロです。<br>ただし、段差等は考慮せず、加工上面がZ=0としています。<br>G66モーダル呼び出しを使用する事で、加工位置データも別サブプログラムにできます。<br>位置データを別プログラムにしておくと、同じ位置で別工程加工を行う場合に便利です。<br>例えば、同じ箇所に「ドリル」「穴荒加工」「穴仕上」「面取り」の工程がある場合<br>穴加工位置指令は、すべて同じデータを指定できます。</p>



<h3 class="wp-block-heading"><span id="toc16">メインプログラム</span></h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">%<br>O1234<br>(++++++++++++++++++++)<br>( Circle Milling Main Ver1.0 )<br>( 2023-02-18 By Kazuban)<br>(++++++++++++++++++++)<br>#1=54.(WORK ORIGIN)<br>#2=10.0(Ciecle Dia)<br>#3=-5.0(Depth)<br>#4=300.(Feed)<br>#5=100.(Depth-Feed)<br>#6=30.0(Initial-Point)<br>#7=5.0(R-Point)<br>#8=1.(D)<br>(++++++++++++++++++++)<br>#10=3.(T)<br>#11=#10(H)<br>#12=3500.(SP)<br>(++++++++++++++++++++)<br>G90G00G17G40G80G49<br>(++++++++++++++++++++)<br>N0001<br>G#1<br>T#10<br>M06<br>G90G00X0Y0<br>G43Z#6H#11<br>M01<br>( START )<br>G90G00<br>Z[#6]<br>S#12M03<br>M08<br>(++++++++++++++++++)<br>(A:#1 B:#2 C:#3 I:#4 J:#5 K:#6 D:#7 E:#8 F:#9 H:#11 M:#13)<br>(Q:#17 R:#18 S:#19 T:#20 U:#21 V:#22 W:#23 X:#24 Y:#25 Z:#26)<br>(++++++++++++++++++)<br>(A:#1=#2_Ciecle Dia)<br>(B:#2=#3_Depth)<br>(C:#3=#4_Feed)<br>(I:#4=#5_Depth-Feed)<br>(J:#5=#6_Initial-Point)<br>(K:#6=#7_R-Point)<br>(D:#7=#8_D)<br>(++++++++++++++++++)<br>G66P0101A[#2]B[#3]C[#4]I[#5]J[#6]K[#7]D[#8]<br>M98P1000(Position data)<br>G67<br>G90G00Z[#6]<br>M09<br>G91G28Z0<br>G91G49Z0<br>G90M05<br>( END )<br>M30<br>%</p>
</blockquote>



<h3 class="wp-block-heading"><span id="toc17">マクロ・サブプログラム</span></h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">%<br>O0101<br>(++++++++++++++++++++)<br>( Circle Milling Macro Ver1.0 )<br>( 2023-02-18 By Kazuban)<br>(++++++++++++++++++++)<br>(&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;)<br>(A:#1=#2_Ciecle Dia)<br>(B:#2=#3_Depth)<br>(C:#3=#4_Feed)<br>(I:#4=#5_Depth-Feed)<br>(J:#5=#6_Initial-Point)<br>(K:#6=#7_R-Point)<br>(D:#7=#8_D)<br>(&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;)<br>#10=[#1/2](Circle_Radius)<br>#11=[#6-#5](To R-Point)<br>#12=[#2-#6](To Depth)<br>(&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;)<br>#27=#4003<br>(&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;)<br>G90 G00<br>Z[#5]<br>G91<br>Z[#11]<br>G01 Z[#12] F[#4]<br>G01 G41 X[#10] Y0.0 D[#7] F[#3]<br>G03 X[-#1] Y0.0 I[-#10]<br>G03 X[#1] Y0.0 I[#10]<br>G01 G40 X[-#10] Y0.0<br>G90 G00 Z[#5]<br>G[#27]<br>M99<br>%</p>
</blockquote>



<h3 class="wp-block-heading"><span id="toc18">加工位置データ</span></h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">%<br>O1000<br>(++++++++++++++++++++)<br>( Hole Position )<br>(++++++++++++++++++++)<br>X50.Y50.<br>X50.Y-50.<br>X-50.Y-50.<br>X-50.Y50.<br>M99<br>%</p>
</blockquote>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading"><span id="toc19">まとめ</span></h2>



<p class="wp-block-paragraph">カスタムマクロを書く上においての、注意点や気にしたほうがいい点などまとめてみました。<br>メインプロだけの場合には、メインだけ確認すればいいですが、サブプロを呼び出す形式の場合<br>サブプロ内でのモーダル値の変更は、十分気を付ける必要があります。<br>マクロプログラムは、変数によりパラメータ化できるので、便利ではありますが「#」の羅列で<br>より分かりづらくなります。<br>使用する変数をまとめたり、コメント文をうまく使い、わかりやすくする工夫が必要です。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.kazuban.com/blog/custom-macro-2/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>カスタムマクロ、G66モーダル呼び出しで固定サイクルを自作してみる。</title>
		<link>https://www.kazuban.com/blog/chamfering-with-g66/</link>
					<comments>https://www.kazuban.com/blog/chamfering-with-g66/#comments</comments>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Mon, 30 May 2022 10:40:16 +0000</pubDate>
				<category><![CDATA[NC]]></category>
		<category><![CDATA[カスタムマクロ]]></category>
		<category><![CDATA[Fanuc]]></category>
		<category><![CDATA[G-Code]]></category>
		<category><![CDATA[NCプログラム]]></category>
		<category><![CDATA[ファナック]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=6649</guid>

					<description><![CDATA[前回、カスタムマクロプログラムの例として、ハイデンハインサイクルをマクロ化する例を紹介しました。 ハイデンハインサイクルに比べると、ファナック固定サイクルの機能は非常に貧弱ですが、カスタムマクロを自作する事で、無限に拡張 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">前回、カスタムマクロプログラムの例として、ハイデンハインサイクルをマクロ化する例を紹介しました。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-じじぃの引出し wp-block-embed-じじぃの引出し"><div class="wp-block-embed__wrapper">

<a href="https://www.kazuban.com/blog/heidenhain-from-macro/" title="カスタムマクロでハイデンハインサイクルを作ってみよう！" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="221" height="180" src="https://www.kazuban.com/blog/wp-content/uploads/2022/05/Driling.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.kazuban.com/blog/wp-content/uploads/2022/05/Driling.png 828w, https://www.kazuban.com/blog/wp-content/uploads/2022/05/Driling-300x245.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2022/05/Driling-768x626.png 768w" sizes="(max-width: 221px) 100vw, 221px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">カスタムマクロでハイデンハインサイクルを作ってみよう！</div><div class="blogcard-snippet internal-blogcard-snippet">最近、機械の立ち上げ作業でバタバタしていて、すっかり更新がご無沙汰しています。忘れられそうなので、５月の連休の空き時間で更新します。ネタとしては、以前から考えていたもので、ファナックカスタムマクロの使用例として、ハイデンハインサイクルをマクロ化してみたいと思います。ハイデンハインサイクルについては、...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.kazuban.com/blog" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">www.kazuban.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2022.05.05</div></div></div></div></a>
</div></figure>



<p class="wp-block-paragraph">ハイデンハインサイクルに比べると、ファナック固定サイクルの機能は非常に貧弱ですが、<br>カスタムマクロを自作する事で、無限に拡張する事が可能です。<br>今回は、カスタムマクロのモーダル呼び出し「G66」を利用して、穴を面取りするサイクルを作成してみようと思います。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">G66：マクロモーダル呼び出し</a></li><li><a href="#toc2" tabindex="0">引数と変数</a><ol><li><a href="#toc3" tabindex="0">引数</a></li></ol></li><li><a href="#toc4" tabindex="0">面取りの動作をマクロ化</a><ol><li><a href="#toc5" tabindex="0">真円をGコード化</a></li><li><a href="#toc6" tabindex="0">G91（相対座標系）に変換</a></li><li><a href="#toc7" tabindex="0">マクロ化</a></li><li><a href="#toc8" tabindex="0">面取りをプログラム化</a></li></ol></li><li><a href="#toc9" tabindex="0">メインプロ作成</a><ol><li><a href="#toc10" tabindex="0">変数化</a></li><li><a href="#toc11" tabindex="0">メイン内変数とマクロ内変数</a></li><li><a href="#toc12" tabindex="0">穴座標位置ファイル</a></li></ol></li><li><a href="#toc13" tabindex="0">G66 モーダル呼び出し　メインプロ</a></li><li><a href="#toc14" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">G66：マクロモーダル呼び出し</span></h2>



<p class="wp-block-paragraph"><strong>固定サイクル</strong>を呼び出すには、「G83 R5.0 Q2.0」のように引数により値を渡す事ができます。<br>単純な<strong>サブプログラム呼び出し</strong>「M98」は、引数により値を渡す事はできません。<br>しかし<strong>マクロ呼び出し</strong>は引数を渡す事ができますから、固定サイクルが自作できます。<br>マクロ呼び出しには「G65」という一行のみの単純呼び出し指令もありますが、<br>「G66」を使用すると、定義したサイクルを「X」「Y」座標指示のみで、モーダルで動作させる固定サイクル的な機能を実現できます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>G66</strong> P1234 A10.2 B5.0 C3.56<br>X0 Y10.0<br>X10.0 Y25.6<br>X-20.3 Y-56.2<br><strong>G67</strong></p></blockquote>



<p class="wp-block-paragraph">この例のように、「G67」でキャンセルされるまで、指定座標で「G66」の呼び出しを実行する事ができます。</p>



<h2 class="wp-block-heading"><span id="toc2">引数と変数</span></h2>



<p class="wp-block-paragraph">カスタムマクロでプログラミングする時に厄介なのが、変数です。<br>カスタムマクロの変数は「#」+「数値」で定義しますが、識別は「数値」のみなので、<br>他のプログラム言語に比べると後で読み返した時に、非常に分かりづらいです。<br>さらに、変数の種類は「ローカル」や「コモン」「システム」などありますが<br>その種類も「数値」の範囲を意識する必要もあります。<br>さらにさらにです、カスタムマクロに引数を渡す場合には、「#」ではなく、<br>「アルファベット」+「数値」で渡します。<br>例えば、「A10.5」と指令した場合には、マクロ内では、「#1=10.5」と扱われます。<br>なんとも、分かりづらい仕様です。<br>さらにさらにさらに、渡された、この「アルファベット」の引き数値と「#」変数番号が連続でなく、制限があったりします。<br>ほんと、他人が作成したマクロや、昔作ったマクロなど、解読するのに苦労します。<br>もしかすると、ユーザーに簡単に使用させないための、言語仕様かもしれませんね～。</p>



<h3 class="wp-block-heading"><span id="toc3">引数</span></h3>



<p class="wp-block-paragraph">カスタムマクロの引き数は、「アルファベット」+「数値」で指令しますが、その指令方法には２種類あります。<br>１・「G」「L」「N」「O」「P」以外のアルファベット</p>



<pre class="wp-block-preformatted" style="font-size:18px">A:#1　B:#2　C:#3　D:#7　E:#8　F:#9　H:#11　I:#4　J:#5　K:#6 　M:#13
Q:#17　R:#18　S:#19　T:#20　U:#21　V:#22　W:#23　X:#24　Y:#25　Z:#26</pre>



<p class="wp-block-paragraph">２・「A」「B」「C」と「I」「J」「K」の多重指令</p>



<pre class="wp-block-preformatted" style="font-size:18px">A:#1　B:#2　C:#3　I:#4　J:#5　K:#6　I:#7　J:#8　K:#9　I:#10　J:#11　K:#12 ～　　K:#33</pre>



<p class="wp-block-paragraph">１．は、マクロを使う立場からは、２１種類のアルファベットを使えるので、識別しやすいと思いますが、アルファベットに対応する「#」番号が連続していないので、作る立場からは面倒です。<br>２．は、「#」番号は連続しますが、「I」「J」「K」が連続するので、使用する側からは間違いやすいかもしれません。</p>



<p class="wp-block-paragraph">ここでは、１．の方法で作成したいと思います。</p>



<h2 class="wp-block-heading"><span id="toc4">面取りの動作をマクロ化</span></h2>



<h3 class="wp-block-heading"><span id="toc5">真円をGコード化</span></h3>



<p class="wp-block-paragraph">まずは、Φ２０真円輪郭をGコード化してみます。<br>分かりやすいように、G90（絶対座標系）モードで作成します。</p>



<pre class="wp-block-preformatted has-medium-font-size">G90G00G17
G00X0Y0Z30.
G00Z5.
G01Z-10.F500
G01X10.
G03X-10.I-10.
G03X10.I10.
G01X0
G00Z30.</pre>



<p class="wp-block-paragraph">こんな感じでしょうか？進入Ｒは省略しています。<br>円の定義は１行で定義可能ですが、一定義で一周させると、昔うまく処理できない制御機や<br>CAMがあったので、２分割しています。</p>



<h3 class="wp-block-heading"><span id="toc6">G91（相対座標系）に変換</span></h3>



<p class="wp-block-paragraph">今回は自作固定サイクルを目指していますが、通常固定サイクルは<br>・サイクル動作の定義<br>・加工位置指令で、その位置へ移動しサイクル加工<br>・サイクル動作のキャンセル<br>こんな動作ですね。<br>このように、位置決めした後、同じ動作をさせたい場合には、「G91」が便利です。<br>G91に関してはこちらでも紹介してあるので、興味ある方は参考にしてください</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-じじぃの引出し wp-block-embed-じじぃの引出し"><div class="wp-block-embed__wrapper">

<a href="https://www.kazuban.com/blog/nc-program-g91/" title="NCプログラム／G91は意外と便利" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img fetchpriority="high" decoding="async" width="320" height="166" src="https://www.kazuban.com/blog/wp-content/uploads/2020/03/G90G91ConvertAbout.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.kazuban.com/blog/wp-content/uploads/2020/03/G90G91ConvertAbout.png 687w, https://www.kazuban.com/blog/wp-content/uploads/2020/03/G90G91ConvertAbout-300x156.png 300w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">NCプログラム／G91は意外と便利</div><div class="blogcard-snippet internal-blogcard-snippet">下記で説明しましたが、ファナック言語で位置を司令するには「G90:絶対座標系」と「G91:相対座標系」の２種類の方法があります。通常は、図面を見ながらプログラムする場合など、「G90:絶対座標系」のほうが分かりやすいので、こちらを使用する場合が多いと思いますが、同じ形状が並んでいる場合や、穴やポケッ...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.kazuban.com/blog" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">www.kazuban.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.03.08</div></div></div></div></a>
</div></figure>



<p class="wp-block-paragraph">G90をG91に変換するには、上記または<a href="https://www.kazuban.com/blog/free_soft/">フリーソフト紹介</a>ページでも公開している、<br>変換ソフトを利用して変換する事ができます。</p>



<pre class="wp-block-preformatted has-medium-font-size">G90G00G17
G00X0Y0Z30.
G91
G00Z-25.000
G01Z-15.000F500
G01X10.000
G03X-20.000I-10.
G03X20.000I10.
G01X-10.000
G00Z40.000</pre>



<p class="wp-block-paragraph">変換させると、こんなコードにしてくれました。<br>３行目からG91モードで指令しているので、２行目「G00X0Y0Z30.」の<br>Ｘ，Ｙ座標を変更すれば、任意位置で円加工できます。</p>



<h3 class="wp-block-heading"><span id="toc7">マクロ化</span></h3>



<p class="wp-block-paragraph">では、マクロ化してみましょう。<br>変換された「G91」プログラムは、若干手直しします。<br>そのままでも使用できますが、ポイントは、Z方向だけは「G90」にしようと思います。<br>加工動作は、位置決め後「G91」にしますが、Z方向のみの指令は、退避位置やＲ点など、<br>「G90」のほうが分かりやすいです。<br>上の例では、加工Zまで下りるコードと、最後の「G00Z40.000」は「G91」モードでの指令値ですが、<br>「G90G00Z30.000」の方が分かりやすいと思います。</p>



<pre class="wp-block-preformatted has-medium-font-size">(+++++++++++++++++++)
#1=20     (DIA)
#2=[#1/2] (R)
#3=30.0   (Initial Point)
#4=5.0    (R Point)
#5=-10.0  (Z)
#6=500    (F)
(+++++++++++++++++++)
<strong>G90</strong>G00G17
Z[#3] 
Z[#4] 
G01Z[#5]F#6
<strong>G91</strong>X[#2]
G03X-[#1]I-[#2]J0. 
X[#1]I[#2]J0.
G01X-[#2] 
<strong>G90</strong>G00Z[#3] 
</pre>



<p class="wp-block-paragraph">このようにしてみました。<br>変数化したので、上部の「#1」～「#6」の数値を変更する事で、加工径や条件を変更する事ができます。<br>これは、この変数を変更する仕様として、通常のＮＣプログラム的に使用する事も可能ですが、マクロ化する事で固定サイクルのように、引数で呼び出す事ができるようになります。</p>



<p class="wp-block-paragraph">ここで使用する変数を確認すると、「#1」～「#6」を使用しています。<br>このマクロを「G66」で呼び出すには、<a href="https://www.kazuban.com/blog/chamfering-with-g66/#outline__2_1">上記のルールにより</a>、引数アドレスと<br>「＃」番号を確認する必要があります。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>A=#1　B=#2　C=#3　I=#4　J=#5　K=#6 　</p></blockquote>



<p class="wp-block-paragraph">ですね。<br>マクロファイルは、上記プログラムの変数定義以下の部分（９行目以降）を、<br>「O番号」を付け、「M99」で終了させるNCファイルを作成します。<br>このマクロファイルを、「O6000」とした場合、上の定義で呼び出す指令は<br>「G66 P6000 A20. C30.0 I5.0 J-10.0 K500.」となります。</p>



<h3 class="wp-block-heading"><span id="toc8">面取りをプログラム化</span></h3>



<p class="wp-block-paragraph">これで、円動作させる事はできましたが、狙いの面取りをさせるためには、<br>使用工具径や面取り量、オフセット量などから、加工径や深さを求める必要があります。<br>動作は単純な円加工ですが、円要素を求めるのは意外と面倒です。<br>電卓で加工径を求めて、「#1=」で設定してもいいですが、せっかくなので、<br>工具径と加工穴径と面取り量から、自動計算させましょう。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="696" src="https://www.kazuban.com/blog/wp-content/uploads/2022/05/Chamfer02-1024x696.png" alt="" class="wp-image-6688" srcset="https://www.kazuban.com/blog/wp-content/uploads/2022/05/Chamfer02-1024x696.png 1024w, https://www.kazuban.com/blog/wp-content/uploads/2022/05/Chamfer02-300x204.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2022/05/Chamfer02-768x522.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2022/05/Chamfer02.png 1168w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">今回の面取りは、４５°のみを想定しています。<br>工具も４５°の円錐工具を使用します。<br>加工動作の円弧径は、工具径補正を使用しない場合、工具（主軸）中心になります。<br>したがって、「加工半径＝穴半径ー（工具半径+オフセット量）」になります。<br>加工深さは、「面取り量+オフセット量」ですね。</p>



<p class="wp-block-paragraph">これを考慮すると、<a href="https://www.kazuban.com/blog/chamfering-with-g66/#outline__3_3">上記のマクロ変数</a>に「面取り量」「オフセット」「工具径」「穴径」を追加する事になります。<br>「加工径」と「加工深さ」は自動計算させましょう。<br>ついでに、加工面深さも追加して、マクロを作成してみました。</p>



<pre class="wp-block-preformatted has-medium-font-size">%
O6000
( Chamfering Macro Ver1.0 By kazuban ) 
(+++++++++++++++++++)
#1=[#8/2-[#6+#7/2]] (circle radius)
(+++++++++++++++++++)
(B:#2 : Surface Coordinat) 
(C:#3 : Initial Point) 
(I:#4 : R Point) 
(J:#5 : Chamfer) 
(K:#6 : Offset)
(D:#7 : Tool Dia)
(E:#8 : Hole Dia)
(F:#9 : Feed)
(+++++++++++++++++++)
G90G00G17
Z[#2+#3] 
Z[#2+#4] 
G01Z[#2-[#6+#5]]F[#9] 
G91X[#1]
G03X-[#1*2]I-[#1]J0. 
X[#1*2]I[#1]J0.
G01X-[#1] 
G90G00Z[#2+#3] 
M99
%</pre>



<p class="wp-block-paragraph">こんなマクロプログラムになりました。<br>これを呼び出すには、「G66」と共に「P」+「O番号」「引数」を付加して呼び出します。<br>続いて、加工位置を追加して、最後に「G67」で終了です。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>G66 P6000 B0.0 C30.0 I5.0 J2.0 K1.0 D0.5 E12.0 F200<br>X10.0 Y12.0<br>X-10.0 Y-10.0<br>G67</p></blockquote>



<h2 class="wp-block-heading"><span id="toc9">メインプロ作成</span></h2>



<p class="wp-block-paragraph">次に、実際の加工に使用できるように、工具交換や加工条件などを定義できるメインププログラムを作成します。<br>このメインプロから、ここまでで作ってきた、面取りマクロプログラムを呼び出すようにします。</p>



<h3 class="wp-block-heading"><span id="toc10">変数化</span></h3>



<p class="wp-block-paragraph">やはり汎用化を考えて、メインプロも変数化しましょう！<br>パラメータは、「ワーク座標系」「工具番号」「回転数」など実際の加工に必要な項目をプログラム上部にまとめます。<br>使用者はこの項目だけの変更で、加工できるようになるので便利です。</p>



<pre class="wp-block-preformatted has-medium-font-size">(++++++++++++++++++++) 
#1=54 (WORK ORIGIN)
#2=10 (Tool Number)
#3=#2 (H Number)
#4=0.5(Tool Diameter)
#5=2300 (Spindle Speed)
#6=200 (Feed)
#7=8 (Coolant)
#8=0.0(Surface Coordinat)
#9=50.0 (Initial Point) 
#10=5.0 (R Point)
(++++++++++++++++++++) 
#11=12.0 (Hole Diameter)
#12=1.0 (Chamfer)
#13=0.5 (Offset)
(++++++++++++++++++++) 
#30=6000 (Macro program No)
#31=6100 (Position program No)
(++++++++++++++++++++) </pre>



<h3 class="wp-block-heading"><span id="toc11">メイン内変数とマクロ内変数</span></h3>



<p class="wp-block-paragraph">上記のように、必要な項目を変数化してみましたが、ここで定義した変数番号「#番号」とマクロ内で定義している変数番号「#番号」は数値的には同じでも、違うものとして扱われますから注意が必要です。<br>ただ、逆に同じに扱われるとかなり面倒で、変数の値が他のマクロで変更されていまう事も起こってしまいますね。<br>ほとんどのプログラミング言語に、ローカル変数とグローバル変数がありますが、<br>よく理解して使い分けしないと思わぬミスにつながります。<br>一塊のプログラム内だけでリセットされる、ローカル変数のほうがトラブルは少ないです。</p>



<p class="wp-block-paragraph">メインプロからマクロを呼び出す場合、マクロで使われている変数番号と引数のアドレスを把握し、<br>メインにおいてその要素を示す変数番号をマクロ引数に渡します。<br>なんだか、よくわからない説明になってしまいましたが、例えば上記の例で<br>メインで定義している「Initial Point」は「#9=50.0」です。<br>マクロで使用する「Initial Point」は「#3 」です。<br>そうして、引数で渡す「#3」は「C」アドレスですから、「C#9」を渡します。<br>分かりづらいので、整理してみると</p>



<pre class="wp-block-preformatted has-medium-font-size">    マクロ変数            メイン変数
(B:#2:SurfaceCoordinat)  ←  #8
(C:#3:InitialPoint)      ←  #9
(I:#4:RPoint)             ←  #10
(J:#5:Chamfer)           ←  #12
(K:#6:Offset)             ←  #13
(D:#7:ToolDia)           ←  #4
(E:#8:HoleDia)           ←  #11
(F:#9:Feed)               ←  #6
</pre>



<p class="wp-block-paragraph">具体的なマクロ呼び出し指令は、マクロの「O番号」をたとえば「O6000」とすると</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>G66 P6000 B[#8] C[#9] I[#10] J[#12] K[#13] D[#4] E[#11] F[#6]</p></blockquote>



<p class="wp-block-paragraph">となります。</p>



<h3 class="wp-block-heading"><span id="toc12">穴座標位置ファイル</span></h3>



<p class="wp-block-paragraph">マクロ呼び出しの次は、穴位置のＸ，Ｙの列挙になりすが、この穴位置指令もサブプログラムとして別のファイルにする事ができます。</p>



<pre class="wp-block-preformatted has-medium-font-size">%
O6100
( Hole Position )
X-35.Y55.
X-50.Y55.
X10.Y10. 
M99
%</pre>



<p class="wp-block-paragraph">この位置ファイルは、今回作成中のマクロだけでなく、通常の固定サイクルにも使用できるので<br>同じ位置で複数の加工を行う場合には、非常に便利です。<br>タップ加工をイメージしてください、<br>センター穴　⇒　下穴加工　⇒　面取り　⇒　タップ　となりますが<br>この一連の工程をメインプロから固定サイクルやマクロで呼び出すように作成しておけば<br>穴座標ファイルは一つのみの編集で、大きさの違う同等の加工が可能になります。<br>M6用、M8用、M10用、M12用　などのように、用意しておくと便利だと思います。</p>



<pre class="wp-block-preformatted has-medium-font-size">( CENTER DRILL )
・
・
G98 G81 Z-1.0 R5.0 F100 L0(K0)
<strong>M98P6100</strong>
G80
・
・
( DRILL )
・
・
G98 G83 Z-20.0 R5.0　Q3.0 F200 L0(K0)
<strong>M98P6100</strong>
G80 
・
・
( CHAMFER  )
・
G66 P6000 B[#8] C[#9] I[#10] J[#12] K[#13] D[#4] E[#11] F[#6]
<strong>M98P6100</strong>
G67
・
・
( TAP )
・
・
S100
G98 G84 Z-15.0 R5.0 Q2.5 F125 L0(K0)
<strong>M98P6100</strong>
G80 
・
・
M30</pre>



<h2 class="wp-block-heading"><span id="toc13">G66 モーダル呼び出し　メインプロ</span></h2>



<p class="wp-block-paragraph"><a href="https://www.kazuban.com/blog/chamfering-with-g66/#outline__3_4">上記で作成した、マクロ</a>を呼び出すメインプロを作成してみました。<br>マクロと位置座標ファイルの番号も変数化しています。</p>



<pre class="wp-block-preformatted has-medium-font-size">%
O1000
( Chamfering Program Ver1.0 By kazuban ) 
G90G00G17G40G80G49 
(++++++++++++++++++++) 
#1=54 (WORK ORIGIN)
#2=10 (Tool Number)
#3=#2 (H Number)
#4=0.5(Tool Diameter)
#5=2300 (Spindle Speed)
#6=200 (Feed)
#7=8 (Coolant)
#8=0.0(Surface Coordinat)
#9=50.0 (Initial Point) 
#10=5.0 (R Point)
(++++++++++++++++++++) 
#11=12.0 (Hole Diameter)
#12=1.0 (Chamfer)
#13=0.5 (Offset)
(++++++++++++++++++++) 
#30=6000 (Macro program No)
#31=6100 (Position program No)
(++++++++++++++++++++) 
N0001
G#1
T#2
M06
G90G00X0Y0 
<s>(G43Z#8H#3)</s>
G43Z[#8+#9]H#3
( Chamfer Process )
S#5M03 
M#7
(----------------------------)
(B:#2=#8 : Surface Coordinat) 
(C:#3=#9 : Initial Point) 
(I:#4=#10 : R Point) 
(J:#5=#12 : Chamfer) 
(K:#6=#13 : Offset)
(D:#7=#4 : Tool Dia)
(E:#8=#11 : Hole Dia)
(F:#9=#6 : Feed)
(++++++++++++++++++++) 
G66 P[#30] B[#8] C[#9] I[#10] J[#12] K[#13] D[#4] E[#11] F[#6]
M98P[#31]
G67
<s>(G90G00Z#9)</s>
G90G00Z[#8+#9]
M09
M05
G91G28Z0 
G91G49Z0 
G90M05 
( End of Process )
M30
%
</pre>



<h2 class="wp-block-heading"><span id="toc14">まとめ</span></h2>



<p class="wp-block-paragraph">固定サイクル的な機能を自作する方法を説明しました。<br><a href="https://www.kazuban.com/soft/ChamferCycle01.zip">こちらから、ダウンロードできます。</a><br>一例として、穴面取り用のマクロを作成しましたが、机上で検討したのみで<br><font color="RED"><strong>実機での検証・確認はやっておりません</strong></font>。<br>もし、実際に使用する場合には、十分な確認をお願いします。<br>また、不具合、気になる点などありましたら、コメントいただけるとたすかります。</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.kazuban.com/blog/chamfering-with-g66/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>ハイデンハインのサイクル機能</title>
		<link>https://www.kazuban.com/blog/heidenhain_cycle/</link>
					<comments>https://www.kazuban.com/blog/heidenhain_cycle/#comments</comments>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Sat, 18 Dec 2021 00:07:17 +0000</pubDate>
				<category><![CDATA[NC]]></category>
		<category><![CDATA[カスタムマクロ]]></category>
		<category><![CDATA[CAM]]></category>
		<category><![CDATA[Fanuc]]></category>
		<category><![CDATA[Fusion360]]></category>
		<category><![CDATA[Heidenhain]]></category>
		<category><![CDATA[NCプログラム]]></category>
		<category><![CDATA[ハイデンハイン]]></category>
		<category><![CDATA[ファナック]]></category>
		<category><![CDATA[マクロ]]></category>
		<category><![CDATA[固定サイクル]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=6236</guid>

					<description><![CDATA[ファナック系では、G73やG81～の固定サイクルと呼ばれている、ドリル加工用サイクルがありますがハイデンハイン制御機には、さらに高機能なサイクルが用意されています。変数で加工形状をカスタマイズできる点は、カスタムマクロに [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">ファナック系では、G73やG81～の固定サイクルと呼ばれている、ドリル加工用サイクルがありますが<br>ハイデンハイン制御機には、さらに高機能なサイクルが用意されています。<br>変数で加工形状をカスタマイズできる点は、カスタムマクロに似ていす。<br>多様なカスタムマクロが、標準で用意されているイメージです。<br>さらに、ドリルサイクルだけでなく、ポケットや測定用のサイクルも用意されています。<br>ファナック機では標準にない追加機能は、<span class="markerYellow">機械メーカーが提供</span>している場合が多いですが、<br>そうなるとどうしてもメーカー仕様になるので<span class="markerPink">互換性はありません。</span><br>工作機械を選択する際、そういった機能も比較する必要がありますね。<br>ハイデンハイン機は制御機に用意されてている事で、互換性は格段に向上します。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-6" checked><label class="toc-title" for="toc-checkbox-6">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">ユーザーマニュアル入手</a></li><li><a href="#toc2" tabindex="0">ドリル・タップサイクル</a><ol><li><a href="#toc3" tabindex="0">スレッドミル </a></li></ol></li><li><a href="#toc4" tabindex="0">ポケットサイクル</a></li><li><a href="#toc5" tabindex="0">補正</a></li><li><a href="#toc6" tabindex="0">タッチプローブサイクル</a></li><li><a href="#toc7" tabindex="0">プログラム例</a><ol><li><a href="#toc8" tabindex="0">サイクル定義</a></li><li><a href="#toc9" tabindex="0">加工位置</a></li><li><a href="#toc10" tabindex="0">Fusion360 で出力してみた</a></li><li><a href="#toc11" tabindex="0">M12のタップ加工をプログラム化</a></li></ol></li><li><a href="#toc12" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">ユーザーマニュアル入手</span></h2>



<p class="wp-block-paragraph"><a rel="noopener" href="https://www.heidenhain.com/" target="_blank">ハイデンハインのサイト</a>では、コントローラのマニュアルがダウンロードできます。</p>



<figure class="wp-block-image size-large is-resized"><a rel="noopener" href="https://www.heidenhain.com/" target="_blank"><img loading="lazy" decoding="async" src="https://www.kazuban.com/blog/wp-content/uploads/2021/12/image-1024x279.png" alt="" class="wp-image-6240" width="620" height="168" srcset="https://www.kazuban.com/blog/wp-content/uploads/2021/12/image-1024x279.png 1024w, https://www.kazuban.com/blog/wp-content/uploads/2021/12/image-300x82.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2021/12/image-768x209.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2021/12/image.png 1197w" sizes="(max-width: 620px) 100vw, 620px" /></a></figure>



<p class="wp-block-paragraph">ホームページから、「Service&amp;Support」⇒ 「Downloads」⇒ 「Documentation」と進み<br>下へスクロールして、右側の「Categories」で「CNC Controls」で各言語に対応したマニュアルがダウンロードできます。<br>ただ残念ながら、日本語はないみたいです。<br>私は、<a rel="noopener" href="https://product.heidenhain.de/JPBC/image/FILEBASE_PUBLIC/533_190-22.pdf" target="_blank">こちらをダウンロードしました。</a></p>



<h2 class="wp-block-heading"><span id="toc2">ドリル・タップサイクル</span></h2>



<p class="wp-block-paragraph">ドリルやタップ用のサイクルは、ダウンロードしたマニュアルでは、<br>８．３項目、ページ３３１～　に説明があります。<br>英語ですが、単語とアイコンでだいたいわかると思います</p>



<ul class="wp-block-list"><li>240 CENTERING _______________________________Page 333</li><li>200 DRILLING _________________________________Page 335</li><li>201 REAMING _________________________________Page 337</li><li>202 BORING ___________________________________Page 339</li><li>203 UNIVERSAL DRILLING _____________________Page 341</li><li>204 BACK BORING _____________________________Page 343</li><li>205 UNIVERSAL PECKING ______________________Page 346</li><li>208 BORE MILLING _____________________________Page 349</li><li>206 TAPPING NEW _____________________________Page 351</li><li>207 RIGID TAPPING NEW ______________________Page 353</li><li>209 TAPPING W/ CHIP BRKG __________________Page 355</li><li>262 THREAD MILLING _________________________Page 359</li><li>263 THREAD MLLNG/CNTSNKG _______________Page 361</li><li>264 THREAD DRILLING/MLLNG _______________Page 365</li><li>265 HEL.THREAD DRLG/MLG __________________Page 369</li><li>267 OUTSIDE THREAD MLLNG ________________Page369</li></ul>



<p class="wp-block-paragraph">ファナックの固定サイクルに比べるとかなり豊富なのがわかると思います。</p>



<h3 class="wp-block-heading"><span id="toc3">スレッドミル<br> </span></h3>



<p class="wp-block-paragraph">ねじ切りサイクル。<br>国内では、OSGのプラネットカッターが有名です。<br>加工時間は増加しますが、破損時のリスク軽減や高硬度材へのネジ加工には有効だと思います。<br>特に、超硬材へのネジ加工を切削で行うには、現在ではこの方法しかないように思います！<br>では、NCプログラムはどうやって作成するでしょう。<br>国内機の場合、CAMが対応している場合にはその機能を利用したり、工具メーカーが公開している<br>支援ソフトなどを利用したり、ユーザー側でカスタムマクロを作成したりだと思いますが、ハイデンハインには、ねじ切りサイクルがすでに準備されています。</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://www.kazuban.com/blog/wp-content/uploads/2021/12/threwadmill.png" alt="" class="wp-image-6257" width="526" height="210" srcset="https://www.kazuban.com/blog/wp-content/uploads/2021/12/threwadmill.png 592w, https://www.kazuban.com/blog/wp-content/uploads/2021/12/threwadmill-300x120.png 300w" sizes="(max-width: 526px) 100vw, 526px" /></figure>



<p class="wp-block-paragraph">Cycle 262、Page 359 ～に説明があります。<br>サイクルの使用方法は、後ほど説明しますが、「Q」で始まる指令は変数で、Qパラメータと呼ばれています。<br>ファナックの「#」と同様です。<br>この例では、「Q355」で工具の種類、「Q239」でネジピッチ、「Q201」でネジ深さ、<br>「Q200」でＲ点位置などが、この図で分かりますね。<br>これらの変数を設定する事で、ねじ切りを行うことができます。</p>



<h2 class="wp-block-heading"><span id="toc4">ポケットサイクル</span></h2>



<p class="wp-block-paragraph">穴加工だけではありません。<br>円や長方形、スロット形状もサイクルが用意されています。<br>ポケット用のサイクルは、ダウンロードしたマニュアルでは、<br>８．４項目、ページ３８２～　に説明があります。</p>



<ul class="wp-block-list"><li>251 RECTANGULAR POCKET ____________________Page 383</li><li>252 CIRCULAR POCKET _________________________Page 388</li><li>253 SLOT MILLING ______________________________Page 392</li><li>254 CIRCULAR SLOT ____________________________Page 397</li><li>212 POCKET FINISHING ________________________Page 402</li><li>213 STUD FINISHING __________________________Page 404</li><li>214 C. POCKET FINISHING _____________________Page 406</li><li>215 CIRCULAR STUD FINISHING _______________Page 406</li><li>210 SLOT RECIP. PLNG _________________________Page 410</li><li>211 CIRCULAR SLOT ____________________________Page 413</li></ul>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://www.kazuban.com/blog/wp-content/uploads/2021/12/PocketCycle.png" alt="" class="wp-image-6275" width="400" height="209" srcset="https://www.kazuban.com/blog/wp-content/uploads/2021/12/PocketCycle.png 1024w, https://www.kazuban.com/blog/wp-content/uploads/2021/12/PocketCycle-300x157.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2021/12/PocketCycle-768x403.png 768w" sizes="(max-width: 400px) 100vw, 400px" /></figure>



<p class="wp-block-paragraph">かなり豊富なサイクルが用意されています。<br>何種類かのサイクルを組み合わせる事で、ある程度の加工はCAMがなくてもできそうです。</p>



<h2 class="wp-block-heading"><span id="toc5">補正</span></h2>



<p class="wp-block-paragraph">サイクルからは少し外れますが、ハイデンハインは工具を<a rel="noopener" href="https://www.kazuban.com/bbs/heidenhain/heidenhain.cgi?mode=main&amp;no=11" target="_blank">「Tool Table」というテキストファイルで管理しています。</a><br>そのため、任意の<span class="markerPink">工具を交換しただけ</span>で、コントローラは工具情報を「Tool Table」から取得します。<br>内容で必須なのは、「工具長さ」「工具径」ですが、この値は手動で入力してもいいですが<br>工具自動測定仕様であれば、自動的に入力されます。<br>したがって、<span class="markerPink">工具交換しただけで、工具長補正は完成</span>し、工具径補正が必要なNCデータを実行する場合「Tool Table」の値を元に、工具径補正が行われます。<br>これは、上記で説明した、「スレッドミル」や「ポケット」サイクルにも対応されます。<br>D番号を忘れた！などのトラブルはかなり少なくなります。<br>ちょっと面白い仕様に、切込み角度の項目があります。<br>これは、指定工具が切込み可能な場合、切込み角度を設定する項目です。<br>傾斜切込みを行うサイクルを使用する場合、このデータが参照されます。<br>このように、ハイデンハインでは使用工具はどのような工具なのかを登録しておき<br>工具交換する事で、その内容が自動的に反映される仕組みです。<br><span class="markerPink">工具交換しただけでと言うところが、重要なポイント</span>で交換すれば、<br>工具長補正は完了状態なので、ワークの任意のZ点に<strong>手パ</strong>（ハンドル）で簡単に移動できます。<br>これは、タッチプローブでも同じです。</p>



<h2 class="wp-block-heading"><span id="toc6">タッチプローブサイクル</span></h2>



<p class="wp-block-paragraph">プローブ測定用のサイクルも用意されています。<br>ただし、上記で紹介したマニュアルには、載っていませんでした。<br><a rel="noopener" href="https://product.heidenhain.de/JPBC/image/FILEBASE_PUBLIC/670_388-20.pdf" target="_blank">こちらのマニュアルにありました。</a><br>タッチプローブ機能はオプションだからかもしれません。<br>ただ、特にEUではタッチプローブは必須の考えが強いように思います。</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://www.kazuban.com/blog/wp-content/uploads/2021/12/Probe-e1638693336693.png" alt="" class="wp-image-6279" width="317" height="296"/></figure>



<p class="wp-block-paragraph">これは、ワーク測定用のサイクルですが、こちらもかなり充実していますね。<br>最近ファナック機はご無沙汰なので最近の状況は分かりませんが、<br>私が今までで立ち上げた、タッチプローブ仕様のファナック機では、<br>自動ワーク座標系設定やワーク測定は、機械メーカーのサービスマンが提供してくれた<br>マクロプログラムを使用する方法で教わりました。<br>ただどのメーカーも、単純にタッチした底面のワーク原点からの深さを表示するマクロがありませんでした。<br>例えば、ポケットの掘り込み加工後には、底面にタッチして、その深さを測定したくなります。<br>提供していただいたマクロの中には、２点を測定してその段差を出すマクロはありましたが、<br>やはり加工中では単純にタッチしただけで深さが知りたいですね。<br>これは、<span class="markerYellow">タッチプローブには、工具長の概念があまりない</span>のも要因のように思います。<br>しょうがないので、カスタムマクロで自作しましたが、ハイデンハインには上記のような<br>豊富なサイクルが用意されています。<br>サイクルを使うと、加工後自動測定するプログラムも比較的簡単に作成可能ですし<br>制御機提供のサイクルなので、おそらく、違うメーカーの機械や<br>違うメーカーの測定器であっても、同じプログラムで測定できると思います。</p>



<h2 class="wp-block-heading"><span id="toc7">プログラム例</span></h2>



<h3 class="wp-block-heading"><span id="toc8">サイクル定義</span></h3>



<p class="wp-block-paragraph">サイクルを利用するには、まず「CYCLE DEF サイクル番号」でサイクルの種類を指定し、<br>Qパラメータで条件を設定します。<br>「;」の右側はコメントになります。<br>また行末の「~」は次の行と連続している意味です。<br>先頭の「18」は行番号ですが、すべてが「18行」の一行です。<br>見やすくするための仕様ではないかと思っています。<br>マニュアルではコメントが英語ですがだいたい理解できると思います。</p>



<pre class="wp-block-preformatted has-medium-font-size"><strong>18 CYCL DEF 200 DRILLING ~
   Q200=+5 ;SET-UP CLEARANCE ~
   Q201=-19 ;DEPTH ~
   Q206=400 ;FEED RATE FOR PLUNGING ~
   Q202=+19 ;PLUNGING DEPTH ~
   Q210=0 ;DWELL AT TOP ~
   Q203=+0 ;SURFACE COORDINATE ~
   Q204=+50 ;2ND SET-UP CLEARANCE ~
   Q211=0 ;DWELL AT BOTTOM</strong></pre>



<p class="wp-block-paragraph">この例は、ドリルサイクルですが、ファナックの「G82」と「G83」が合体したようなサイクルです。</p>



<h3 class="wp-block-heading"><span id="toc9">加工位置</span></h3>



<p class="wp-block-paragraph">サイクルへは、「CYCL CALL POS」「M99」「 CYCL CALL PAT」の３種類の方法で加工位置を指定します<br>サイクルは、最後に定義されたものが、「CYCL CALL」により呼び出されます。<br>「CYCL CALL POS」で加工位置を定義します。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>12 <strong>CYCL CALL POS X+30 Y+20 Z+0</strong> FMAX M3<br>13 <strong>CYCL CALL POS X+80 Y+50 Z+0</strong> FMAX</p></blockquote>



<p class="wp-block-paragraph">「M99」指令により、移動指令で移動した位置でサイクルを実行する事もできます</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>12 L X+30 Y+20 FMAX M3<br>13 CYCL CALL<br>14 L X+80 Y+50 FMAX<strong> M99</strong><br>15 L Z+100 FMAX M2</p></blockquote>



<p class="wp-block-paragraph">「FMAX」は「早送り」の意味です。<br> 「 CYCL CALL PAT」 は事前に、加工位置を書きだしたファイルを用意し、<br>そのファイルを指定する方法です。<br>センターとドリルのような、同じ位置に複数のサイクルを使用する場合に便利です。</p>



<pre class="wp-block-preformatted has-medium-font-size"><strong>6 TOOL CALL 1 Z S5000 
7 L Z+10 RO F5000 
8 SEL PATTERN “TAB1” 
9 CYCL DEF 200 DRILLING ~
  Q200=2 ;SET-UP CLEARANCE ~
  Q201=-2 ;DEPTH ~
  Q206=150 ;FEED RATE FOR PLNGNG ~
  Q202=2 ;PLUNGING DEPTH ~
  Q210=0 ;DWELL TIME AT TOP ~
  Q203=+0 ;SURFACE COORDINATE  ~
  Q204=10 ;2ND SET-UP CLEARANCE  ~
  Q211=0.2 ;DWELL TIME AT DEPTH ~
10 CYCL CALL PAT F5000 M3 ;　<em>Cycle call in connection with point table TAB1.PNT</em>
11 L Z+100 R0 FMAX M6
12 TOOL CALL 2 Z S5000</strong></pre>



<p class="wp-block-paragraph">加工位置ファイル「Point Table」は、「SEL PATTERN」で指定します。<br>呼び出し元と同じディレクトリにない場合には、フルパスで指定できます</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><br>SEL PATTERN “TNC:\DIRKT5\NUST35.PNT&#8221;</p></blockquote>



<h3 class="wp-block-heading"><span id="toc10">Fusion360 で出力してみた</span></h3>



<p class="wp-block-paragraph"> Fusion360、ポストライブラリには、「Heidenhain」用ポストも用意されています。<br>プレート素材に、適当な穴を開けたモデルを用意し、CAM処理させてみました。</p>



<pre class="wp-block-preformatted has-medium-font-size"><strong>0 BEGIN PGM 1001 MM
1 BLK FORM 0.1 Z X-150 Y-100 Z-50
2 BLK FORM 0.2 X+150 Y+100 Z+0
3 ;-------------------------------------
4 ;Tools
5 ; #92 D=20 - ZMIN=-51 - ZMAX=+50 - drill
6 ;-------------------------------------
7 ;
8 M5
9 TOOL CALL 92 Z S1590
10 L M140 MB MAX
11 M3
12 L X-110 Y-70 R0 FMAX
13 L Z+50 R0 FMAX
14 M7
15 CYCL DEF 32.0 TOLERANCE
16 CYCL DEF 32.1
17 CYCL DEF 200 DRILLING ~
   Q200=+5 ;SET-UP CLEARANCE ~
   Q201=-51 ;DEPTH ~
   Q206=160 ;FEED RATE FOR PLUNGING ~
   Q202=+20 ;INFEED DEPTH ~
   Q210=0 ;DWELL AT TOP ~
   Q203=+0 ;SURFACE COORDINATE ~
   Q204=+50 ;2ND SET-UP CLEARANCE ~
   Q211=0 ;DWELL AT BOTTOM
18 L FMAX M99
19 L Y+70 FMAX M99
20 L X+110 FMAX M99
21 L Y-70 FMAX M99
22 L Z+50 FMAX
23 M9
24 M5
25 L M140 MB MAX
26 M30
27 END PGM 1001 MM</strong></pre>



<p class="wp-block-paragraph">すごいですね～<br>私がハイデンハイン制御の５軸を立ち上げてた時には、穴あけデータは、<br>サイクルで出力できないCAMもあったと記憶しています。<br>深穴サイクルなど、直線補間「G01」でサイクル動作を置き換えたデータでした。<br>Fusion360のポストは、ハイデンハインサイクルの勉強にも使えそうです。</p>



<h3 class="wp-block-heading"><span id="toc11">M12のタップ加工をプログラム化</span></h3>



<p class="wp-block-paragraph">M12のタップ加工行うＮＣプログラムをサイクルを組み合わせて作ってみました。<br>加工位置用のファイル「P1.pnt」を編集する事で、任意箇所へタップ加工ができます。<br> 「P1.pnt」 は、制御機から作成できます。<br>マニュアルの「Point Tables」を参照してください。<br>たぶん、エディタなどでテキストを作成しても、使用できると思いますが<br>最初は書式がわからないと思うので、まずは制御機で作成すればテキスト化されるので<br>そのテキストファイルを修正する方法が簡単だと思います。<br>ただし、実機に触れる環境ではないので、<span class="markerPink">検証できておりません。<br>万が一、<strong>使用する場合には、十分確認してください。</strong></span></p>



<p class="has-black-color has-light-green-cyan-background-color has-text-color has-background wp-block-paragraph"><strong>もし、実証できる方がいらっしゃれば、不具合点などコメントいただければ、助かります！</strong></p>



<p class="wp-block-paragraph">P1.PNT
</p>



<pre class="wp-block-preformatted has-normal-font-size has-medium-font-size"><strong>BEGIN P1 .pnt MM
NR    X       Y       Z 
0     +31.5   -14     +0 
1     -15     -40     +0 
2     -31.5   +14     +0 
3     +15     +40     +0 
[END]</strong></pre>



<p class="wp-block-paragraph">M12_SKD11.h</p>



<pre class="wp-block-preformatted has-medium-font-size"><strong>0  BEGIN PGM M12_SKD11 MM 
1  BLK FORM 0.1 Z  X+0  Y+0  Z-80
2  BLK FORM 0.2  X+150  Y+25  Z+0
3  * --------------------------------
4  CYCL DEF 247 DATUM SETTING ~
    Q339=+1    ;DATUM NUMBER
5  L  A+0  C+0 F3000 M21
6  ;;;;;;;;;;;;;;;;;;;;;;
7  ;;;; CENTER ;;;;;;;;;;
8  ;;;;;;;;;;;;;;;;;;;;;;
9  Q1 = 45 ;Tool
10 Q2 = 640 ;SP
11 Q3 = 80 ;F_Feed
12 Q4 = -0.6 ;Z_Depth
13 ;;;;;;;;;;;;;;;;;;;;;;
14 ;;;; DRILL D=10.2 ;;;
15 ;;;;;;;;;;;;;;;;;;;;;;
16 Q5 = 101 ;Tool
17 Q6 = 620 ;SP
18 Q7 = 120 ;F_Feed
19 Q8 = -25 ;Z_Depth
20 Q9 = 10 ;Q_Peck
21 ;;;;;;;;;;;;;;;;;;;;;;
22 ;;;; CHAMFER ;;;;;;;;;
23 ;;;;;;;;;;;;;;;;;;;;;;
24 Q30 = 46 ;Tool
25 Q31 = 2200 ;SP
26 Q32 = 240 ;F_Feed
27 Q33 = 0.5 ;Chanfer_Length
28 Q34 = 1.5 ;Distance
29 Q35 = Q33 + Q34 ;Depth
30 Q36 = 8 ;Coolant
31 Q37 = 12 ;Hole DIA
32 ;;;;;;;;;;;;;;;;;;;;;;
33 ;;;; TAPP M12 ;;;;;;;
34 ;;;;;;;;;;;;;;;;;;;;;;
35 Q10 = 104 ;Tool
36 Q11 = 120 ;SP
37 Q12 = -10 ;Z_Depth
38 Q13 = 1.75 ;Pitch
39 Q14 = 8 ;Coolant
40 ;;;;;;;;;;;;;;;;;;;;;;
41 * --------------------------------
42 ;;;; CENTER LBL 1 ;;;;;;;;;;;;;;
43 ;;;; DRILL LBL 2 ;;;;;;;;;;;;;;
44 ;;;; C LBL 3 ;;;;;;;;;;;;;;
45 ;;;; TAPP LBL 4 ;;;;;;;;;;;;;;
46 * --------------------------------
47 FN 9: IF +1 EQU +1 GOTO LBL 1
48 * --------------------------------
49 ;;;; SET POSITION ;;;;;;;;;;;;;;;
50 LBL 11
51 SEL PATTERN "P1.pnt"
52 CYCL CALL PAT F5000
53 M5 M9
54 L M140 MB MAX
55 LBL 0
56 * --- CENTER -----------------------
57 LBL 1
58 * - CENTER
59 TOOL CALL Q1 Z SQ2
60 M9
61 CYCL DEF 200 DRILLING ~
    Q200=+5    ;SET-UP CLEARANCE ~
    Q201=+Q4   ;DEPTH ~
    Q206=+Q3   ;FEED RATE FOR PLNGNG ~
    Q202=+Q4   ;PLUNGING DEPTH ~
    Q210=+0    ;DWELL TIME AT TOP ~
    Q203=+0    ;SURFACE COORDINATE ~
    Q204=+50   ;2ND SET-UP CLEARANCE ~
    Q211=+0    ;DWELL TIME AT DEPTH
62 L M140 MB MAX
63 L  X+0  Y+0 F8000 M3
64 L  Z+50 F8000
65 M0
66 M13
67 CALL LBL 11
68 LBL 0
69 * ---DRILL ----------------------
70 LBL 2
71 TOOL CALL Q5 Z SQ6
72 M9
73 CYCL DEF 200 DRILLING ~
    Q200=+5    ;SET-UP CLEARANCE ~
    Q201=+Q8   ;DEPTH ~
    Q206=+Q7   ;FEED RATE FOR PLNGNG ~
    Q202=+Q9   ;PLUNGING DEPTH ~
    Q210=+0    ;DWELL TIME AT TOP ~
    Q203=+0    ;SURFACE COORDINATE ~
    Q204=+50   ;2ND SET-UP CLEARANCE ~
    Q211=+0    ;DWELL TIME AT DEPTH
74 L M140 MB MAX
75 L  X+0  Y+0 F8000 M3
76 L  Z+50 F8000
77 M0
78 M13
79 CALL LBL 11
80 LBL 0
81 * --- CHAMFER -------------------
82 LBL 3
83 TOOL CALL Q30 Z SQ31 DR+Q34
84 M9
85 L M140 MB MAX
86 L  X+0  Y+0 F8000
87 L  Z+50 F5000
88 CYCL DEF 208 BORE MILLING ~
    Q200=+2    ;SET-UP CLEARANCE ~
    Q201=-Q35  ;DEPTH ~
    Q206=+Q32  ;FEED RATE FOR PLNGNG ~
    Q334=+2    ;PLUNGING DEPTH ~
    Q203=+0    ;SURFACE COORDINATE ~
    Q204=+50   ;2ND SET-UP CLEARANCE ~
    Q335=+Q37  ;NOMINAL DIAMETER ~
    Q342=+Q37  ;ROUGHING DIAMETER
89 M0
90 M3 MQ36
91 CALL LBL 11
92 LBL 0
93 * --- TAPP ----------------------
94 LBL 4
95 TOOL CALL Q10 Z SQ11
96 M9
97 Q15 = Q13 * 1
98 CYCL DEF 209 TAPPING W/ CHIP BRKG ~
    Q200=+5    ;SET-UP CLEARANCE ~
    Q201=+Q12  ;DEPTH OF THREAD ~
    Q239=+Q13  ;THREAD PITCH ~
    Q203=+0    ;SURFACE COORDINATE ~
    Q204=+50   ;2ND SET-UP CLEARANCE ~
    Q257=+Q15  ;DEPTH FOR CHIP BRKNG ~
    Q256=+Q13  ;DIST FOR CHIP BRKNG ~
    Q336=+0    ;ANGLE OF SPINDLE
99 L M140 MB MAX
100 L  X+0  Y+0 F8000 M3
101 L  Z+50 F5000
102 M0
103 MQ14
104 CALL LBL 11
105 LBL 0
106 * --------------------------------
107 L M140 MB MAX
108 M2
109 END PGM M12_SKD11 MM 
</strong></pre>



<p class="wp-block-paragraph">こんなデータをタップ径や材質ごとに用意しておくと、座標を編集するだけで<br>多種類のタップ加工簡単にができます。<br>ファナックでも、マクロを作成すれば同様のデータは作成できますが<br>制御機のサイクルだけで作成できるところが、ユーザーにとってはありがたい所だと思います</p>



<h2 class="wp-block-heading"><span id="toc12">まとめ</span></h2>



<p class="wp-block-paragraph">一度、ハイデンハイン機を触ると、ファナック機には戻れないと言う意見をよく聞きます。<br>工具管理方法の違いもそうですが、このようなサイクルを<span class="markerPink">制御機側が提供している点</span>は<br>重要なポイントだと思います。<br>これは、高精度輪郭精度なども同じかもしれません。<br>機械メーカーの味付けで、同じNCデータを流しても、終了時間はかなりかわりますね。<br>機械メーカーにとっては、自由度があり、差別化ができていいのかもしれませんが<br>いろんなメーカーの機械を選択したい、ユーザー側としては、データの互換性は気になります。<br></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.kazuban.com/blog/heidenhain_cycle/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
			</item>
		<item>
		<title>Fanuc と OSP の違い。</title>
		<link>https://www.kazuban.com/blog/fanuc-vs-osp/</link>
					<comments>https://www.kazuban.com/blog/fanuc-vs-osp/#comments</comments>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Tue, 09 Nov 2021 12:30:06 +0000</pubDate>
				<category><![CDATA[NC]]></category>
		<category><![CDATA[CAM]]></category>
		<category><![CDATA[Fanuc]]></category>
		<category><![CDATA[OSP]]></category>
		<category><![CDATA[オークマ]]></category>
		<category><![CDATA[ファナック]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=6173</guid>

					<description><![CDATA[昔の資料を整理していたところ、違いを書きだしたメモが出てきました。最近はあまり必要としていませんが、とりあえず、残しておこうと思います。もう、１５年以上前の資料なので、現在では変わっている箇所もあるかもしれません。この手 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">昔の資料を整理していたところ、違いを書きだしたメモが出てきました。<br>最近はあまり必要としていませんが、とりあえず、残しておこうと思います。<br>もう、１５年以上前の資料なので、現在では変わっている箇所もあるかもしれません。<br>この手の記事は、ネット上には沢山あると思うので、怪しい場合にはそちらも参考にしてください。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-8" checked><label class="toc-title" for="toc-checkbox-8">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">基本的な、工具の位置移動指令は、ほぼ同じ</a></li><li><a href="#toc2" tabindex="0">ワーク座標系</a><ol><li><a href="#toc3" tabindex="0">Fanuc : G54 ～ G59</a></li><li><a href="#toc4" tabindex="0">Fanuc : G54.1P1 ～</a></li><li><a href="#toc5" tabindex="0">OSP : G15H1 ～</a></li></ol></li><li><a href="#toc6" tabindex="0">工具長補正</a><ol><li><a href="#toc7" tabindex="0"> Fanuc : G43 </a></li><li><a href="#toc8" tabindex="0">OSP : G56</a></li></ol></li><li><a href="#toc9" tabindex="0">工具長補正キャンセル</a><ol><li><a href="#toc10" tabindex="0"> Fanuc : G49</a></li><li><a href="#toc11" tabindex="0">OSP : G53</a></li></ol></li><li><a href="#toc12" tabindex="0">原点復帰</a><ol><li><a href="#toc13" tabindex="0"> Fanuc : G28</a></li><li><a href="#toc14" tabindex="0">OSP : なし</a></li></ol></li><li><a href="#toc15" tabindex="0">固定サイクル</a></li><li><a href="#toc16" tabindex="0">固定サイクル・R点復帰</a><ol><li><a href="#toc17" tabindex="0"> Fanuc : G99</a></li><li><a href="#toc18" tabindex="0"> OSP : M54</a></li></ol></li><li><a href="#toc19" tabindex="0">固定サイクル・イニシャル点復帰</a><ol><li><a href="#toc20" tabindex="0"> Fanuc : G98</a></li><li><a href="#toc21" tabindex="0"> OSP : M53</a></li></ol></li><li><a href="#toc22" tabindex="0">動作なし固定サイクル指令</a><ol><li><a href="#toc23" tabindex="0"> Fanuc : L0 もしくは K0　（ゼロ）</a></li><li><a href="#toc24" tabindex="0"> OSP : NCYL</a></li></ol></li><li><a href="#toc25" tabindex="0">サブプログラム呼び出し</a><ol><li><a href="#toc26" tabindex="0"> Fanuc : M98 もしくは　M198</a></li><li><a href="#toc27" tabindex="0"> OSP : CALL</a></li></ol></li><li><a href="#toc28" tabindex="0">サブプログラムからの戻り</a><ol><li><a href="#toc29" tabindex="0"> Fanuc : M99</a></li><li><a href="#toc30" tabindex="0"> OSP : RTS</a></li></ol></li><li><a href="#toc31" tabindex="0">サブプログラムの始まりと終了</a><ol><li><a href="#toc32" tabindex="0"> Fanuc : %</a></li><li><a href="#toc33" tabindex="0"> OSP : なし</a></li></ol></li><li><a href="#toc34" tabindex="0">工具呼び出し</a></li><li><a href="#toc35" tabindex="0">コメント文</a><ol><li><a href="#toc36" tabindex="0"> Fanuc : (　～　) までを、コメントとする</a></li><li><a href="#toc37" tabindex="0"> OSP : (　だけで閉じられていなくても、改行までがコメントとなる</a></li></ol></li><li><a href="#toc38" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">基本的な、工具の位置移動指令は、ほぼ同じ</span></h2>



<p class="wp-block-paragraph">工具の移動先を指令する、基本的なコードはほぼ同じです。<br>G17、G18、G19：平面指定<br>G90、G91：絶対・相対　座標指定<br>G00、G01、G02、G03 : 位置決め、直線・円弧補間<br>G04 : ドウェル<br>G40、G41、G42 : 工具径補正　<br>G73～、G80～：固定サイクル、完全同じではないが、同じ機能が多い<br>M00、M01、M02、M30：プログラムストップやエンド<br>M02、M03、M04、M05：スピンドル回転</p>



<p class="wp-block-paragraph">工具移動に関する基本的なコードは、だいたい同じです。<br>ただ、固定サイクルは、まったく同じではないので注意が必要です。<br>特に、穴あけ動作後の工具の退避指令や、リジットタップでは違いがあります。<br>（リジットタップは、同じファナック機でも違いがありますね～😠）</p>



<h2 class="wp-block-heading"><span id="toc2">ワーク座標系</span></h2>



<h3 class="wp-block-heading"><span id="toc3">Fanuc : G54 ～ G59</span></h3>



<p class="wp-block-paragraph">標準では、G54 ～　G59　の６個の座標系が使用できます。<br>座標系を使い分けると、一つのテーブルに何個（何種類）か製品を載せて、自動運転が可能になります。<br>ただ、普通の仕様では、６個の製品しか載せられませんね。<br>実は、カスタムマクロを利用すると、増やすことも可能です。<br>機会があれば記事にしようと思います。</p>



<h3 class="wp-block-heading"><span id="toc4">Fanuc : G54.1P1 ～</span></h3>



<p class="wp-block-paragraph">オプションになる機種もあると思いますが、G54.1 P「数値」のコードで設定します。<br>何個使えるかは、仕様により変わりますが、数十個から数百個は使用可能だと思います。</p>



<h3 class="wp-block-heading"><span id="toc5">OSP : G15H1 ～</span></h3>



<p class="wp-block-paragraph">Fanuc の「G54.1P」が「G15H」に変わった感じです。</p>



<p class="wp-block-paragraph"><br>余談ですが、どうしてFanucは「G54.1」などというコードになったのでしょう？<br>私のいい加減な推測ですが、昔は６個の座標で十分だったけど、だんだん足りなくなってきて<br>増やそうにも、G60は既に割り当てられていたので、苦肉の策で小数点を使って拡張したという感じでしょうか？<br>変換ソフトなど作る場合など、ほんと面倒です。</p>



<h2 class="wp-block-heading"><span id="toc6">工具長補正</span></h2>



<h3 class="wp-block-heading"><span id="toc7"> Fanuc : G43 </span></h3>



<p class="wp-block-paragraph">「<strong>G43</strong> Z50.0 H01」のように、指定高さに移動するまでに補正値を完了させる指令です。</p>



<h3 class="wp-block-heading"><span id="toc8">OSP : G56</span></h3>



<p class="wp-block-paragraph">こちらも、番号が変わっただけで、同様に指令します。</p>



<h2 class="wp-block-heading"><span id="toc9">工具長補正キャンセル</span></h2>



<h3 class="wp-block-heading"><span id="toc10"> Fanuc : G49</span></h3>



<p class="wp-block-paragraph">工具長補正をキャンセルするコードですが、ちょっと注意が必要です。<br>機種にもよりますが、<span class="markerPink">キャンセルに動作が伴う</span>場合があります。<br>その場合、補正値によっては、主軸が下がる場合があるので注意です。<br>したがって、直前に「<strong>G91G28Z0</strong>」で主軸をZ原点に退避させた後、キャンセルするのが安全です。</p>



<h3 class="wp-block-heading"><span id="toc11">OSP : G53</span></h3>



<p class="wp-block-paragraph">こちらも番号が変わっただけですが、上のFanuc編で説明した、<br>Ｚ原点へ退避させる<span class="markerPink">原点復帰指令はOSPにはない</span>ので注意です。</p>



<h2 class="wp-block-heading"><span id="toc12">原点復帰</span></h2>



<h3 class="wp-block-heading"><span id="toc13"> Fanuc : G28</span></h3>



<p class="wp-block-paragraph">「G28」は、「移動軸」と共に「<strong>中間点</strong>」を同時に指令します。<br>「G90G28X100.0」とすると、まず「X100.0」の位置へ移動し、その後「X軸原点」へ移動します。<br>この動作を利用して、<span class="markerYellow"><strong>現在の位置から</strong></span>Z軸を原点へ移動させたい場合「<strong>G91G28Z0</strong>」のコードがよく使われます。</p>



<h3 class="wp-block-heading"><span id="toc14">OSP : なし</span></h3>



<p class="wp-block-paragraph">OSPは原点復帰指令はありません。<br>海外の機械もそうですが、<span class="markerPink">必ずしもZ軸機械原点が安全位置（最上面）にあるとは限らない</span>から<br>危険だという事かもしれません。<br>その代わりに、退避させたい軸に、機械仕様よりも大きな数値を入れて移動させます。<br>ファナック機では、オーバートラベルのエラーが出てしまう場合がありますが、<span class="markerYellow">オークマ機はエラーになりません。</span><br>「G00Z1000.0」のようにします。</p>



<h2 class="wp-block-heading"><span id="toc15">固定サイクル</span></h2>



<p class="wp-block-paragraph">ハイデンハインの場合には、いろいろなサイクルが用意されていますが、<br>ファナックの場合にはドリル加工用サイクルがほとんどです。<br>穴加工固定サイクルは「Gコード」で穴の加工モードを指令し、加工位置や深さを指定します。<br>穴加工サイクルのGコードの番号は、FanucとOSPでは、だいたい同じですが<br>違いもあるので、詳細はマニュアルやネット情報で調べてみてください。<br>固定サイクルは一度指令すれば、キャンセルコード「G80」が来るまで、指令位置へ同様の穴加工を行います。</p>



<p class="wp-block-paragraph">穴加工サイクルが指令される、直前のZ軸の高さから、<br>実際の加工がスタートする高さを「R点」といい、「R」アドレスで指令します。<br>「直前の高さ」から「R点」までは、早送りで移動し、「R点」から加工送りスピードになります。<br>穴加工サイクルは、指定座標で加工サイクルが終了し、次へ移動する時のZ軸高さを２種類設定できます。</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.kazuban.com/blog/wp-content/uploads/2021/11/DrillCycle-1024x484.png" alt=""/></figure>



<p class="wp-block-paragraph"><br>一つは、「R点」まで戻り移動する場合で「R点復帰」と呼ばれています。<br>もう一つは、 「直前の高さ」 か「指定高さ」まで戻り、移動する場合になります。<br>この移動高さをFanucでは「イニシャル点」と呼ばれていますが<br>オークマではなんと呼ぶのでしょう？「指定点」とかでしょうか？<br>ここでは。「イニシャル点」に統一し、「R点復帰」に対して「イニシャル点復帰」とします。</p>



<h2 class="wp-block-heading"><span id="toc16">固定サイクル・R点復帰</span></h2>



<h3 class="wp-block-heading"><span id="toc17"> Fanuc : G99</span></h3>



<p class="wp-block-paragraph">Fanuc固定サイクルの、「R点復帰」指令は、「G99」です。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>・<br>G90 G00 Z50.0<br>G99 G73 X20.0 Y35.0 Z-30.0 R5.0 Q1.0 F200<br>X-20.0 Y35.0<br>X-20.0 Y-30.0<br>X20.0Y-30.0<br>G80</p></blockquote>



<p class="wp-block-paragraph">この例の場合、Z50.0の高さに位置決め後、「X20.0Y35.0」へ移動、<br>「高速深穴あけサイクルG73」で穴加工後、<br>R点「Z5.0」へ退避し、次の座標「 X-20.0Y35.0 」へ同様の穴加工を行います。<br>この場合「イニシャル点」は「Z50.0」ですが、「G99」なので、「Z5.0」で次の穴位置へ移動します。</p>



<h3 class="wp-block-heading"><span id="toc18"> OSP : M54</span></h3>



<p class="wp-block-paragraph">OSPの「R点復帰」指令は、Gコードでなく「M54」とMコードになります。<br>上の例の「G99」⇒「M54」に変更したデータになります。</p>



<h2 class="wp-block-heading"><span id="toc19">固定サイクル・イニシャル点復帰</span></h2>



<h3 class="wp-block-heading"><span id="toc20"> Fanuc : G98</span></h3>



<p class="wp-block-paragraph">Fanucのイニシャル点は、固定サイクル指令の<span class="markerPink">「直前の高さ」</span>になります。<br>「G98」により、固定サイクル中の移動は、「イニシャル点」の高さになります。</p>



<h3 class="wp-block-heading"><span id="toc21"> OSP : M53</span></h3>



<p class="wp-block-paragraph">OSPのイニシャル点は、直前という縛りはないですが<span class="markerPink">事前に「G71」コードで指定</span>します。<br>「G71 Z50.0」で、イニシャル点は「Z50.0」に設定されます。<br>「M53」により、固定サイクル中の移動は、「イニシャル点」の高さになります。</p>



<p class="wp-block-paragraph"> </p>



<h2 class="wp-block-heading"><span id="toc22">動作なし固定サイクル指令</span></h2>



<p class="wp-block-paragraph">一つのNCプログラムで運用する場合には、あまり必要にはなりませんが、<br>サブプロ的仕様で、穴加工の位置座標のみ、サブプロデータとして呼び出して使用する場合<br><span class="markerYellow"> 固定サイクル指令と位置座標指令は別プログラム</span>としておいたほうが便利です。<br>このような場合、動作を伴わない固定サイクル指令が必要になります。</p>



<h3 class="wp-block-heading"><span id="toc23"> Fanuc : L0 もしくは K0　（ゼロ）</span></h3>



<p class="wp-block-paragraph">機種によって「L」と「K」の場合があるので、注意してください。<br>固定サイクル指令時に、「L0」または「K0」を追加します。<br>次の例では、「L0」や「K0」を指令していません</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>・<br>G90 G00 X0 Y0 Z50.0<br>G98 G73 Z-30.0 R5.0 Q1.0 F200<br>X20.0 Y35.0<br>X-20.0 Y35.0<br>X-20.0 Y-30.0<br>X20.0Y-30.0<br>G80</p></blockquote>



<p class="wp-block-paragraph">この場合、<span class="markerPink">「X0 Y0」位置へも、穴あけ加工をします</span>、<br>G73行に「L0」または「K0」を追加する事で、 「X0 Y0」位置 への穴加工を回避できます。 </p>



<h3 class="wp-block-heading"><span id="toc24"> OSP : NCYL</span></h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>・<br>G90 G00 X0 Y0<br>G71 Z50.0<br>NCYL G73 Z-30.0 R5.0 Q1.0 F200 M53<br>X20.0 Y35.0<br>X-20.0 Y35.0<br>X-20.0 Y-30.0<br>X20.0Y-30.0<br>G80</p></blockquote>



<p class="wp-block-paragraph">OSPでは、「NCYL」という「ニーモニックコード」と呼ばれる英文字単語を使います。<br>ここで注意が必要です。<br>単語なので、「NCYLG73Z-30.0R5.0Q1.0F200」とスペースなしで連続して指令してしまうと<br>「NCLYG」と判断されてしまいます。「NCYL　G71」と「ニーモニックコード」を使用する場合には<br><span class="markerPink">必ず「スペース」が必要</span>です。</p>



<h2 class="wp-block-heading"><span id="toc25">サブプログラム呼び出し</span></h2>



<h3 class="wp-block-heading"><span id="toc26"> Fanuc : M98 もしくは　M198</span></h3>



<p class="wp-block-paragraph">M98とM198は、機種やサブプロの保存箇所によって違ってきます。<br>M98はサブプロがメインプロと同じメモリ内にある場合に使用します。<br>M198はデータサーバなど外部入出力機器内のサブプロを呼び出す場合に使用します。<br>呼び出すには、サブプロのO番号の「O」を「P」に変えて呼び出します<br>M98P1000 の場合、メインと同じメモリ内のO1000　を呼び出します。</p>



<h3 class="wp-block-heading"><span id="toc27"> OSP : CALL</span></h3>



<p class="wp-block-paragraph">OSPは「CALL」というニーモニックコードを使用します。<br>呼び出すプログラム名は「O」を先頭にした英数文字です。<br>CALL OSUB01 のように指令します</p>



<h2 class="wp-block-heading"><span id="toc28">サブプログラムからの戻り</span></h2>



<p class="wp-block-paragraph">NCプログラムの終了は、Fanuc も OSP も「M02」や「M30」です同じですが<br>もし、サブプロの終了にこのコードを使用すると、<span class="markerPink">そこでプログラムは終了してしまいます。</span><br>場合によってはサブプロで終了させたい事例もあるかもしれませんが、<br>通常は呼び出したメインプロの次の行へ戻します。</p>



<h3 class="wp-block-heading"><span id="toc29"> Fanuc : M99</span></h3>



<p class="wp-block-paragraph">サブプログラム実行中に「M99」を読み込むと、呼び出し元の次の行へ制御が移ります。<br>ちなみに、メインプログラムからの呼び出しでなく、直接「M99」で終了するプログラムを実行すると<br><span class="markerPink">永遠に繰り返し</span>ますので、サブプログラムを単独で実行したい場合には注意してください。</p>



<h3 class="wp-block-heading"><span id="toc30"> OSP : RTS</span></h3>



<p class="wp-block-paragraph">OSPも同様ですが、「RTS」がリターンコードになります。</p>



<h2 class="wp-block-heading"><span id="toc31">サブプログラムの始まりと終了</span></h2>



<h3 class="wp-block-heading"><span id="toc32"> Fanuc : %</span></h3>



<p class="wp-block-paragraph">Fanucは「%」を読み込んで初めて、NCプログラムだと認識しNC制御を始めます。<br>また、NC制御が始めり、再度「%」を読み込むと、終了します。<br>「%」～「%」の間を一つのNCプログラムとして処理します。<br>これを、連続して機械へ入力する事も可能です。<br>その場合「%」～「%」の組数により、複数のNCプログラムを一度に機械へ登録できます。<br>機種によっては、「%」と「%」の途中に、「M30」や「M99」がある場合、それをプログラム終了と判断し<br>複数のNCプログラムとして処理する機種もあります。</p>



<h3 class="wp-block-heading"><span id="toc33"> OSP : なし</span></h3>



<p class="wp-block-paragraph">OSPはFanucのような特殊な文字はありません。<br>ただし、「/」で区切る事で、メインプロとサブプロを一度に登録できます。</p>



<p class="wp-block-paragraph">O1000<br>・<br>・<br>M53G81X-150.Y-125.8R5.Z-26.549F255<br>X-150.Y125.8<br>X150.Y-125.8<br>X150.Y125.8<br>X-55.Y-142.<br>X55.Y-142.<br>G80<br>G0Z1000.<br>M9<br>CALL OSUB01<br>・<br>・<br>M2<br>/<br>OSUB01(M206)<br>M132<br>G0Z1000M339<br>M5<br>G4P7<br>M133<br>RTS<br>/<br>OUSB02(M207)<br>M132<br>G0Z1000M121<br>S100M03<br>G4P3<br>M5<br>M9<br>M133<br>RTS</p>



<p class="wp-block-paragraph">このように、よく使うコードは常にサブプロとして登録するようにすると便利です。</p>



<h2 class="wp-block-heading"><span id="toc34">工具呼び出し</span></h2>



<p class="wp-block-paragraph">T「工具番号」のコードで呼び出すのは、FanucもOSPも同じです。<br>しかし、機種によっては、主軸工具をNCプログラムで呼び出すと、無視してくれる場合と<br>エラーで止まってしまう場合があります。<br>これは、Funuc機でも、エラーになる機械もありますが、オークマ機では<br>私の知っている限りでは、全てエラーになりました。<br>基本的には、主軸工具は呼び出さない仕様がよいと思いますが、その時の工具長補正の処理は<br>よく検討しておいたほうが、トラブルは少なくなると思います。<br></p>



<h2 class="wp-block-heading"><span id="toc35">コメント文</span></h2>



<p class="wp-block-paragraph">NCプログラム中には、メモ書きとしてコメント文を挿入できます。<br>コメント文は、FanucもOSPも　(　・・・・　)　のように「 (  ) 」で囲まれた中身は<br>NC的には全く意味を持ちません。人間の参考用です。<br>以前はこの仕様は、同じだと思っていましたが、ある日、下記のような違いに遭遇した事がありました。<br>これが、全てに当てはまるのか？は、確認しておりませんが、体験談です。</p>



<h3 class="wp-block-heading"><span id="toc36"> Fanuc : (　～　) までを、コメントとする</span></h3>



<p class="wp-block-paragraph"> ( ・・・ ) に挟まれた文をコメントと扱います。<br>複数行であっても、<strong>閉じるまで</strong>、コメント扱いとなります。<br><span class="markerPink">改行があっても、コメント中</span>として処理されます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>G90<br>( T02 M06<br>G00 G43 Z50. H02<br>Z5.0 )</p></blockquote>



<p class="wp-block-paragraph">この例では、先頭の「G90」以下はすべてコメント扱いになりますが<br>最後の　)　が省略されると、エラーになる可能性があります。</p>



<h3 class="wp-block-heading"><span id="toc37"> OSP : (　だけで閉じられていなくても、改行までがコメントとなる</span></h3>



<p class="wp-block-paragraph">  ( ・・・ ) に挟まれた場合は、Fanucと同じですが、<span class="markerPink">(　だけでも改行まで</span>がコメントになります</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>G90<br>( T02 M06<br>G00 G56 Z50. H02<br>Z5.0 </p></blockquote>



<p class="wp-block-paragraph">T02 の工具交換を無視にしたい場合、上記のように行の先頭のみに　(　を入れる事で実現できます。<br>この場合は、T02 M06 はコメントとして無視させますが、<br>次の工具長補正 G00 <s>G43</s>G56 Z50. H02 は処理させたいのが、作業者の意図ですが<br>Fanucへの変換ソフトなど作成する場合には、注意が必要ですね！</p>



<p class="wp-block-paragraph">コメントは<span class="markerPink">「必ず閉じる」</span>を必須にしたほうが、安全です。</p>



<h2 class="wp-block-heading"><span id="toc38">まとめ</span></h2>



<p class="wp-block-paragraph">まだ違いは沢山あると思います。<br>ねじ切りサイクルや冷却指令なども、違いますが、これらの指令は、同じFanuc のバージョンであっても<br>機械で違う事もあるので、ここでは省略しました。<br>完璧なものは無理だと思いますが、<s>時間を見つけて、Fanuc ⇒OSP の変換ソフトを作ってみようと思っています。</s><br><a href="https://www.kazuban.com/blog/free_soft/#Soft11">Fanuc ⇒ OSP 変換ソフトを公開しました。</a><br>また、今回の記事で間違いなどあったら、コメントいただければ助かります。<br></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.kazuban.com/blog/fanuc-vs-osp/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>カスタムマクロで段取り支援</title>
		<link>https://www.kazuban.com/blog/custom-macro/</link>
					<comments>https://www.kazuban.com/blog/custom-macro/#comments</comments>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Mon, 27 Jul 2020 07:45:11 +0000</pubDate>
				<category><![CDATA[NC]]></category>
		<category><![CDATA[Fanuc]]></category>
		<category><![CDATA[NCプログラム]]></category>
		<category><![CDATA[カスタムマクロ]]></category>
		<category><![CDATA[ファナック]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=3109</guid>

					<description><![CDATA[オプション扱いの場合もありますが、CNC制御にはNCデータを操作したり、制御機のデータを読み書きしたりできる、マクロと呼ばれているプログラム機能があります。マクロは、簡易的ですがプログラミング的な言語構造と変数を使用でき [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">オプション扱いの場合もありますが、CNC制御にはNCデータを操作したり、制御機のデータを読み書きしたりできる、マクロと呼ばれているプログラム機能があります。<br>マクロは、簡易的ですがプログラミング的な言語構造と変数を使用できるため、NCプログラムをパラメータ化して汎用的なプログラムを作成する事ができます。<br>ただし、制御機によってプログラム構文は違うため、違う制御機での互換性はありません。<br>今回はマクロの使用例として、ファナック系カスタムマクロのシステム変数から、座標系設定など段取りに利用できそうなマクロプログラムを作成してみます。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-10" checked><label class="toc-title" for="toc-checkbox-10">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">ファナック・カスタムマクロ</a><ol><li><a href="#toc2" tabindex="0">変数</a></li><li><a href="#toc3" tabindex="0">カスタムマクロの変数</a></li><li><a href="#toc4" tabindex="0">変数への代入と使用方法</a></li><li><a href="#toc5" tabindex="0">演算</a></li></ol></li><li><a href="#toc6" tabindex="0">システム変数</a><ol><li><a href="#toc7" tabindex="0">工具補正量</a></li><li><a href="#toc8" tabindex="0">位置情報</a></li><li><a href="#toc9" tabindex="0">ワーク座標系の機械座標系からのオフセット量</a></li></ol></li><li><a href="#toc10" tabindex="0">ワーク上面をワーク座標系Z座標に登録するマクロを作成してみましょう！</a><ol><li><a href="#toc11" tabindex="0">工具長既知のマスター工具を用意する</a></li><li><a href="#toc12" tabindex="0">マスター工具先端とワーク上面（素材）を合わせる</a></li><li><a href="#toc13" tabindex="0">工具の長さを工具長補正へ登録する</a></li></ol></li><li><a href="#toc14" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">ファナック・カスタムマクロ</span></h2>



<p class="wp-block-paragraph">一例としてワーク原点や工具情報の設定など、段取り支援プログラムを作成してみようと思います。<br>カスタムマクロはプログラムの一種なので言語的規則がありますが、ここでは基本的な構造や文法など掘り下げて説明はしていません。<br>また今回の例では、変数以外の構文はそれほど使用しません。<br>変数への代入・読み込み程度で作成するので、プログラミング的な知識はそれほど必要ありません。<br>言語的トレーニングは、工作機メーカーさんのセミナーやネット上にも沢山情報があると思うので、興味ある方はそちらを参照してみてください。</p>



<h3 class="wp-block-heading"><span id="toc2">変数</span></h3>



<p class="wp-block-paragraph">カスタムマクロに限らず、プログラム言語には「変数」という、ある期間データを記憶してく識別名があります。<br>この「変数」にデータを代入する事で、パラメータとして汎用的に使用する事ができるプログラムを作成する事ができます。<br>通常のプログラム言語では「変数」には、「数値」や「文字」などいろいろな「データ型」を代入する事ができますが、ファナックのカスタムマクロは「数値」しか代入できません。<br>このことからも、複雑なプログラムを行う言語ではなく、NCデータをパラメータ化して、汎用的なＮＣに進化させる言語だといえます。</p>



<h3 class="wp-block-heading"><span id="toc3">カスタムマクロの変数</span></h3>



<p class="wp-block-paragraph">ファナックの変数は、「#」+「数字」の形しか使用できません。<br>さらに、数字の範囲により、「ローカル変数」「コモン変数」「システム変数」と分類されています。<br>さらに、マクロ呼び出しで数値を引数で渡す場合、非常にわかりづらい仕様になっています。<br>こういった制限のため、コメントをうまくつけないと、他人のマクロや自分作でも時間がたつと、理解できないプログラムになってしまいます。<br>ＣＡＭがまだ普及していなかった時代には、その使いづらさにも負けず、マクロを駆使して穴あけやポケット加工を汎用化して生産性をあげている削り屋さんがいましたね～<br>興味あるかたは、ネットなどで検索してください。<br>便利なマクロが落っこちているかも？しれませんよん！<br>ここでは、主に「ローカル変数：#1～#33」と「システム変数：#1000以上」のみでプログラムしてみようと思います。</p>



<h3 class="wp-block-heading"><span id="toc4">変数への代入と使用方法</span></h3>



<p class="wp-block-paragraph">代入方法は、「# 数字」=「数値」となります。</p>



<pre class="wp-block-preformatted">#1 = 100.123
#2 = -50.987
と定義する事で、#1 と　#2 に右辺のデータが記憶されます。
この変数を通常のＮＣプログラムに使用すると、通常の定数指示と同様に使用する事ができます
G01 X#1 Y#2 F2000　→　G01 X100.123 Y-50.987 F2000 と同様</pre>



<h3 class="wp-block-heading"><span id="toc5">演算</span></h3>



<p class="wp-block-paragraph">「変数」は四則演算や三角関数など、ある程度の演算機能ももっています<br>うまくマクロで演算させる事で、マクロ内で面倒な計算をさせる事ができます。<br>例えば、主軸の回転数は、切削速度（Vc）と工具径（D）から次の計算式で求める事ができます。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="230" height="212" src="https://www.kazuban.com/blog/wp-content/uploads/2020/07/Rpm.png" alt="" class="wp-image-3118"/></figure>



<p class="wp-block-paragraph">この計算式を使い、工具径と切削速度を変数に代入する事で、主軸回転数を自動的に計算するマクロを作成してみます。</p>



<pre class="wp-block-preformatted">%
O1000
G90G00G17G40G80G49
(++++++++++++++++++++)
<strong>#1=1.   (Tool)
#2=10.3 (Dia)
#3=20.  (Vc)</strong>
(+++++++++++++++++++)
<strong>#10=[ #3 * 1000. / 3.14 / #2 ] (SP)</strong>
(+++++++++++++++++++)
G54
N0001
<strong>T#1</strong>
M06
G90G00X0Y0
G43Z100.<strong>H#1</strong>
Z50.0
<strong>S#10</strong> M03
M08
G98G83R5.0Z-20.0Q10.0F120L0
X10.0 Y0
X20.0 Y0
X30.0 Y0
G80
M09
G91G28Z0
G91G49Z0
G90M05
M30
%</pre>



<p class="wp-block-paragraph">こんな感じですね。<br>上部の、#2,#3 の工具径と切削速度の変数を編集する事で、自動的に回転数を決定できます。<br>また、#1に工具番号を設定しますが、工具番号と工具長補正番号に一定のルール（この例題の場合では、T番号＝H番号）がある場合には、H番号も変数化できます。<br>このように、変数を利用してパラメータ化する事で、汎用的なプログラムを作成する事ができます。<br>今回は、３つの変数しか使用していませんが、変数が「#」+「数値」の形なので変数が多くなると、変数が何を示しているのかわからなくなってきます。<br>そんな意味でも変数はなるべく利用者が分かりやすいように、上部にまとめて、コメントを入れておくことをお勧めします。<br>マクロプログラムに慣れてくると、ポケット加工やヘリカル穴あけなどよく使う形状はCAMなしでも利用できるようになります。<br>具体例は、ネット上でも公開されていますので、検索してみてください。</p>



<h2 class="wp-block-heading"><span id="toc6">システム変数</span></h2>



<p class="wp-block-paragraph"><span class="markerPink">「<strong>システム変数</strong>」は、<strong>工具情報や現在位置</strong>、<strong>ワーク座標系位置</strong>など制御機の内部データが記録されている、特殊な変数</span>です。<br>この変数を操作する事で、段取り時に必要な、工具長補正値設定、ワーク座標系設定などをプログラム化する事ができます。<br>下記、手元の資料を抜粋しますが、制御機のバージョンやオプションの状況により変数番号が変わる場合があります。<br> もし、実際に使用する場合には、お使いの制御機の取説でご確認ください。</p>



<h3 class="wp-block-heading"><span id="toc7">工具補正量</span></h3>



<ul class="wp-block-list"><li>変数番号の範囲は、補正番号<br>（例）D01 : #2001　　D02 : #2002<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</li><li>工具補正メモリA<br>#2001 ～  #2200<br>#10001 ～ #10999<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</li><li>工具補正メモリB：パラメータNo.6000#3=0<br>#2001 ～ #2200　：　工具補正量（摩耗）<br>#10001 ～ #10999<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br>#2201 ～ #2400　：　工具補正量（Hコード・形状）<br>#11001 ～ #11999<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</li><li>工具補正メモリB：パラメータNo.6000#3=1<br>#2001 ～ #2200　：　工具補正量（形状）<br>#10001 ～ #10999<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br>#2201 ～ #2400　：　工具補正量（Hコード・摩耗）<br>#11001 ～ #11999<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</li><li>工具補正メモリC：パラメータNo.6000#3=0<br>#2001 ～ #2200　：　工具補正量（Hコード・摩耗）<br>10001 ～ #10999<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br>#2201 ～ #2400　：　工具補正量（Hコード・形状）<br>#11001 ～ #11999<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br>#12001 ～ #12999　：　工具補正量（Dコード・摩耗）<br>#13001 ～ #13999　：　工具補正量（Dコード・形状）<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</li><li>工具補正メモリC：パラメータNo.6000#3=1<br>#2001 ～ #2200　：　工具補正量（Hコード・形状）<br>10001 ～ #10999<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br>#2201 ～ #2400　：　工具補正量（Hコード・摩耗）<br>#11001 ～ #11999<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br>#2401 ～ #2600　：　工具補正量（Dコード・形状）<br>#12001 ～ #12999<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br>#2601 ～ #2800　：　工具補正量（Dコード・摩耗）<br>#13001 ～ #13999</li></ul>



<h3 class="wp-block-heading"><span id="toc8">位置情報</span></h3>



<ul class="wp-block-list"><li>変数番号の範囲は、軸番号<br>（例）X軸の現在位置：#5021　Y軸の現在位置：#5022　Z軸の現在位置：#5023<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</li><li>直前の終点位置（ワーク座標系）<br>#5001 ～ #5020<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</li><li>現在位置（機械座標系）<br>#5021 ～ #5040<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</li><li>現在位置（ワーク座標系）<br>#5041 ～ #5060</li></ul>



<h3 class="wp-block-heading"><span id="toc9">ワーク座標系の機械座標系からのオフセット量</span></h3>



<ul class="wp-block-list"><li>変数番号の範囲は、軸番号<br>（例）G54のX軸の機械座標系位置：#5221　Y軸の現在位置：#5222　Z軸の現在位置：#5223<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</li><li>G54ワーク原点オフセット量<br>#5221 ～ #5240<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</li><li>G55ワーク原点オフセット量<br>#5241 ～ #5260<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</li><li>G56ワーク原点オフセット量<br>#5261 ～ #5280<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</li><li>G57ワーク原点オフセット量<br>#5281 ～ #5300<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</li><li>G58ワーク原点オフセット量<br>#5301 ～ #5320<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</li><li>G59ワーク原点オフセット量<br>#5321 ～ #5340<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</li><li>G54.1P1　拡張ワーク原点オフセット量<br>#7001 ～ #7020<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</li><li>G54.1P2　拡張ワーク原点オフセット量<br>#7021 ～ #7040<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</li><li>G54.1P3 ～<br>#7041 ～ <br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</li></ul>



<h2 class="wp-block-heading"><span id="toc10">ワーク上面をワーク座標系Z座標に登録するマクロを作成してみましょう！</span></h2>



<p class="wp-block-paragraph">加工段取りで、素材（ワーク）を機械テーブルへ載せた後は、その素材の位置関係を機械へ教えてあげる必要があります。<br>最近では、座標系はワーク座標系を使用する方法が一般的だと思いますので、ワーク座標系のシステム変数を操作してみようと思います。<br>これから作成するマクロは、主軸端面が素材上面へ接触する位置を、ワーク座標系の「Z0.000」として登録するマクロを作成してみます。</p>



<h3 class="wp-block-heading"><span id="toc11">工具長既知のマスター工具を用意する</span></h3>



<p class="wp-block-paragraph">これから作成するマクロは、すでに工具長がわかっている工具（マスター工具）を利用します。<br>必ずしも専用マスター工具を用意する必要はなく、すでに工具長が制御機の工具長補正項目に登録されている工具でOKです。<br>工具長補正値は、主軸端面からマスター工具先端までの長さがプラス値で入っている仕様だとします。<br>専用マスター工具は必須ではありませんが、基準工具として、マスター工具を用意しておいたほうが便利な場面もあるで、ATCに余裕があれば準備しておくことをお勧めします。<br>もし、工具長既知の工具がない場合、手動による、工具長補正データの登録方法を以前に説明してありますので、下記を参考にしてみてください。</p>



<figure class="wp-block-embed-wordpress wp-block-embed is-type-wp-embed is-provider-じじぃの引出し"><div class="wp-block-embed__wrapper">

<a href="https://www.kazuban.com/blog/lenrth-compensation/" title="ＮＣプログラム／工具長補正" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://www.kazuban.com/blog/wp-content/uploads/cocoon-resources/blog-card-cache/5730f7288869ebd513ed8153faf3e19c.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">ＮＣプログラム／工具長補正</div><div class="blogcard-snippet external-blogcard-snippet">前回は「工具径補正」について説明しました。これは、定義されている輪郭（工具経路）を制御機に再定義（オフセット）させる指令です。この機能により、使用工具径や加工状況に合わせて「輪郭」を再定義し直す処理が省略できます。ただし、あくまでも定義輪郭...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.kazuban.com/blog/length-compensation/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.kazuban.com</div></div></div></div></a>
</div></figure>



<h3 class="wp-block-heading"><span id="toc12">マスター工具先端とワーク上面（素材）を合わせる</span></h3>



<p class="wp-block-paragraph">まずは手動で主軸端面とワーク上面を合わせる場合を考えてみます。<br>マスター工具を主軸へ呼び出し、ワーク上面へ置いた長さ既知のゲージへ接触する直前位置まで工具をおろします。<br>強く接触させてしまうと、マスター工具が破損してしまうので、十分注意いて、ブロックゲージを動かしながら接触位置を確認してください。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="718" height="568" src="https://www.kazuban.com/blog/wp-content/uploads/2020/01/工具長１.png" alt="" class="wp-image-1634" srcset="https://www.kazuban.com/blog/wp-content/uploads/2020/01/工具長１.png 718w, https://www.kazuban.com/blog/wp-content/uploads/2020/01/工具長１-300x237.png 300w" sizes="(max-width: 718px) 100vw, 718px" /></figure>



<p class="wp-block-paragraph">この時点での、<span class="markerPink"><strong>機械座標系</strong></span>を読み取ります。<br>主軸端面がワーク上面へ接触する位置は、現高さから<br>「ブロックゲージ高さ（50.000)」+「マスター工具長」だけ下がった位置となります。<br>「Zワーク座標」＝「現機械座標値」-「ゲージ厚」-「マスター工具長」<br>になります。<br>この値を、使用するワーク座標系Z値へ登録すればOKですが、この作業をマクロにやらせてみようと思います。<br>X、Yの原点は、すでに使用ワーク座標系に登録済みとします。</p>



<pre class="wp-block-preformatted">%
O8001(SET TO WORK Z)
(--------------------)
#1=54. (WORK COORDINATE)
#2=50. (GAUGE)
#3=29. (MASTER T-NO)
#4=29. (MASTER H-NO)
(--------------------)
#11=#0
#12=#0
#13=#0
(--------------------)
G17G00G90
T[#3]M6
G#1X0Y0
#3006=1(Z MEASURE)
M00
#11=#[11000+#4] (LENGTH OF MASTER TOOL)
#12=#5023-#2 (CURRENT_MACHINE_Z - GAUGE)
#13=[#1*20+4143] (Z OF WORK COORDINATE NUMBER)
#[#13]=#12-#11
G91G28Z0
M30
%</pre>



<p class="wp-block-paragraph">こんな感じでしょうか？<br>一つ、#3006=1(****)という特殊な変数を使用しています。<br>これは、(****)の文字列を画面に表示して停止する変数です。<br>ここでは、画面に「Z MEASURE」を表示して停止するので、<strong>ハンドルモード</strong>でマスター工具先端を、ブロックゲージ上面に合わせる操作を促しています。<br> #11=#[11000+#4]  は、#11=<strong>#11029</strong> となりますね。<br>#11029 は上記のシステム変数リストで確認してください。<br>今回は「工具補正メモリB：パラメータNo.6000#3=1」の機械の場合を想定しています。<br>H<strong>29</strong> の補正に登録されているデータを、#11に代入するの意味となります。<br>次の、#12=#5023-#2 は、#5023が現在のZ機械座標ですから、<br>「現機械座標値」-「ゲージ厚」を#12に代入する意味となります。<br>つまり、T<strong>29</strong>（マスター工具）の先端が、ワーク上面と接触する位置となります。<br>#13=[#1×20+4143] がちょっとポイントでしょうか？<br>上記のシステム変数のリストから、ワーク座標系・G54の<strong>Z値</strong>は、<strong>#5223</strong>です。<br>G55の<strong>Z値</strong>は、<strong>#5243</strong>ですね。<br><span class="markerYellow">ワーク座標系番号が増えると、システム変数値は、<strong>20</strong> 増えています。</span><br>したがって、ワーク座標番号からシステム変数を求める方法は、<br>システム変数＝「ワーク座標系番号」× 20 + 4143 で求められますね。<br>G54の場合、#13 = 54×20+4143 = 5223　となります<br><span class="markerPink">#[#13] は、#5223 と同じ意味です。</span><br> 整理すると、<br>#11 が、マスター工具長<br>#12がマスター工具がワーク上面と接触する位置なので<br>主軸端面が、ワーク上面と接触する位置は、#12-#11　となります。<br>この値を、使用する<strong>G54のZ値：#5223</strong>へ<strong>代入</strong>する事で、G54ワーク座標系のZ値を設定できます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>実際の操作は、マスター工具に交換して停止したのち、ハンドルモードへ切換、マスター工具先端を、ブロックゲージ上面に合わせ、再度メモリモードでサイクルスタートすれば、ワーク（素材）上面の機械座標系Z値が、ワーク座標系へ登録されます。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc13">工具の長さを工具長補正へ登録する</span></h3>



<p class="wp-block-paragraph">次に、使用する工具の長さを測定し、工具長補正番号へ登録するマクロを作成してみましょう。<br>方法の概略は</p>



<ul class="wp-block-list"><li>事前にワーク（素材）原点・上面のワーク座標系を設定しておく</li><li>長さ既知の工具（マスター工具）を使用する</li><li>測定したい工具と工具交換し、<strong>ハンドルモード</strong>で、ブロックゲージと接触するZ位置へ移動する。</li><li>その時の、Z軸機械座標位置とマスター工具の接触位置との差により、対象の工具の長さを求める</li><li>求めた長さを、工具長補正番号へ入力する</li></ul>



<p class="wp-block-paragraph">こんな感じのマクロを作成してます。</p>



<pre class="wp-block-preformatted">%
O8002(MEASURE TOOL LENGTH)
(--------------------)
#1=54. (WORK COORDINATE)
#2=50. (GAUGE)
#3=1. (T-NO)
#4=1. (H-NO)
#5=29.(MASTER_TOOL_H-NUMBER)
(--------------------)
#11=#0
#12=#0
#13=#0
#14=#0
(--------------------)
#11=[#1*20+4143] (Z of work coordinate)
#12=#[#11]+#[11000+#5]+#2 (MASTER_TOOL_GAUGE_HIGHT)
G17G00G90
T[#3]
M06
G[#1]G00X0Y0
G90
#3006=1(Z MEASURE ON HANDLE_MODE)
M00
#13=#12-#5023 (Difference from MASTER-TOOL)
#14=#[11000+#5]-#13 (Length of TOOL)
#[11000+#4]=#14 (Saving Tool-Length-Offset.)
G91G28Z0
M30
%</pre>



<p class="wp-block-paragraph">#11 で指定ワーク座標系のZ軸情報のシステム変数番号を求めます<br>#12 でワーク座標系Z値とマスター工具長とブロックゲージ高さから、マスター工具がブロックゲージへ接触する機械座標を求めます<br>対象工具と工具交換後、#3006 で機械が停止するので、ハンドルモードへ切換、ブロックゲージと接触させます。<br>#13で、その時の機械座標値とマスター工具が接触する機械座標値（#12）の差を求めます。<br>#14で、マスター工具長と対象工具長とマスター工具長の差（#13）から、対象工具長を求めています。<br>#[11000+#4]=#14　で、対象工具長補正番号へ書き込みます </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>実際の操作は、ワーク（素材）のXYZ原点のワーク座標系への登録は終了していて、マスター工具の工具長も工具長補正へ登録済みが条件となります。<br>プログラムをスタートすると、測定する工具へ工具交換後、停止します。<br>ハンドルモードへ切換、ブロックゲージ上面へ工具先端を合わせます。<br>再度、メモリモードへ戻し、サイクルスタートで、工具長補正番号へ工具長さが登録されます。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc14">まとめ</span></h2>



<p class="wp-block-paragraph">今回は、マスター工具を利用して、ワーク（素材）Z軸のワーク座標値の設定と、任意工具の工具長補正値設定をカスタムマクロで作成してみました。<br>カスタムマクロは、マクロ呼び出し機能により、固定サイクル的な機能をユーザー側でも作成するのが、もともとの目的のような気がしていますが、<br>単純な変数を使用するだけでも、便利な場合があります。<br>例えばシステム変数を利用すれば、工具長補正だけでなく、工具径補正へもプログラムから書き込み可能ですから、<br>工具径補正を使用する場合、プログラムの最初に、デフォルトの工具径補正値を設定しておくと、機械側での入力忘れなどの対策にもなると思います。<br>また、今回説明のシステム変数を利用する事で、機械の現時点の情報をプログラム側へ取り込む事ができます。<br>そのことを利用して、さまざまな処理をさせることも可能となります。<br>その一例として、簡単なシステム変数の操作を紹介しました。<br>ただし、今回のプログラムは実機では検証しておりませんので、実際に利用する場合には十分に確認の上、自己責任で使用してください。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.kazuban.com/blog/custom-macro/feed/</wfw:commentRss>
			<slash:comments>17</slash:comments>
		
		
			</item>
		<item>
		<title>DXFから、穴情報を取出す</title>
		<link>https://www.kazuban.com/blog/get-circle/</link>
					<comments>https://www.kazuban.com/blog/get-circle/#comments</comments>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Sun, 03 May 2020 07:30:23 +0000</pubDate>
				<category><![CDATA[NC]]></category>
		<category><![CDATA[DXF]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[Fanuc]]></category>
		<category><![CDATA[エクセル]]></category>
		<category><![CDATA[サブプログラム]]></category>
		<category><![CDATA[ファナック]]></category>
		<category><![CDATA[メインプログラム]]></category>
		<category><![CDATA[固定サイクル]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=2442</guid>

					<description><![CDATA[外出自粛のなか、DXFデータの円要素を読み込み、穴情報を取り出すソフトを作成してみました。CADなどで描いた「円要素」を穴と捉え、位置や直径などを取り出します。取り出した情報ファイルはテキストやエクセルの他に、簡易的なＮ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">外出自粛のなか、DXFデータの円要素を読み込み、穴情報を取り出すソフトを作成してみました。<br>CADなどで描いた「円要素」を穴と捉え、位置や直径などを取り出します。<br>取り出した情報ファイルはテキストやエクセルの他に、簡易的なＮＣデータも自動作成する仕様としました。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-12" checked><label class="toc-title" for="toc-checkbox-12">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">DXFファイル</a><ol><li><a href="#toc2" tabindex="0">DXFファイルを覗いてみる</a></li><li><a href="#toc3" tabindex="0">円情報はどこにある？</a></li></ol></li><li><a href="#toc4" tabindex="0">穴情報取り出しソフトGetCircleFromDxf.exe</a><ol><li><a href="#toc5" tabindex="0">C++Builder</a></li><li><a href="#toc6" tabindex="0">こんなソフト</a></li><li><a href="#toc7" tabindex="0">ダウンロード</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">DXFファイル</span></h2>



<p class="wp-block-paragraph">「DXF」は「Autodesk社」が開発した、CAD間でやり取りできる、データ構造の一種ですが、事実上の標準フォーマットになっていてほとんどのCADで読み書きできます。<br>DXFには、テキストとバイナリ形式が存在するようですが、ここで紹介するのは、テキスト形式に限定させていただきます。</p>



<h3 class="wp-block-heading"><span id="toc2">DXFファイルを覗いてみる</span></h3>



<p class="wp-block-paragraph">テキスト形式のDXFファイルであれば、メモ帳やエディタなどで開く事ができます。</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.kazuban.com/blog/wp-content/uploads/2020/05/DxfOpen.png" alt=""/></figure>



<p class="wp-block-paragraph">DXFファイルは、ほとんどのCADであれば、作成する事ができると思いますし、このサイトでも取り上げてる、「Fusion360」でも作成可能です。<br>スケッチモードで適当な図形（今回は穴がテーマなので円など）を描いて、<br>「スケッチ１」⇒ マウス右クリックから「DXF形式で保存」で作成できます。</p>



<figure class="wp-block-image size-large"><a href="https://www.kazuban.com/blog/wp-content/uploads/2020/05/DXF_Create.png" target="_blank"><img decoding="async" src="https://www.kazuban.com/blog/wp-content/uploads/2020/05/DXF_Create.png" alt=""/></a></figure>



<p class="wp-block-paragraph">Fusion360で作成された「DXFファイル」をエディタなどで開いてみます。<br>意味は置いといて、数字と単語が羅列されています。<br>このDXFフォーマットの詳しい内容は理解していませんが、<span class="markerPink">２行が一組</span>で意味があるようです。<br>ここでは詳細の説明はできませんので、ご了承ください。<br>興味ありましたら、<a href="https://help.autodesk.com/view/ACD/2019/JPN/?guid=GUID-235B22E0-A567-4CF6-92D3-38A2306D73F3">Autodeskのサイトなど</a>から検索してみてください。</p>



<h3 class="wp-block-heading"><span id="toc3">円情報はどこにある？</span></h3>



<p class="wp-block-paragraph">ここでのテーマは、<span class="markerYellow">DXFから穴情報を取り出す</span>事です。<br>通常、加工図面では、穴は円で描かれていると思うので、まずは円情報を探してみます。<br>DXF形式の、「円」のキーワードは「<strong>CIRCLE</strong>」になります。<br>ちなにみ、「<strong>CIRCLE</strong>」は閉じている図形です。<span class="markerPink">閉じていない場合には「ARC」</span>となりますので注意してください。<br>では、「閉じた円」が含まれるDXFファイルを作成し、「<strong>CIRCLE</strong>」文字列を検索してみます。<br> <span class="markerYellow">位置や円径などは単純でないほうが分析しやすい</span>です <br><br></p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.kazuban.com/blog/wp-content/uploads/2020/05/DXF_Read.png" alt=""/></figure>



<p class="wp-block-paragraph">「<strong>CIRCLE」</strong>と「<strong>AcDbCircle</strong>」が見つかりました。<br>私自身、DXF形式を理解しているわけではないので、正確な説明はできませんが、「円」の情報はこの２つのキーワードから取り出すことができそうです。<br>この例で分析してみると、「0」「CIRCLE」「5」「100」と続き、その後<br>「8」「0」「100」「AcDbCircle」「10」「-44.847&#8230;」「20」「34.949&#8230;」が見つかります。<br>この値を<span class="markerPink">元図面と比較するとルールが見えて</span>きます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>「10」の次が円中心のＸ座標。<br>「20」の次が円中心のＹ座標。<br>「30」の次が円中心のＺ座標。<br>「40」の次が円の半径。</p></blockquote>



<p class="wp-block-paragraph">これが分かれば、「DXFファイル」から「<strong>AcDbCircle</strong>」を検索し、その次の行から「10」「20」・・のキーワードで、穴の中心と径の情報を取り出す事ができますね。<br>ただ「<strong>AcDbCircle</strong>」は<strong>サブクラス</strong>としての定義みたいなので、単純な「<strong>CIRCLE</strong>」セクションに直接図形情報がある場合もあるようです。<br>ソフトを開発する場合、より汎用性を求めるなら、そちらにも対応しておいたほうがいいかもしれません。</p>



<h2 class="wp-block-heading"><span id="toc4">穴情報取り出しソフト<br>GetCircleFromDxf.exe</span></h2>



<p class="wp-block-paragraph">DXFの円定義方法がわかったので、このルールを基に穴の位置と径の情報として取り出すソフトを作成しました。</p>



<h3 class="wp-block-heading"><span id="toc5">C++Builder</span></h3>



<p class="wp-block-paragraph">開発環境は、C++Builder Community Editiond です。<br>個人使用の場合には、１年間無料で使用できます。<br>ライセンス更新もできますからソフト開発の勉強にはもってこいです<br></p>



<figure class="wp-block-embed-wordpress wp-block-embed is-type-wp-embed is-provider-じじぃの引出し"><div class="wp-block-embed__wrapper">

<a href="https://www.kazuban.com/blog/cbuilder-license-update/" title="C++Builder Community Edition　のライセンス更新" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="320" height="70" src="https://www.kazuban.com/blog/wp-content/uploads/2019/07/10_3_1.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.kazuban.com/blog/wp-content/uploads/2019/07/10_3_1.png 630w, https://www.kazuban.com/blog/wp-content/uploads/2019/07/10_3_1-300x65.png 300w" sizes="(max-width: 320px) 100vw, 320px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">C++Builder Community Edition　のライセンス更新</div><div class="blogcard-snippet internal-blogcard-snippet">会社では開発環境として、「C++Builder EX6」を使用しています私はソフトウェア開発が商売ではなく、加工が楽になるような、NCデータやNC機械や測定器などのユーティリティソフトを作成していますC++の統合開発環境としては、やはりMSのVisual C++ がメジャーだと思いますが私は、二昔以...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.kazuban.com/blog" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">www.kazuban.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2019.07.29</div></div></div></div></a>
</div></figure>



<h3 class="wp-block-heading"><span id="toc6">こんなソフト</span></h3>



<p class="wp-block-paragraph">まずは、起動した、ウィンドウに「DXFファイル」を<span class="markerPink">ドロップ</span>します</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.kazuban.com/blog/wp-content/uploads/2020/05/Soft01.png" alt=""/></figure>



<p class="wp-block-paragraph">ドロップすると、ファイル名や作成するデータの選択画面になります。</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.kazuban.com/blog/wp-content/uploads/2020/05/Soft02.png" alt=""/></figure>



<p class="wp-block-paragraph">デフォルトでは、「Text」と「Excel」がチェックされています<br>必要ない場合には、チェックを外します。<br>「円座標取出し」ボタンで、ドロップした「DXFファイル」と同じフォルダに、穴の<strong>中心位置と穴径</strong>の情報ファイルが出力されます。<br>簡易的なテンプレートデータですが、「NcData」をチェックすると、<strong>ファナック系</strong>のＮＣデータを作成します。</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.kazuban.com/blog/wp-content/uploads/2020/05/Soft03.png" alt=""/></figure>



<p class="wp-block-paragraph">ＮＣデータは、<span class="markerYellow"> ファナックをターゲット</span>にしています<br>メインプロで工具交換や回転など行い、サブプロには、穴径で分別した穴位置を指令するような構成です</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.kazuban.com/blog/wp-content/uploads/2020/05/Folder.png" alt=""/></figure>



<p class="wp-block-paragraph">ＮＣプログラムの構成やメイン・サブプログラムについては下記で詳しく説明しています。<br>興味あれはご覧ください。</p>



<figure class="wp-block-embed-wordpress wp-block-embed is-type-wp-embed is-provider-じじぃの引出し"><div class="wp-block-embed__wrapper">

<a href="https://www.kazuban.com/blog/main-sub-pro/" title="NCプログラム／プログラム構成" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="244" height="180" src="https://www.kazuban.com/blog/wp-content/uploads/2021/01/Milling2.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.kazuban.com/blog/wp-content/uploads/2021/01/Milling2.png 1022w, https://www.kazuban.com/blog/wp-content/uploads/2021/01/Milling2-300x221.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2021/01/Milling2-768x567.png 768w" sizes="(max-width: 244px) 100vw, 244px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">NCプログラム／プログラム構成</div><div class="blogcard-snippet internal-blogcard-snippet">NCプログラムの構成は、大きく分けると２種類にわける事ができます。一つは加工に必要な準備機能で、もう一つは、実際の加工経路の動作指令です。さらに、マシニングセンターを対象にすると、準備機能は４つに分ける事ができます。CAMのポストプロセッサを編集する場合やプログラム全体の構成を検討する際、この基本構...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.kazuban.com/blog" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">www.kazuban.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.01.28</div></div></div></div></a>
</div></figure>



<p class="wp-block-paragraph"><span class="markerPink">「DXF」では「<strong>穴の属性</strong>」までは認識できない</span>ので、メインプロは、単純な固定サイクルコードを出力するのみです。<br>固定サイクルの種別、加工深さ、加工条件などは、<span class="markerPink">編集が必要</span>です。</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.kazuban.com/blog/wp-content/uploads/2020/05/NcData.png" alt=""/></figure>



<p class="wp-block-paragraph">実際の条件などの出力は「DXF」の情報だけでは、取得できないので「DXF」だけで求めるＮＣデータを作成する事はできませんが<br>ＮＣコードの出力順序など若干のカスタマイズはできるようにしました。<br>実行ファイルと同梱されている、「TempFile」の中の４つのテキストファイルでカスタマイズできます。</p>



<pre class="wp-block-preformatted">・「Header.txt」
　メインプロ全体の、始まりのコードです。Ｏ番号や初期化コードを指令。

・「Footer.txt」
　メインプロ全体の、終了のコード。キャンセルや「M30」。

・「ToolBegin.txt」
　工具交換など、各工程の始まりのコード。
  工具交換、回転、工具長補正、固定サイクルなど。

・「ToolEnd.txt」
　各工程の終了コード、回転・冷却のキャンセルなど。</pre>



<h3 class="wp-block-heading"><span id="toc7">ダウンロード</span></h3>



<p class="wp-block-paragraph"><a href="https://www.kazuban.com/blog/free_soft/#Soft03">こちらから、ダウンロードできます。</a><br>単純な穴あけ加工や、穴位置の最終確認などには、使えるかもしれません。<br>「Vector」にも登録しました。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><a rel="noopener" href="https://www.vector.co.jp/soft/winnt/business/se521263.html" target="_blank"><strong>「Vector」はこちらから、ダウンロードできます。</strong></a></p></blockquote>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.kazuban.com/blog/get-circle/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>NCプログラム／プログラム構造</title>
		<link>https://www.kazuban.com/blog/nc-gcode-01/</link>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Sat, 30 Nov 2019 09:30:55 +0000</pubDate>
				<category><![CDATA[NC]]></category>
		<category><![CDATA[CAM]]></category>
		<category><![CDATA[Fanuc]]></category>
		<category><![CDATA[G-Code]]></category>
		<category><![CDATA[NCプログラム]]></category>
		<category><![CDATA[Roeders]]></category>
		<category><![CDATA[レダース]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=1289</guid>

					<description><![CDATA[最近の投稿は、覚書きとしても残しておきたかったので、素人ながらLinux系の投稿が連続していましたが、今回は気分を変えて、今まで携わってきたＮＣ関連の記事を書こうと思います。 目次 ＮＣプログラムとは？ プログラムの構成 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">最近の投稿は、覚書きとしても残しておきたかったので、素人ながらLinux系の投稿が連続していましたが、今回は気分を変えて、今まで携わってきたＮＣ関連の記事を書こうと思います。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-14" checked><label class="toc-title" for="toc-checkbox-14">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">ＮＣプログラムとは？</a></li><li><a href="#toc2" tabindex="0"> プログラムの構成 </a><ol><li><a href="#toc3" tabindex="0">コメント文</a></li><li><a href="#toc4" tabindex="0">「%」ファナックの特殊文字</a></li><li><a href="#toc5" tabindex="0">Ｎアドレス＋数字　／　シーケンス番号</a></li><li><a href="#toc6" tabindex="0"> Ｇアドレス＋数字　／　Ｇコード </a></li><li><a href="#toc7" tabindex="0">軸＋数値　／　Ｘ，Ｙ，Ｚ、Ａ，Ｂ，Ｃ，・・</a></li><li><a href="#toc8" tabindex="0">  Mアドレス＋数字　／　Mコード  </a></li><li><a href="#toc9" tabindex="0">  Fアドレス＋数値　／　送り速度</a></li><li><a href="#toc10" tabindex="0">   Sアドレス＋数値　／　主軸回転数 </a></li><li><a href="#toc11" tabindex="0"> Ｔアドレス＋数値　／ 　工具指定</a></li></ol></li><li><a href="#toc12" tabindex="0">まとめ</a><ol><ol><li><a href="#toc13" tabindex="0">ＮＣプログラムの記事</a></li></ol></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">ＮＣプログラムとは？</span></h2>



<p class="wp-block-paragraph">ＮＣ工作機械のコントローラへの指令の集まりです。<br>プログラムとありますが、ファナック系は基本的には命令コードの羅列ですね。 通常のプログラミング言語とはちょっと違います。<br>オプションでカスタムマクロという言語もありますが、分岐や条件判断機能はありますが、変数に制限が多くて一般的なプログラミング言語とは程遠いです。<br> 主要なコントローラは、「Fanuc系」「Heidenhain」「Siemens」「Roeders」などが上げられますが、 構文は全く違います。<br>　　参照（　<a href="https://www.kazuban.com/blog/fanuc-heidenhain-roeders/">ファナック vs ハイデンハイン vs レダース</a>　）<br>各コントローラの言語構文はぜんぜん違いますが、主なコントローラは基本的な工具経路を指令するGコード構文は理解できるようにはなっています。<br>ただし、まったく同一ではないので、その違いの知識は必要です。<br>日本製の工作機械の場合ほとんど「Fanuc系」ですが、その中でも工作機械メーカーによって、「Fanuc」「Meldas」「OSP」「Tosnuc」「Sodick」など、微妙な違いがあり完全な互換性はありません。<br> さらに、 <span class="markerPink">「 同じFanuc製」</span>で <span class="markerPink">「 同じ機械メーカー製」</span>であっても、コントローラの仕様やバージョンによっても一部違いがあり、同じＮＣプログラムが使用できない場合も多いのでやっかいです。<br> 数種類の機械メーカー製の工作機械を扱う場合、ユーザー側からみるとかなり面倒な仕様ですね。<br> ただし、補助機能と呼ばれる「工具交換」「冷却装置制御」「コンベア」「吸引器作動」など加工そのものではなく、加工に必要な<span class="markerYellow">補助的な部分</span>は機械に依存するので互換性は少ないです。<br> <span class="markerYellow">対して機械に依存しない加工経路を指令する基本的なＧコード部分は大きな違いはありません。</span><br> まずは、基本的で一番重要な、工具の動きを制御する部分のＧコードを理解しましょう。<br> 海外機も含めFanuc以外のコントローラでも動作させられる可能性が増えます。 </p>



<h2 class="wp-block-heading"><span id="toc2"> プログラムの構成 </span></h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="262" src="https://www.kazuban.com/blog/wp-content/uploads/2019/11/図1-1024x262.png" alt="" class="wp-image-1338" srcset="https://www.kazuban.com/blog/wp-content/uploads/2019/11/図1-1024x262.png 1024w, https://www.kazuban.com/blog/wp-content/uploads/2019/11/図1-300x77.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2019/11/図1-768x197.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2019/11/図1.png 1385w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">通常コントローラはＮＣプログラムを１行づつ実行していきます。<br>その一行を<strong>「ブロック」</strong>と呼びます。<br><strong>「ブロック」</strong>は<strong>「ワード」</strong>と呼ばれる、コントローラが理解できる単語が集まったものです。<br>さらに<strong>「ワード」</strong>は、「半角英大文字」と「数字または数値」が合体したもので、「 半角英大文字 」は<strong>「アドレス」</strong>と呼ばれます。<br>「<strong>アドレス</strong>」によって「数字／数値」の部分は、どちらになるか決まります<br>移動の動作方法を指令する<strong>「ワード」</strong>は「G」アドレスが主です。<br>「補助機能」である「M」アドレスなども含めて、基本動作指令を総称してGコード（GCode）と呼ぶ場合もあります。<br> <span class="markerYellow">「数字」と「数値」の違いはなんでしょうか？</span></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p> 「数値」は量を表す値ですが「数字」は「０～９」までの単なる文字です。<br>ＮＣ的には、動作指令の一つで各<strong>「ワード」</strong>を識別するための文字といえます。<br>「<strong>ワード</strong>」の中でも、「<strong>Gアドレス</strong>」のワードは「<strong>Gコード／準備機能</strong>」と呼ばれ、この指令により次の動作方法を決める一番重要な<strong>「ワード」</strong>です。<br>「数値」の場合は、次に変化する量を指令します。<br>「数値」は、移動する先の座標（X,Y,Zなど）であったり、送り速度（F）だったり、主軸の回転数（S）だったりします。</p></blockquote>



<pre class="wp-block-preformatted">N0001     G01           　　  X10.123   Y23.567    F2000    &lt;----- ブロック
------------------------------------------------------------
整理番号  直線で移動     Ｘ軸座標    Ｙ軸座標    送り速度
</pre>



<p class="wp-block-paragraph">この例では、「N」「G」「X」「Y」「F」が「アドレス」です。<br>「G01」や「X10.123」が「ワード」。<br>全体の一行が「ブロック」となります。<br>また、「N0001」や「G01」のような、「アドレス」＋<strong>「数字」</strong>の場合<br>「数字」は値ではなく、動作の指令を識別するための<strong>文字</strong>です<br>また「01」の「0」は主なコントローラからは無意味です。<br>「G01」と「G1」は同等です。（3ＤプリンタのGCodeでは文字数が一定でないと、エラーになる場合がありました）<br>「X」「Y」「F」などは、 「アドレス」＋<strong>「数値」</strong>となります。<br>「数値」は<strong>数</strong>としての意味を持ちます。「X」「Y」は各軸の位置情報、「F」はスピード値を指令しています。 </p>



<p class="wp-block-paragraph">ファナックの資料ですが、一部資料を添付します</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="927" height="475" src="https://www.kazuban.com/blog/wp-content/uploads/2019/12/アドレス.png" alt="" class="wp-image-1399" srcset="https://www.kazuban.com/blog/wp-content/uploads/2019/12/アドレス.png 927w, https://www.kazuban.com/blog/wp-content/uploads/2019/12/アドレス-300x154.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2019/12/アドレス-768x394.png 768w" sizes="(max-width: 927px) 100vw, 927px" /></figure>



<p class="wp-block-paragraph"> アドレスはこの他にもいろいろありますが、必要あれば今後追加説明しますがファナック系であればネット上にもたくさん情報はあるので検索してみてください。<br>基本的にコントローラは、この一行「ブロック」単位で、機械に指令を送り機械を動作させます。</p>



<h3 class="wp-block-heading"><span id="toc3">コメント文</span></h3>



<p class="wp-block-paragraph">コントローラ的には無意味ですが、オペレータへの情報用として、コメント文が用意されています。<br>コメント文は、コントローラにより違いがあります。<br>・ファナック系<br>　　「(」から「)」までをコメントとする。<br>　　ただし、FanucとOSPは若干違いがあり、OSPは行を跨がない<br>　　したがって、OSPでは、「(」から行末までをコメントとするが、<br>　　ファナックでは、「)」で閉じるまでコメントとして扱われる。<br>　　また、ソディックの場合には漢字が使用できて便利。<br>・ハイデンハイン<br>　「;」文字から行末までをコメントして扱う。<br>　「*」文字もコメントと扱うが、見出しの意味も持つ<br>・レダース<br>　「//」の２文字から行末までコメントとして扱う<br>　「/*」から「*/」で挟まれた文はすべてコメントとなる<br>コメント文は必須ではありませんが、うまく使用すると、プログラムが見やすくなります。</p>



<h3 class="wp-block-heading"><span id="toc4">「%」ファナックの特殊文字</span></h3>



<p class="wp-block-paragraph">ファナックの場合、ＮＣ指令の始まりと終わりを示す文字として「%」が必要になります。<br>海外製やＯＳＰの場合には、必要ありません。<br>紙テープ時代には実際の指令コードの前に、人間が読める文字をパンチする花文字と呼ばれる部分がありましたが花文字と分離するための処理だったのかもしれませんね。</p>



<h3 class="wp-block-heading"><span id="toc5">Ｎアドレス＋数字　／　シーケンス番号</span></h3>



<p class="wp-block-paragraph">「N0102」のような「ワード」となります。<br>動作的には意味を持ちませんが、プログラムを途中から始めたい場合のジャンプキーに使用したり、カスタムマクロという複雑なプログラムでジャンプ先に指定したりします。<br>番号の桁数や順番、混同も問題ありませんが、ジャンプする場合、上の行から検索されます。<br>全ての「ブロック」に連番で使用する場合もありますが、あまり意味がないので必要な箇所のみに、付加する場合が多いです。</p>



<h3 class="wp-block-heading"><span id="toc6"> Ｇアドレス＋数字　／　Ｇコード </span></h3>



<p class="wp-block-paragraph">マニュアルには「準備機能」とありますが、実際の工具移動位置を指令する前か同じ行で指令し、主に動作方法を指令します。<br>移動位置指令と共に一番基本的なコードです。<br>基本的に位置指令は、「この座標値へ行け」と指令しますが、その位置へ行くのにどのように行くのか？例えば、直線でとか右回り円弧で・・とかのイメージで指令します。<br>上にも少し触れましたが、移動指令のコードは他の制御機でも互換性を持たせている場合が多いので、基本的なコードを理解しておくと、ファナック以外の機械も動作させる事は可能です。<br>Ｇコードについては、また別のページでまとめたいと思います</p>



<h3 class="wp-block-heading"><span id="toc7">軸＋数値　／　Ｘ，Ｙ，Ｚ、Ａ，Ｂ，Ｃ，・・</span></h3>



<p class="wp-block-paragraph">「アドレス」で移動させる軸を指令し、その後に座標値を繋げます<br>軸は機械によりさまざまですが、３軸の機械の場合にはＸ，Ｙ、Ｚ軸が一般的です。５軸機械の場合、さらにＡ，Ｂ，Ｃのうちどれか２軸が回転軸として追加されます。<br>さらにワイヤカット放電加工機の場合、Ｕ，Ｖ軸でワイヤーの傾きが追加される場合もあります。<br>治具研削盤の場合、Ｕ軸を切込み軸として使う場合もあります。</p>



<h3 class="wp-block-heading"><span id="toc8">  Mアドレス＋数字　／　Mコード  </span></h3>



<p class="wp-block-paragraph">「補助機能」と呼ばれています。<br>工具を移動させる指令の前後で、機械へ補助的な動作をさせる指令です。<br>たとえは、「回転しろ」とか「冷却水を出せ」とか「コンベア起動」などを指令します。<br>このＭコードも加工に必須の指令はファナック以外の制御機でも互換性が高いコードが多いです。</p>



<h3 class="wp-block-heading"><span id="toc9">  Fアドレス＋数値　／　送り速度</span></h3>



<p class="wp-block-paragraph">機械の構成によって、テーブルが動く場合と工具（主軸）が動く場合がありますが、ＮＣプログラム的には、工具が動いた方向で考え、その時の送り速度を指示します。(Tool Motion)<br> 単位はmm/minで指定し、１分間に工具が動く距離になります。<br>「F2000」 の指令では、「一分間で2000mmで動け」の指令になります<br>ただし、実際のスピードが指令値と同じ速さで動くとは限りません。<br>機械は、動作の始まりと終わりで加減速の影響で指令値よりも遅くなります。<br>機械によって、同じＮＣデータで指令しても、加工スピードは変化します。<br>また、「F3」のように数値が一桁の場合には、  制御機によっては、一桁の数字がパラメータとして理解され、別に設定された数値で動作する場合もあります。<br>Ｆ一桁指令と呼ばれています。</p>



<h3 class="wp-block-heading"><span id="toc10">   Sアドレス＋数値　／　主軸回転数 </span></h3>



<p class="wp-block-paragraph">主軸の回転数です。<br>一分間の回転数を指令します。<br>通常、この指令は回転数を設定するのみで、「Mコード」で回転を制御します。<br>具体的には、M03で正回転（時計回り）、M04で反回転（反時計回り）で回転を実施し、M05で回転を停止します。</p>



<h3 class="wp-block-heading"><span id="toc11"> Ｔアドレス＋数値　／ 　工具指定</span></h3>



<p class="wp-block-paragraph">マシニングセンターの場合、自動で工具交換ができます。<br>「どの工具を使用するか」を「Ｔコード」で指定します。<br>ただし、この指令はファナック系と他の制御機（ハイデンハインやレダース）では若干違います。<br>ファナックでは、工具番号の指定のみですが、工具交換まで行う制御機もあります。<br>ファナック系の場合は、「T03」の指令の場合、「工具番号３の工具を準備しろ！」の指令で、実際の工具交換は行われません。<br>実際に工具交換させるには、「M06」の指令を実行させます。<br>ハイデンハインの場合は、「TOOL CALL」というコマンドを使用します。<br>「TOOL CALL 3」のみで「工具番号３」の工具を主軸に持ってきます。<br>レダースの場合には、「T3」の指令だけで「工具番号３」と交換します<br>さらに、「TT=（工具の名前）」の指令では、事前に工具に名前をつけておくと、工具番号ではなく、工具名で交換させる事もできます<br>工具交換した後の状態もファナック系とは違うのですが、詳細は後日紹介しようと思います。</p>



<h2 class="wp-block-heading"><span id="toc12">まとめ</span></h2>



<p class="wp-block-paragraph">ＮＣプログラムは、コントローラの種類によって全く違う構文となりますが工具径路を指令するＧコードは、他の制御機でもある程度互換性を持たせています。<br>「ワード」が集まった「ブロック」を一行づつ機械へ送り、動作（加工）させるための命令の集まりです。<br>次回はこの「工具経路」を指令するコード部分（Gコード）の説明しようと思います</p>



<h4 class="wp-block-heading"><span id="toc13">ＮＣプログラムの記事</span></h4>



<div class="pager">
  <!-- <a class="prev page-numbers" href="https://www.kazuban.com/blog/nc-gcode-01/">PREV</a> -->

  <!-- <a class="page-numbers" href="https://www.kazuban.com/blog/nc-gcode-01/">1</a> -->
  <span aria-current="page" class="page-numbers current">1</span>
  <a class="page-numbers" href="https://www.kazuban.com/blog/nc-gcode-02/">2</a>
  <a class="page-numbers" href="https://www.kazuban.com/blog/dia-compensation/">3</a>
  <a class="page-numbers" href="https://www.kazuban.com/blog/lenrth-compensation/">4</a>
  <a class="page-numbers" href="https://www.kazuban.com/blog/main-sub-pro/">5</a>
  <a class="page-numbers" href="https://www.kazuban.com/blog/sub-to-package/">6</a>
  <a class="page-numbers" href="https://www.kazuban.com/blog/nc-program-g91/">7</a>

  <a class="next page-numbers" href="https://www.kazuban.com/blog/nc-gcode-02/">NEXT</a>
</div>



<hr class="wp-block-separator"/>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
