<?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>カスタムマクロ | じじぃの引出し</title>
	<atom:link href="https://www.kazuban.com/blog/category/nc/custom-macro/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.kazuban.com/blog</link>
	<description>なにかしら、皆さんの参考になれば幸いです！</description>
	<lastBuildDate>Mon, 04 Aug 2025 23:57:13 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.1</generator>

<image>
	<url>https://www.kazuban.com/blog/wp-content/uploads/2020/05/cropped-ICON-1-32x32.png</url>
	<title>カスタムマクロ | じじぃの引出し</title>
	<link>https://www.kazuban.com/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>ファナック・カスタムマクロの展開をAiにやってもらう！</title>
		<link>https://www.kazuban.com/blog/custom-macro-with-ai/</link>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Sat, 02 Aug 2025 02:50:55 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[NC]]></category>
		<category><![CDATA[カスタムマクロ]]></category>
		<category><![CDATA[CAM]]></category>
		<category><![CDATA[ファナック]]></category>
		<category><![CDATA[生成Ai]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=11441</guid>

					<description><![CDATA[最近は、CAMの充実もあって、カスタムマクロの利用もかなり減少しいていると思います。ただ、穴などの基本的な加工の場合、座標値入力だけで加工できるのでうまく使えば、かなり重宝します。マシニングセンターを、操作フライス盤的な [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">最近は、CAMの充実もあって、カスタムマクロの利用もかなり減少しいていると思います。<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">プログラミングの難易度</a></li><li><a href="#toc3" tabindex="0">デバッグの複雑さ</a></li></ol></li><li><a href="#toc4" tabindex="0">そうだ、Aiに展開してもらおう！</a><ol><li><a href="#toc5" tabindex="0">課題データ</a></li><li><a href="#toc6" tabindex="0">Aiの回答</a><ol><li><a href="#toc7" tabindex="0">プログラム全体の概要</a></li><li><a href="#toc8" tabindex="0">O1000: 主プログラム</a></li><li><a href="#toc9" tabindex="0">O6000: 面取りマクロプログラム</a></li><li><a href="#toc10" tabindex="0">O6100: 穴位置プログラム</a></li><li><a href="#toc11" tabindex="0">まとめ</a></li></ol></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">Google で「カスタムマクロ欠点」で検索してみると、下記のAi概要が最上部に表示されました<br>話は変わりますが、最近では通常検索でもAi回答が出てくるようになりましたね。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>AI による概要</strong></p>



<p class="wp-block-paragraph">カスタムマクロは、NCプログラムの効率化や自動化に役立つ一方で、いくつかの欠点も存在します。主な欠点としては、<mark>プログラミングの難易度、デバッグの複雑さ、互換性の問題、そして過度な依存によるリスク</mark>などが挙げられます。</p>



<p class="has-light-grey-background-color has-background wp-block-paragraph"><strong>カスタムマクロの欠点</strong></p>



<ul class="wp-block-list">
<li><strong>プログラミングの難易度:</strong>カスタムマクロは、通常のNCプログラムよりも複雑なロジックを記述する必要があるため、習得に時間がかかり、プログラミングの難易度が高いです。特に、条件分岐やループ処理を多用する場合、複雑さが増し、エラーが発生しやすくなります。</li>



<li><strong>デバッグの複雑さ:</strong>カスタムマクロのデバッグは、通常のNCプログラムよりも難易度が高いです。変数の値の変化や処理の流れを追跡するのが難しく、エラーの原因特定に時間がかかることがあります。また、マクロプログラムが複雑になるほど、デバッグ作業はさらに困難になります。</li>



<li><strong>互換性の問題:</strong>カスタムマクロは、使用するNC工作機械や制御装置の種類によって、互換性の問題が発生する可能性があります。同じマクロプログラムでも、機械が異なると正しく動作しない場合や、エラーが発生する場合があります。そのため、マクロプログラムを作成する際には、互換性を考慮する必要があります。</li>



<li><strong>過度な依存によるリスク:</strong>カスタムマクロに過度に依存すると、マクロプログラムの変更や修正が必要になった場合に、他の作業に影響が出たり、生産性が低下する可能性があります。また、マクロプログラムの作成者が不在になった場合、保守や管理が困難になるというリスクもあります。</li>
</ul>



<p class="wp-block-paragraph">その他の考慮事項</p>



<ul class="wp-block-list">
<li><strong>マクロプログラムの可読性:</strong>カスタムマクロは、可読性の高い書き方を心がける必要があります。コメントを適切に記述し、変数名や処理の流れを分かりやすくすることで、他の人がマクロプログラムを理解しやすくなります。</li>



<li><strong>マクロプログラムのバージョン管理:</strong>カスタムマクロは、バージョン管理を行うことで、変更履歴を把握し、必要に応じて以前のバージョンに戻すことができます。</li>



<li><strong>マクロプログラムのテスト:</strong>カスタムマクロは、実際に機械を動かす前に、シミュレーション環境などで十分にテストを行う必要があります。これにより、エラーの発生を未然に防ぎ、安全に運用することができます。</li>
</ul>



<p class="wp-block-paragraph">これらの欠点や考慮事項を踏まえ、カスタムマクロの導入を検討する必要があります。</p>
</blockquote>



<p class="wp-block-paragraph">なるほど・・<a href="https://www.kazuban.com/blog/category/nc/custom-macro/">ここのサイトでもいくつか取り上げていますが</a>、まさに同意見です。<br></p>



<h3 class="wp-block-heading"><span id="toc2"><strong>プログラミングの難易度</strong></span></h3>



<p class="wp-block-paragraph">マクロは数多く作成してきましたが<br>機械の制御器に処理させる言語になるので、どうしても、一般的なプログラミング言語と比較すると、中途半端で可読性は悪くなってしまします。<br>ちなみに、レダース(Roeders）機は、独自開発されたプログラミング言語ライクな言語です。<br>加工動作のGコードのサブプロ部分と、その動作部分を管理するメインプロ部分を分離する事を基本で開発されているように感じています。<br>特にWindowsソフトウェアとして開発された言語なので、自動化や多数個など、複雑なメインプロを開発する場合でもかなり楽です。</p>



<h3 class="wp-block-heading"><span id="toc3"><strong>デバッグの複雑さ</strong></span></h3>



<p class="wp-block-paragraph">このサイトでも、何度か書いていますが、一番は変数の制限が可読性を悪くしているように思います。<br>筆者は通常のGコードだけであれば、<a href="https://www.trycut.com/">TRYCUT</a> と言うシミュレーションソフトを使っていますが、TRYCUTにはマクロ展開機能が付いていません。<br>シミュレートできないので、マクロのデバッグはエディタやプリントアウトして目視で追っかけ確認ますがかなかな面倒で、リスクもあります。<br>社内設備機械で、一台だけマクロも含めたシミュレート機能がある制御器があるので、確認のためだけに、その機械を起動させる場合もあります。<br>大人しく、マクロ機能付きのシミュレータを購入したら・・・の意見もあると思いますが、マクロ利用頻度から検討すると、どうしても費用対効果の面で無理があります。</p>



<h2 class="wp-block-heading"><span id="toc4">そうだ、Aiに展開してもらおう！</span></h2>



<p class="wp-block-paragraph">前回、Fusion python API を、Aiに教わったらすごかった・・を記事にしました</p>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">

<a href="https://www.kazuban.com/blog/fusion-python-api/" title="Fusion360  Python API 再挑戦！AIの力を借りて、sketchなど基本ライブラリを作ってみた。" 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="160" height="90" src="https://www.kazuban.com/blog/wp-content/uploads/2025/07/fusion-python-api-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.kazuban.com/blog/wp-content/uploads/2025/07/fusion-python-api-160x90.png 160w, https://www.kazuban.com/blog/wp-content/uploads/2025/07/fusion-python-api-120x68.png 120w, https://www.kazuban.com/blog/wp-content/uploads/2025/07/fusion-python-api-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Fusion360  Python API 再挑戦！AIの力を借りて、sketchなど基本ライブラリを作ってみた。</div><div class="blogcard-snippet internal-blogcard-snippet">Aiと言う強い味方を得て、Fusion API に再挑戦しています。pythonの学習もかねて、skrtch関連の関数をライブラリ化しています。筆者の環境では、正常に動作しています。コピペで利用可。Aiに教えてもらわないと、作成できなかった実例をレポートしています。</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">2025.07.09</div></div></div></div></a>
</div></figure>



<p class="wp-block-paragraph">Fusion API は、一般的なpython言語構文やライブラリだけでなく、独自のオブジェクトを絡み合わせて開発していくので、そのパッケージの理解だけでも大変です。<br>それを、Aiに聞いたら、サンプルコードを出してくれたり、自作したコードを添削してくれたりと、驚きでした。<br>そこで上の記事を書いてたら、ピ～ンときました。<br>「そうだ、Fusion APIのパッケージを瞬時に解読できるなら、カスタムマクロなら簡単に解読してくれるかも！」</p>



<h3 class="wp-block-heading"><span id="toc5">課題データ</span></h3>



<p class="wp-block-paragraph">課題NCデータは、以前記事にした、下記ページのデータをそのまま使ってみようと思います</p>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">

<a href="https://www.kazuban.com/blog/chamfering-with-g66/" title="カスタムマクロ、G66モーダル呼び出しで固定サイクルを自作してみる。" 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="228" height="180" src="https://www.kazuban.com/blog/wp-content/uploads/2022/05/Chamfer01.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.kazuban.com/blog/wp-content/uploads/2022/05/Chamfer01.png 878w, https://www.kazuban.com/blog/wp-content/uploads/2022/05/Chamfer01-300x237.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2022/05/Chamfer01-768x607.png 768w" sizes="(max-width: 228px) 100vw, 228px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">カスタムマクロ、G66モーダル呼び出しで固定サイクルを自作してみる。</div><div class="blogcard-snippet internal-blogcard-snippet">前回、カスタムマクロプログラムの例として、ハイデンハインサイクルをマクロ化する例を紹介しました。ハイデンハインサイクルに比べると、ファナック固定サイクルの機能は非常に貧弱ですが、カスタムマクロを自作する事で、無限に拡張する事が可能です。今回は、カスタムマクロのモーダル呼び出し「G66」を利用して、穴...</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.30</div></div></div></div></a>
</div></figure>



<p class="wp-block-paragraph">穴の面取りを輪郭加工で行うマクロです。<br>メインプロ「O1000」に加工条件や面取り条件を変数で定義して、G66モーダル呼び出しで「O6000」の面取り加工マクロを呼び出し、指定位置「O6100」で面取りを行うプログラムです<br>若干変数での計算式もあります。</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-ada81581cdb38d9e779798ad0caed857"><code>こちらのファナックマクロを展開してください
%
O1000
( Chamfering Program Ver1.0 By kazuban )&nbsp;
G90G00G17G40G80G49&nbsp;
(++++++++++++++++++++)&nbsp;
#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)&nbsp;
#10=5.0 (R Point)
(++++++++++++++++++++)&nbsp;
#11=12.0 (Hole Diameter)
#12=1.0 (Chamfer)
#13=0.5 (Offset)
(++++++++++++++++++++)&nbsp;
#30=6000 (Macro program No)
#31=6100 (Position program No)
(++++++++++++++++++++)&nbsp;
N0001
G#1
T#2
M06
G90G00X0Y0&nbsp;
G43Z&#91;#8+#9]H#3
( Chamfer Process )
S#5M03&nbsp;
M#7
(----------------------------)
(B:#2=#8 : Surface Coordinat)&nbsp;
(C:#3=#9 : Initial Point)&nbsp;
(I:#4=#10 : R Point)&nbsp;
(J:#5=#12 : Chamfer)&nbsp;
(K:#6=#13 : Offset)
(D:#7=#4 : Tool Dia)
(E:#8=#11 : Hole Dia)
(F:#9=#6 : Feed)
(++++++++++++++++++++)&nbsp;
G66 P&#91;#30] B&#91;#8] C&#91;#9] I&#91;#10] J&#91;#12] K&#91;#13] D&#91;#4] E&#91;#11] F&#91;#6]
M98P&#91;#31]
G67
G90G00Z&#91;#8+#9]
M09
M05
G91G28Z0&nbsp;
G91G49Z0&nbsp;
G90M05&nbsp;
( End of Process )
M30
%
%
O6000
( Chamfering Macro Ver1.0 By kazuban )&nbsp;
(+++++++++++++++++++)
#1=&#91;#8/2-&#91;#6+#7/2]] (circle radius)
(+++++++++++++++++++)
(B:#2 : Surface Coordinat)&nbsp;
(C:#3 : Initial Point)&nbsp;
(I:#4 : R Point)&nbsp;
(J:#5 : Chamfer)&nbsp;
(K:#6 : Offset)
(D:#7 : Tool Dia)
(E:#8 : Hole Dia)
(F:#9 : Feed)
(+++++++++++++++++++)
G90G00G17
Z&#91;#2+#3]&nbsp;
Z&#91;#2+#4]&nbsp;
G01Z&#91;#2-&#91;#6+#5]]F&#91;#9]&nbsp;
G91X&#91;#1]
G03X-&#91;#1*2]I-&#91;#1]J0.&nbsp;
X&#91;#1*2]I&#91;#1]J0.
G01X-&#91;#1]&nbsp;
G90G00Z&#91;#2+#3]&nbsp;
M99
%
%
O6100
( Hole Position )
X-35.Y55.
X-50.Y55.
X10.Y10.&nbsp;
M99
%</code></pre>



<p class="wp-block-paragraph">このデータをそのまま、「Gemini 2.5 Flash」に突っ込んで、展開をお願いしてみました。</p>



<h3 class="wp-block-heading"><span id="toc6">Aiの回答</span></h3>



<p class="wp-block-paragraph">G66仕様で、G66への変数渡しが「#変数」そのままでないので、作者が見直す時も結構面倒ですが、Aiは瞬時に分析してくれました。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">提供されたFANUCマクロプログラムを解析し、その内容を以下に解説します。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading"><span id="toc7"><strong>プログラム全体の概要</strong></span></h4>



<p class="wp-block-paragraph">このマクロは、複数の穴の面取り加工を自動化するために設計されています。主プログラム (<code>O1000</code>) で加工条件を設定し、マクロプログラム (<code>O6000</code>) で実際の面取り動作を実行、そしてもう一つのプログラム (<code>O6100</code>) で穴の位置情報を呼び出す、という構成になっています。</p>



<h4 class="wp-block-heading"><span id="toc8"><strong>O1000: 主プログラム</strong></span></h4>



<p class="wp-block-paragraph">このプログラムは、加工に必要な初期設定と、マクロ呼び出しを行います。</p>



<ul class="wp-block-list">
<li><strong>初期設定:</strong>
<ul class="wp-block-list">
<li><code>#1=54 (WORK ORIGIN)</code>: ワーク原点の位置を<code>#1</code>に設定。</li>



<li><code>#2=10 (Tool Number)</code>: 工具番号を<code>#2</code>に設定。</li>



<li><code>#4=0.5(Tool Diameter)</code>: 工具径を<code>#4</code>に設定。</li>



<li><code>#5=2300 (Spindle Speed)</code>: 主軸回転速度を<code>#5</code>に設定。</li>



<li><code>#6=200 (Feed)</code>: 送り速度を<code>#6</code>に設定。</li>



<li><code>#11=12.0 (Hole Diameter)</code>: 穴の直径を<code>#11</code>に設定。</li>



<li><code>#12=1.0 (Chamfer)</code>: 面取り量を<code>#12</code>に設定。</li>



<li><code>#13=0.5 (Offset)</code>: 工具のオフセット量を<code>#13</code>に設定。</li>
</ul>
</li>



<li><strong>マクロ呼び出し:</strong>
<ul class="wp-block-list">
<li><code>G66 P[#30] ...</code>: ここで、面取りマクロプログラム<code>O6000</code>（<code>#30</code>）を呼び出しています。</li>



<li><code>B[#8] C[#9]...</code>: マクロに渡す引数を設定しています。
<ul class="wp-block-list">
<li><code>B[#8]</code>: 面取り加工の開始基準となる<strong>ワーク表面座標</strong>。</li>



<li><code>C[#9]</code>: 加工前の待機位置である<strong>初期点</strong>。</li>



<li><code>I[#10]</code>: 加工開始前の<strong>退避点（R点）</strong>。</li>



<li><code>J[#12]</code>: <strong>面取り量</strong>。</li>



<li><code>K[#13]</code>: <strong>オフセット量</strong>。</li>



<li><code>D[#4]</code>: <strong>工具径</strong>。</li>



<li><code>E[#11]</code>: <strong>穴径</strong>。</li>



<li><code>F[#6]</code>: <strong>送り速度</strong>。</li>
</ul>
</li>



<li><code>M98 P[#31]</code>: 穴の位置情報を記述したプログラム<code>O6100</code>（<code>#31</code>）を呼び出します。これにより、<code>O6100</code>に記述された各座標で、<code>G66</code>で指定されたマクロが繰り返して実行されます。</li>
</ul>
</li>
</ul>



<h4 class="wp-block-heading"><span id="toc9"><strong>O6000: 面取りマクロプログラム</strong></span></h4>



<p class="wp-block-paragraph">このプログラムは、<code>O1000</code>から渡された情報をもとに、実際の面取り加工を行います。</p>



<ul class="wp-block-list">
<li><strong>面取り加工の半径計算:</strong>
<ul class="wp-block-list">
<li><code>#1=[#8/2-[#6+#7/2]]</code>: この式は、面取り加工を行う円弧の半径を計算しています。
<ul class="wp-block-list">
<li><code>#8/2</code>: 穴の半径。</li>



<li><code>#6</code>: 面取り量。</li>



<li><code>#7/2</code>: 工具の半径。</li>



<li><strong>結果:</strong> <strong>面取り加工する円弧の半径 = (穴の半径) &#8211; (面取り量) &#8211; (工具の半径)</strong></li>
</ul>
</li>
</ul>
</li>



<li><strong>加工シーケンス:</strong>
<ol start="1" class="wp-block-list">
<li><code>G90G00G17</code>: 絶対指令、早送り、XY平面選択。</li>



<li><code>Z[#2+#3]</code>、<code>Z[#2+#4]</code>: Z軸を初期点、R点へと移動。</li>



<li><code>G01Z[#2-[#6+#5]]F[#9]</code>: Z軸を<strong>面取り深さ</strong>まで切り込みながら移動します。</li>



<li><code><strong>G91</strong>X[#1]</code>: <span class="marker-under-red">ワーク座標を基準</span>に、計算された半径分だけX軸を移動。円弧加工の開始位置に移動します。</li>



<li><code>G03X-[#1*2]I-[#1]J0.</code>: 半径<code>#1</code>の円弧で、左回りに<strong>180度円弧切削</strong>。</li>



<li><code>X[#1*2]I[#1]J0.</code>: さらに、半径<code>#1</code>の円弧で、左回りに<strong>180度円弧切削</strong>。これにより、1周分の面取り加工が完了します。</li>



<li><code>G01X-[#1]</code>: 円弧加工の開始位置から中心に戻ります。</li>



<li><code>G90G00Z[#2+#3]</code>: Z軸を初期点に戻します。</li>



<li><code>M99</code>: マクロプログラムの終了。主プログラム（<code>O1000</code>）に戻ります。</li>
</ol>
</li>
</ul>



<h4 class="wp-block-heading"><span id="toc10"><strong>O6100: 穴位置プログラム</strong></span></h4>



<p class="wp-block-paragraph">このプログラムは、加工する穴のXY座標をリストアップしています。</p>



<ul class="wp-block-list">
<li><code>X-35.Y55.</code>: 1つ目の穴の座標。</li>



<li><code>X-50.Y55.</code>: 2つ目の穴の座標。</li>



<li><code>X10.Y10.</code>: 3つ目の穴の座標。</li>
</ul>



<p class="wp-block-paragraph">これらの座標は、<code>O1000</code>の<code>M98 P[#31]</code>によって順番に読み込まれ、それぞれの位置で<code>O6000</code>の面取り加工が実行されます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading"><span id="toc11"><strong>まとめ</strong></span></h4>



<p class="wp-block-paragraph">このプログラムは、以下のような処理フローで動作します。</p>



<ol start="1" class="wp-block-list">
<li>主プログラム<code>O1000</code>がスタートします。</li>



<li>工具交換、初期位置決め、主軸回転、クーラントONなど、準備が完了します。</li>



<li><code>O6100</code>に記述された最初の座標（X-35.Y55.）に移動します。</li>



<li><code>G66</code>によって<code>O6000</code>の面取りマクロが呼び出されます。</li>



<li>マクロ内で計算されたパスで、面取り加工が行われます。</li>



<li>面取り加工が完了すると、<code>O1000</code>に戻ります。</li>



<li><code>O6100</code>の次の座標（X-50.Y55.）に移動します。</li>



<li>再び<code>O6000</code>が呼び出され、面取り加工が行われます。</li>



<li>この繰り返し処理が<code>O6100</code>の最後まで行われます。</li>



<li>全ての加工が終了すると、クーラントOFF、主軸停止、安全位置への退避が行われ、プログラムが終了します。</li>
</ol>



<p class="wp-block-paragraph">この構成は、複数の同じ形状の加工を効率的に行うための、NCプログラミングの典型的な手法です。プログラムを分割することで、位置情報や加工条件の変更が容易になります。</p>
</blockquote>



<p class="wp-block-paragraph">丁寧な解説ですが、<strong>加工シーケンス:</strong>４．の<span class="marker-under-red">「ワーク座標を基準</span>」と言うのがちょっと間違っていますね・・<br>無料版だからでしょうか？<br>でも、きちんとGコードに展開してくれれば、問題ないですから<br>再度、一般的なGコードへの展開をお願いすると・・・</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">%<br>O1000_EXPANDED<br>( Chamfering Program Expanded Version )</p>



<p class="wp-block-paragraph">G90 G00 G17 G40 G80 G49&nbsp;</p>



<p class="wp-block-paragraph">( Tool and Spindle Setup )<br>T10 M06&nbsp;<br>G90 G00 X0 Y0&nbsp;<br>G43 Z[0.0+50.0] H10<br>S2300 M03&nbsp;<br>M08</p>



<p class="wp-block-paragraph">( &#8212; Hole 1 at X-35. Y55. &#8212; )<br>G90 G00 X-35. Y55.<br>G00 Z[0.0+50.0]<br>G00 Z[0.0+5.0]<br>G01 Z[0.0-[1.0+0.5]] F200<br>G91 X[12.0/2-[1.0+0.5/2]]<br>G03 X-[[12.0/2-[1.0+0.5/2]]2] I-[12.0/2-[1.0+0.5/2]] J0. X[[12.0/2-[1.0+0.5/2]]2] I[12.0/2-[1.0+0.5/2]] J0.<br>G01 X-[12.0/2-[1.0+0.5/2]]<br>G90 G00 Z[0.0+50.0]</p>



<p class="wp-block-paragraph">( &#8212; Hole 2 at X-50. Y55. &#8212; )<br>・<br>・<br>・以下省略</p>
</blockquote>



<p class="wp-block-paragraph">G66呼び出しの部分も、きちんと、展開してくれました。<br>さらに、[]内で、変数を数値に置き換えた計算式で表現してくれています。<br>おそらく、[]を認識できるコントローラであれば、このまま動作すると思いますが、トライカットは動作してくれないので、再度、[]内の計算式部分を、実数値に変換をお願いしました。</p>



<h3 class="wp-block-heading"><span id="toc12">完成</span></h3>



<p class="wp-block-paragraph">以下が完成したデータです</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-66754072bbded3ae612360f6496ca273"><code>%
O1000
( Chamfering Program Expanded Numeric Version )

G90 G00 G17 G40 G80 G49&nbsp;

( Tool and Spindle Setup )
T10 M06&nbsp;
G90 G00 X0 Y0&nbsp;
G43 Z50.0 H10
S2300 M03&nbsp;
M08

( Chamfering Path Calculation )
( Hole Diameter: 12.0 )
( Chamfer: 1.0 )
( Tool Diameter: 0.5 )
( Offset: 0.5 )
( Radius for cutting: 12.0/2 - 1.0 - 0.5/2 = 6.0 - 1.0 - 0.25 = 4.75 )
( Cutting Depth: 1.0 + 0.5 = 1.5 )

( --- Hole 1 at X-35. Y55. --- )
G90 G00 X-35. Y55.
G00 Z50.0
G00 Z5.0
G01 Z-1.5 F200
G91 X4.75
G03 X-9.5 I-4.75 J0.
X9.5 I4.75 J0.
G01 X-4.75
G90 G00 Z50.0

( --- Hole 2 at X-50. Y55. --- )
G90 G00 X-50. Y55.
G00 Z50.0
G00 Z5.0
G01 Z-1.5 F200
G91 X4.75
G03 X-9.5 I-4.75 J0.
X9.5 I4.75 J0.
G01 X-4.75
G90 G00 Z50.0

( --- Hole 3 at X10. Y10. --- )
G90 G00 X10. Y10.
G00 Z50.0
G00 Z5.0
G01 Z-1.5 F200
G91 X4.75
G03 X-9.5 I-4.75 J0.
X9.5 I4.75 J0.
G01 X-4.75
G90 G00 Z50.0

( End of Program )
M09
M05
G91 G28 Z0
G91 G49 Z0
G90 M05
M30
%
</code></pre>



<h3 class="wp-block-heading"><span id="toc13">シミュレーション</span></h3>



<p class="wp-block-paragraph">さっそく、シミュレーションしてみましょう！</p>



<figure class="wp-block-video"><video height="852" style="aspect-ratio: 1032 / 852;" width="1032" controls src="https://www.kazuban.com/blog/wp-content/uploads/2025/08/macro-trycut.mp4"></video></figure>



<p class="wp-block-paragraph">正常に動作しました。</p>



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



<p class="wp-block-paragraph">やっぱり、Aiはすごいです。<br>座標値を変数で置き換えている程度のマクロであれば、エクセルやスクリプト言語などで、比較的簡単に変換できるかもしれませんが、計算式が入ってくると格段に難易度が上がります。<br>さらに、G66などのマクロ呼出しになると、引数への変数渡しに癖があるので、PC上での目視確認においても結構面倒です。<br>以前、マクロの変換ソフトの作成も考えた事もありますが、難易度高くで止めました。<br>今回のように、Aiに展開してもらえれば、手持ちのシミュレータで動作確認できるので、かなり気軽にマクロに取り組めると思います<br>それに、今回使用したAiは、「Gemini 2.5flash」で基本無料で利用できます。<br>ちょっと、間違った回答もありましたが、Fusion API の質問も含めて、制限が出ることはなかったです。「chatGPT」無料版では、制限に引っかかりました。</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		<enclosure url="https://www.kazuban.com/blog/wp-content/uploads/2025/08/macro-trycut.mp4" length="2284942" type="video/mp4" />

			</item>
		<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-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">変数</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 loading="lazy" 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 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">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-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">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 loading="lazy" 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 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.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-from-macro/</link>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Thu, 05 May 2022 00:57:35 +0000</pubDate>
				<category><![CDATA[NC]]></category>
		<category><![CDATA[カスタムマクロ]]></category>
		<category><![CDATA[CAM]]></category>
		<category><![CDATA[NCプログラム]]></category>
		<category><![CDATA[ハイデンハイン]]></category>
		<category><![CDATA[ファナック]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=6570</guid>

					<description><![CDATA[最近、機械の立ち上げ作業でバタバタしていて、すっかり更新がご無沙汰しています。忘れられそうなので、５月の連休の空き時間で更新します。ネタとしては、以前から考えていたもので、ファナックカスタムマクロの使用例として、ハイデン [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">最近、機械の立ち上げ作業でバタバタしていて、すっかり更新がご無沙汰しています。<br>忘れられそうなので、５月の連休の空き時間で更新します。<br>ネタとしては、以前から考えていたもので、ファナックカスタムマクロの使用例として、ハイデンハインサイクルをマクロ化してみたいと思います。<br>ハイデンハインサイクルについては、下記で記事にしています。<br>ご興味あれば、覗いてみてください。</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_cycle/" 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 loading="lazy" decoding="async" width="190" height="180" src="https://www.kazuban.com/blog/wp-content/uploads/2021/12/Heidenhain.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.kazuban.com/blog/wp-content/uploads/2021/12/Heidenhain.png 895w, https://www.kazuban.com/blog/wp-content/uploads/2021/12/Heidenhain-300x284.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2021/12/Heidenhain-768x726.png 768w" sizes="(max-width: 190px) 100vw, 190px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">ハイデンハインのサイクル機能</div><div class="blogcard-snippet internal-blogcard-snippet">ファナック系では、G73やG81～の固定サイクルと呼ばれている、ドリル加工用サイクルがありますがハイデンハイン制御機には、さらに高機能なサイクルが用意されています。変数で加工形状をカスタマイズできる点は、カスタムマクロに似ていす。多様なカスタムマクロが、標準で用意されているイメージです。さらに、ドリ...</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">2021.12.18</div></div></div></div></a>
</div></figure>




  <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></li><li><a href="#toc3" tabindex="0">カスタムマクロで変数化</a></li><li><a href="#toc4" tabindex="0">条件判断</a><ol><li><a href="#toc5" tabindex="0">条件分岐</a></li><li><a href="#toc6" tabindex="0">条件式</a></li></ol></li><li><a href="#toc7" tabindex="0">変数定義</a></li><li><a href="#toc8" tabindex="0">条件設定</a></li><li><a href="#toc9" tabindex="0">マクロ化</a></li><li><a href="#toc10" 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>結局、エクセルを起動しなければ単独では実行できません。<br>カスタムマクロも同様で単独では動作しません。<br>ファナック系制御機から呼び出される形で使用されます。</p>



<h2 class="wp-block-heading"><span id="toc2">カスタムマクロを使う利点</span></h2>



<p class="wp-block-paragraph">マクロ言語は、変数や演算、条件判断、分岐など、基本的なプログラム機能を持っています。<br>したがって、類似形状をパラメータ化して定義できたり、単純な計算をやらせたり<br>対話的に操作させたりすることができます。<br>カスタムマクロについては、下記記事で少し書いてあるので、参考にしてください。</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/custom-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 loading="lazy" decoding="async" width="305" height="180" src="https://www.kazuban.com/blog/wp-content/uploads/2020/07/Image.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.kazuban.com/blog/wp-content/uploads/2020/07/Image.png 1283w, https://www.kazuban.com/blog/wp-content/uploads/2020/07/Image-300x177.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2020/07/Image-1024x605.png 1024w, https://www.kazuban.com/blog/wp-content/uploads/2020/07/Image-768x454.png 768w" sizes="(max-width: 305px) 100vw, 305px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">カスタムマクロで段取り支援</div><div class="blogcard-snippet internal-blogcard-snippet">オプション扱いの場合もありますが、CNC制御にはNCデータを操作したり、制御機のデータを読み書きしたりできる、マクロと呼ばれているプログラム機能があります。マクロは、簡易的ですがプログラミング的な言語構造と変数を使用できるため、NCプログラムをパラメータ化して汎用的なプログラムを作成する事ができます...</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.07.27</div></div></div></div></a>
</div></figure>



<p class="wp-block-paragraph"><br>ハイデンハインのサイクルも、変数を変更するだけで、穴やポケットの加工が可能になっています。<br>ファナックの固定サイクルに比べるとはるかに豊富で単純な形状であればCAMなしで切削加工も可能です。<br>ファナックでもカスタムマクロを駆使すれば、同様のサイクルを作成する事が可能です。<br>今回は、マクロ作成の一例として、ハイデンハインのドリルサイクルを作ってみようと思います。<br>では、一番基本的な、「サイクル２００」を見てみましょう。<br>ハイデンハインの変数は、「Q」+「数値」で設定します。</p>



<div class="wp-block-media-text alignwide has-media-on-the-right is-stacked-on-mobile" style="grid-template-columns:auto 42%"><figure class="wp-block-media-text__media"><img loading="lazy" decoding="async" width="744" height="579" src="https://www.kazuban.com/blog/wp-content/uploads/2022/05/CYC200.png" alt="" class="wp-image-6577 size-full" srcset="https://www.kazuban.com/blog/wp-content/uploads/2022/05/CYC200.png 744w, https://www.kazuban.com/blog/wp-content/uploads/2022/05/CYC200-300x233.png 300w" sizes="(max-width: 744px) 100vw, 744px" /></figure><div class="wp-block-media-text__content">
<p class="wp-block-paragraph">CYCL DEF 200 DRILLING<br>Q200=2 ;SAFETY CLEARANCE　<br>Q201=-15 ;DEPTH<br>Q206=250 ;FEED RATE FOR PLUNGING<br>Q202=5 ;INFEED DEPTH<br>Q210=0 ;DWELL TIME AT TOP<br>Q203=+20 ;SURFACE COORDINATE<br>Q204=100 ;2ND SAFETY CLEARANCE<br>Q211=0.1 ;DWELL TIME AT DEPTH</p>
</div></div>



<p class="wp-block-paragraph">参考図と見比べるとだいたい、わかりますね。</p>



<ul class="wp-block-list"><li>Q200=2 ;SAFETY CLEARANCE　は、ドリル動作が始まる高さ。ファナックの「R点」</li><li>Q201=-15 ;DEPTH　は、最終加工深さ</li><li>Q206=250 ;FEED RATE FOR PLUNGING　は、加工送りスピード</li><li>Q202=5 ;INFEED DEPTH　は、一回の切込み量。ファナックでは「Q5.0」</li><li>Q210=0 ;DWELL TIME AT TOP　は、サイクルに入る前のドウェル時間みたいです。<br>固定サイクルにはない機能です</li><li>Q203=+20 ;SURFACE COORDINATE　は、穴の上面座標です。段差がある場合に有効です。</li><li>Q204=100 ;2ND SAFETY CLEARANCE　は、次の穴への移動高さ。ファナックでは「イニシャル点」</li><li>Q211=0.1 ;DWELL TIME AT DEPTH　は、穴加工底面でのドウェル。ファナックでは「G82」の機能</li></ul>



<p class="wp-block-paragraph">ファナックの、G81、G82、G83　が合体したようなサイクルですね。<br>基本的には、G83に近いですが、Q201とQ202を同じ値にすれば、G81になりますし、<br>Q211を設定すればG82です。<br>ただし、G82の場合注意が必要です。<br>ハイデンハインでは「秒」で指定しますが、「G82」は一般的には「ミリ秒」単位です。<br>小数点指示も受け付ける機種もあると思いますが、今回は「ミリ秒」指示で小数点なしにしたいのですが変数を演算させた場合どうなるのか？<br>わかりません、実機での確認が必要です。<br>したがって、ハイデンハインサイクルを移植する場合では、Q211 の値を×1000する事になります。<br>Q200（SAFETY CLEARANCE）とQ204（2ND SAFETY CLEARANCE）も<br>ファナックのR点とイニシャル点を指定する場合の基準高さが違います。<br>ハイデンハインは、Q203（SURFACE COORDINATE）が基準になりますが<br>ファナックは、ワーク座標系のZ原点が基準になります。<br>Q210は、固定サイクルにはない項目なので、固定サイクルに入る直前にドウェル指令を追加する感じでしょうか・・</p>



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



<p class="wp-block-paragraph">カスタムマクロの変数は、「#」+「数値」で設定しますが、変数には数値の範囲により、<br>「ローカル変数」「コモン変数」「システム変数」など種類があるので注意が必要です。<br>今回は、#1～#33の「ローカル変数」を使用ししょうと思います。<br>また、サイクル機能以外に、ワーク座標系番号と工具番号、回転数なども追加しようと思います。</p>



<h2 class="wp-block-heading"><span id="toc4">条件判断</span></h2>



<p class="wp-block-paragraph">ハイデンハインサイクルと固定サイクルでは、設定変数が一対一ではないので、設定値によって条件判断が必要になるので、事前に整理してみます。</p>



<ul class="wp-block-list"><li>Q204はQ200と等しいかそれ以上とする</li><li>Q204とQ200が等しい場合は、「G99」、Q204が大きい場合には、その値をイニシャル点として「G98」モード</li><li>Q202がQ201以上でQ211が「0」の場合は、「G81」</li><li>Q202がQ201以上でQ211が「0」より大きい場合は、「G82」</li><li>Q202がQ201より小さくて、Q211が「0」の場合は、「G83」</li><li>Q202がQ201より小さくて、Q211が「0」より大きい場合には、どうしよう？<br>「G81」と「G82」の二工程にするか？</li></ul>



<p class="wp-block-paragraph">こんな感じで、条件判断させてみましょう。</p>



<h3 class="wp-block-heading"><span id="toc5">条件分岐</span></h3>



<p class="wp-block-paragraph">条件分岐は、「IF」｛条件式｝「GOTO」｛シーケンス番号｝で｛条件式｝が「真」の場合、指定｛シーケンス番号｝へジャンプします。<br>ジャンプではなく、変数処理をさせる事もできます。<br>「IF」｛条件式｝「THEN」｛処理｝<br>この場合は、｛条件式｝が「真」の場合、変数への代入や計算をさせる事ができます。</p>



<h3 class="wp-block-heading"><span id="toc6">条件式</span></h3>



<p class="wp-block-paragraph">条件式では、一般的な記号での比較演算子が使えないので、ちょっと取りつきにくいです。<br>下記の「EQ」「NE」「GT」「GE」「LT」「LE」の演算子を使用します</p>



<figure class="wp-block-table"><table><tbody><tr><td>EQ</td><td>＝</td><td>equal to</td><td>左辺と右辺が等しい</td></tr><tr><td>NE</td><td>≠</td><td>not equal to</td><td>左辺と右辺が等しくない</td></tr><tr><td>GT</td><td>＞</td><td>greater than</td><td>左辺が右辺より大きい</td></tr><tr><td>GE</td><td>≧</td><td>greater than or equal to</td><td>左辺が右辺以上</td></tr><tr><td>LT</td><td>＜</td><td>less than</td><td>左辺が右辺より小さい</td></tr><tr><td>LE</td><td>≦</td><td>less than or equal to</td><td>左辺が右辺以下</td></tr></tbody></table></figure>



<h2 class="wp-block-heading"><span id="toc7">変数定義</span></h2>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>(+++++++++++++++++++)<br>#1 = 54. (Work coordinate)<br>#2 = 1. (T Number)<br>#3 = #2 (H Number)<br>#4 = 3200. (SP)<br>(+++++++++++++++++++)<br>(CYCL DEF 200 DRILLING)<br>#10 = 7.0 (Q200 SAFETY CLEARANCE)　<br>#11 = -20.0 (Q201 DEPTH)<br>#12 = 350.0 (Q206 FEED RATE FOR PLUNGING)<br>#13 = 3.0 (Q202 INFEED DEPTH)<br>#14 = 10.0 (Q210 DWELL TIME AT TOP)<br>#15 = -2.0 (Q203 SURFACE COORDINATE)<br>#16 = 52.0 (Q204 2ND SAFETY CLEARANCE)<br>#17 = 1.0 (Q211 DWELL TIME AT DEPTH)<br>(+++++++++++++++++++)<br>#10 = #10 + #15<br>#16 = #16 + #15<br>#18 = FIX[#17*1000] ( It may be no good)<br>(+++++++++++++++++++)<br>#20 = 98. (G98 OR G99)<br>#21 = 80. (CYCLE)<br>(+++++++++++++++++++)</p></blockquote>



<p class="wp-block-paragraph">こんな感じでしょうか？<br>ハイデンハインのQパラメータをそのまま、＃変数と置き換えました。<br>R点（#10）とイニシャル点（#16）もZ原点からの指示に変更しています。<br><span style="text-decoration: underline;">#18は「秒」を「ミリ秒」に変換していますが、この方法ではダメかもしれません。<br>記憶では、「P」に小数点で「秒指令」できる機種もありますが、<br>小数点が入るとエラーになる制御機もあったような・・・？<br>FIX 関数を使ってみましたが、これで正解なのかは？？です。<br>たぶん、#18は小数点が入ってしまいそうです。<br>演算はやめて、直接「#18=2000」などどしたほうが、いいかもしれません。</span><br>コメントは、ファナックの場合、漢字が使用できない場合が多いので、英数文字にしました<br>ソディック機は漢字が使えるのですけどね～</p>



<h2 class="wp-block-heading"><span id="toc8">条件設定</span></h2>



<p class="wp-block-paragraph">上記で検討した、条件をマクロ化してみましょう。</p>



<p class="wp-block-paragraph">Q204はQ200と等しいかそれ以上とする<br>IF [#16 LT #10] THEN #16=#10</p>



<p class="wp-block-paragraph">Q204とQ200が等しい場合は、「G99」<br>IF [#16 EQ #10] THEN #20=99.<br>Q204が大きい場合には、その値をイニシャル点として「G98」<br>IF [#16 GT #10] THEN #20=98.</p>



<p class="wp-block-paragraph">Q202がQ201以上でQ211が「0」の場合には、「G81」<br>IF [[#13 GE #11]AND[#17EQ0]] THEN #21=81.</p>



<p class="wp-block-paragraph">Q202がQ201以上でQ211が「0」より大きい場合には、「G82」<br>IF [[#13 GE #11]AND[#17GT0]] THEN #21=82.</p>



<p class="wp-block-paragraph">Q202がQ201より小さくて、Q211が「0」の場合は、「G83」<br>IF [[#13 GE #11]AND[#17EQ0]] THEN #21=83.</p>



<p class="wp-block-paragraph">Q202がQ201より小さくて、Q211が「0」より大きい場合にはどうするか？<br>苦肉の策で、「8382」とし、「G83」後、「G82」もやらせましょう。<br>IF [[#13 LT #11]AND[#17GT0]] THEN #21=8382.</p>



<p class="wp-block-paragraph">こんな感じかな？！<br>固定サイクル「G81」「G82」「G83」の切り替えは、「#21」の数値により<br>条件ジャンプさせようと思います。<br>それから、固定サイクルは、定義した行の位置座標でサイクル加工を始めてしまいます。<br>X、Y軸はモーダルなので、指定しなくてもその場所で加工します。<br>加工させないで、固定サイクルの定義のみしたい場合には、「L」の繰り返し指令を利用し<br>繰り返しなしの意味で「L0」を指令します。<br>ただし、この「L」は制御機によって「K」の場合があります。<br>ＯＫＫの制御機は「K」だったように記憶していますが、お使いの制御機に合わせてください。</p>



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



<p class="wp-block-paragraph">%<br>O1000<br>(CYCL DEF 200 DRILLING MACRO BY Kazuban)<br>(+++++++++++++++++++)<br>#1 = 54. (Work coordinate)<br>#2 = 1. (T Number)<br>#3 = #2 (H Number)<br>#4 = 3200. (SP)<br>(+++++++++++++++++++)<br>#10 = 7.0 (Q200 SAFETY CLEARANCE)　<br>#11 = -20.0 (Q201 DEPTH)<br>#12 = 350.0 (Q206 FEED RATE FOR PLUNGING)<br>#13 = 3.0 (Q202 INFEED DEPTH)<br>#14 = 10.0 (Q210 DWELL TIME AT TOP)<br>#15 = -2.0 (Q203 SURFACE COORDINATE)<br>#16 = 52.0 (Q204 2ND SAFETY CLEARANCE)<br>#17 = 1.0 (Q211 DWELL TIME AT DEPTH)<br>(+++++++++++++++++++)<br>#10 = #10 + #15<br>#16 = #16 + #15<br>#18 = FIX[#17*1000]<br>(+++++++++++++++++++)<br>#20 = 98. (G98 OR G99)<br>#21 = 80. (CYCLE)<br>(+++++++++++++++++++)<br>IF [#16 LT #10] THEN #16=#10<br>IF [#16 EQ #10] THEN #20=99.<br>IF [#16 GT #10] THEN #20=98.<br>IF [[#13 GE #11]AND[#17EQ0]] THEN #21=81.<br>IF [[#13 GE #11]AND[#17GT0]] THEN #21=82.<br>IF [[#13 GE #11]AND[#17EQ0]] THEN #21=83.<br>IF [[#13 LT #11]AND[#17GT0]] THEN #21=8182.<br>(++++++++++++++++++++)<br>(++++++++++++++++++++)<br>G90G00G17G40G80G49<br>G#1<br>N0001<br>T#2<br>M06<br>G90G00X0Y0<br>G43Z#16H#3<br>M00<br>(Check Start Point)<br>S#4M03<br>G04X#14<br>IF [#21 EQ 81] GOTO 0001<br>IF [#21 EQ 82] GOTO 0002<br>IF [#21 EQ 83] GOTO 0003<br>IF [#21 EQ 8382] GOTO 0003<br>(++++++++++++++++++++)<br>N0001(G81)<br>G#20 G81 Z#11 R#10 F#11 L0 (L may be K.)<br>GOTO 100<br>(++++++++++++++++++++)<br>N0002(G82)<br>#21 = 82<br>G#20 G82 Z#11 R#10 P#18 F#11 L0 (L may be K.)<br>GOTO 100<br>(++++++++++++++++++++)<br>N0003(G83)<br>G#20 G83 Z#11 R#10 Q#10 F#11 L0 (L may be K.)<br>GOTO 100<br>(++++++++++++++++++++)<br>N100<br>X-40.Y15.<br>X-60.Y15.<br>X-60.Y-15.<br>X-40.Y-15.<br>G80<br>Z#16<br>IF [#21 EQ 8382] GOTO 0002<br>GOTO 9999<br>(++++++++++++++++++++)<br>N9999<br>M09<br>M05<br>G91G28Z0<br>G91G49Z0<br>G90M05<br>M30<br>%</p>



<h2 class="wp-block-heading"><span id="toc10">完成</span></h2>



<p class="wp-block-paragraph">こんな感じで作ってみましたが、機械を触れる環境でないので、まったく検証してません。<br>もし、実際の加工で使用する場合には、十分確認をお願いします。<br>また、どなたか、検証していただければ、助かります。<br>カスタムマクロ作成の参考になれば幸いです。<br></p>
]]></content:encoded>
					
		
		
			</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-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></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>
	</channel>
</rss>
