<?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/tag/program-structure/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.kazuban.com/blog</link>
	<description>なにかしら、皆さんの参考になれば幸いです！</description>
	<lastBuildDate>Mon, 10 Apr 2023 05:27:28 +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>プログラム構成 | じじぃの引出し</title>
	<link>https://www.kazuban.com/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>NCプログラム／プログラム構成</title>
		<link>https://www.kazuban.com/blog/main-sub-pro/</link>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Tue, 28 Jan 2020 00:32:43 +0000</pubDate>
				<category><![CDATA[NC]]></category>
		<category><![CDATA[NCプログラム]]></category>
		<category><![CDATA[サブプログラム]]></category>
		<category><![CDATA[プログラム構成]]></category>
		<category><![CDATA[メインプログラム]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=1702</guid>

					<description><![CDATA[NCプログラムの構成は、大きく分けると２種類にわける事ができます。一つは加工に必要な準備機能で、もう一つは、実際の加工経路の動作指令です。さらに、マシニングセンターを対象にすると、準備機能は４つに分ける事ができます。CA [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">NCプログラムの構成は、大きく分けると２種類にわける事ができます。<br>一つは加工に必要な<strong>準備機能</strong>で、もう一つは、実際の<strong>加工経路</strong>の動作指令です。<br>さらに、マシニングセンターを対象にすると、準備機能は４つに分ける事ができます。<br>CAMのポストプロセッサを編集する場合やプログラム全体の構成を検討する際、この基本構成から検討していけば、<span class="markerPink">複数の機械を使用する場合</span>に互換性を持たせやすくなります。</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><li><a href="#toc4" tabindex="0"> 準備機能指令 を４種類に整理 </a></li></ol></li><li><a href="#toc5" tabindex="0">メイン・サブ　プログラム方式</a><ol><li><a href="#toc6" tabindex="0">M98・M198　／　ファナック、サブプロ呼び出し</a></li><li><a href="#toc7" tabindex="0">サブプログラムのファイル名</a></li><li><a href="#toc8" tabindex="0">M99</a></li></ol></li><li><a href="#toc9" tabindex="0">まとめ</a><ol><ol><li><a href="#toc10" tabindex="0">  ＮＣプログラムの記事  </a></li></ol></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">準備機能指令と加工経路指令</span></h2>



<h3 class="wp-block-heading"><span id="toc2">加工経路指令</span></h3>



<p class="wp-block-paragraph">加工経路指令は、主に<a href="https://www.kazuban.com/blog/nc-gcode-02/">Gコードのページで説明</a>したような、実際の工具の動きを定義する部分です。<br>使用される指令（Gコード）はかなり少なく、移動先の座標値が主ですね。</p>



<pre class="wp-block-preformatted"> %
 O0402
 (T=T02, D=8.00)
 G90G00G17
 Z50.
 X0Y150.65
 Z3.
 G90G01Z-6.99F1050
 G41X2.5Y154.98D01F300
 G03X0Y155.65I-2.5J-4.33
 G02X-32.502Y159.641J134.35F1120
 X-50.886Y168.633I11.842J47.496
 G03X-58.513Y170.962I-6.823J-8.691
 G02X-68.09Y180.562I-.652J8.927
 G03X-72.281Y191.868I-14.409J1.088
 G01X-75.372Y194.959
・
・
 G02X32.502Y-130.359I-39.048J29.518
 X0Y-134.35I-32.502J130.359
 G03X-2.5Y-135.02J-5.
 G40G01X0Y-139.35
 G00Z50.
 X0Y0
 M99
 %</pre>



<p class="wp-block-paragraph">上は、ファナック機用の実際の加工データの一部ですが、このように実際の加工経路を指令するコードは</p>



<ul class="wp-block-list"><li>「G90/G91」の座標系の指令</li><li>「G17/G18/G19」の平面指定</li><li>「G00/G01/G02/G03」の移動指令</li><li>「G40/G41/G42」の工具径補正</li></ul>



<p class="wp-block-paragraph">この程度です。<br>基本のコードばかりなので、この<strong>加工経路指令</strong>の部分は、<span class="markerYellow">機械の種類や制御機が違ってもかなり互換性は高い</span>です。<br>おそらく、 オークマOSP やソディックの制御機など国産の機械では、 「%」や「M99」  の違いがありますが、 <span class="markerYellow">基本部分はそのまま使用できる</span>と思います。  <br>さらに、ハイデンハインのISOコードやレダースでも若干の修正で使用できます。<br>ただし、<span class="markerBlue">穴あけなどの、「固定サイクル」は互換性は低い</span>です。<br>ファナックとOSPでも違いがあります。<br>また、EU機の場合、円弧補間の（I  ,  J ,  K）のデフォルトが一般的な「インクリメンタル／相対値」でなく「アブソリュート／絶対値」の場合もあるので注意が必要です。<br>明示的にどちらを使用するかの指令はあるとは思いますので、事前の調査は必要ですね。<br>このように制御機により若干の違いはありますが、同じ制御機であれば、同じプログラムが使用できます。</p>



<h3 class="wp-block-heading"><span id="toc3"> 準備機能指令 </span></h3>



<p class="wp-block-paragraph">これは工具の動きではなく実際の加工に必要な準備をさせる指令の集まりです。<br>マシニングセンターであれば、主軸に使用工具を装着したり、回転させたり、工具長補正を完成させたり、クーラントのON・OFFなどです。<br>この部分は、機械への依存度が高いため、互換性は少ないです。<br><strong>同じファナックの制御機</strong>であっても、<span class="markerPink"><strong>機械メーカー</strong>や<strong>機械仕様</strong>によって<strong>指令コード番号</strong>が違います。</span><br>補助機能とも呼ばれる「<strong>Mコード</strong>」での指令が多いですが、この「<strong>Mコード</strong>」は<span class="markerYellow">ユーザー側でもカスタマイズが可能</span>なので同じ機械でも、部署や担当者により違いが出てくる可能性があります。</p>



<pre class="wp-block-preformatted"> %
 O6412(PARTS-02 CAVITY V33 2020/01/01 )
 G90G00G17G40G80G49           &lt;-------　デフォルトとキャンセル
 G54                          &lt;-------　ワーク座標系
 N0001
 ( N0001  T01  DIA = 8.000 )
 T01                          &lt;-------　工具指示
 M06                          &lt;-------　工具交換
 G90G00X0Y0
 G43Z50.H01                   &lt;-------　工具長補正
 S4000                        &lt;-------　スピンドル回転数
 M03                          &lt;-------　回転指令
 M07                          &lt;-------　クーラント
 G04X30.                      &lt;-------　暖機
 　・
 　・              &lt;-------　実際の加工経路 ------------------- 
 　・
 M09                          &lt;--------　クーラント停止
 G91G28Z0                     &lt;--------　Z軸退避
 G49                          &lt;-------- 工具長補正キャンセル
 G90M05                       &lt;--------　回転停止
 M30                          &lt;--------　終了
 %</pre>



<p class="wp-block-paragraph">上の例では一般的なコードを使用したので、ファナック機であれば互換性は高そうですが、<span class="markerYellow">「<strong>ワーク座標系</strong>」「<strong>工具長補正</strong>」「<strong>クーラント</strong>」などの指令</span>は制御機や機械仕様により変わってきます。<br>特に、「<strong>クーラント指令</strong>」は、<span class="markerPink">同じ機械メーカー、同じ制御機</span>であっても指令コードが違う場合が多いのでかなり厄介です。<br>また、<span class="markerPink">コード的には同じ</span>でも、使用者（会社・部署）によって出力の<span class="markerPink"><strong>順番</strong>が違う</span>場合もあります。<br>例えば、工具を回転させる場合、暖気を考慮すれば工具交換後すぐに回転させたい場合もあれば、危険を考慮すれば加工近くまで移動した後に回転させたい場合もあります。<br>クーラントも、冷却水状態が安定してから加工したい場合、早めに吐き出したいかもしれません。<br>逆に、工具が高い位置で出してしまうと、冷却水の周辺への飛び散りなど周りへの影響を気にする場合もあるかもしれません。<br>このように、準備機能は、<span class="markerPink">機種によるコードの違いと共にユーザーの経験や考え方でも違ってきます。</span><br>逆に考えると、ノウハウの対応や数種類の機械を使用する場合、この部分は機械依存で用意する必要がありますが、この準備機能指令と工具経路指令を分けて構成する事で比較的簡単に、違う機種でも動作させる事ができそうです。</p>



<p class="wp-block-paragraph"><a id="DownLoad"></a></p>



<a id="constitution"></a><h3><span id="toc4"> 準備機能指令 を４種類に整理 </span></h3>



<p class="wp-block-paragraph">さらにマシニングセンターを対象に、準備機能指令を考えてみると、全体の最初と最後、各加工工程の前後で４種類に分類できます。<br>例として、このように分割してみましょう。<br>「全加工の始まり：Header.nc」 <br>「全加工の終わり：Footer.nc」<br> 「加工工程の前　:ProcessStart.nc」<br>「加工工程の後　：ProcessEnd.nc」  </p>



<pre class="wp-block-preformatted"><strong>「全加工の始まり：Header.nc」  </strong>

%
 O「番号」(コメント)
 G90G00G17G40G80G49
 G「ワーク座標番号」
(初期暖気など、最初のみやらせたい指令) </pre>



<pre class="wp-block-preformatted">「<strong>加工工程の前　:ProcessStart.nc」   </strong>

 N「工程番号」
 ( NO.「工程番号」  T「工具番号」  DIA = 「工具径」 必要なら工具情報など)
 G「ワーク座標番号」
 T「工具番号」
 M06
 G90G00X0Y0
 G43Z50.0H「工具長補正番号」
 S「回転数」
 M03
 M「クーラント指令」
 G04X「暖気時間」</pre>



<pre class="wp-block-preformatted">（　ここに、実際の加工経路プログラムを置く　）</pre>



<pre class="wp-block-preformatted"><strong>「加工工程の後　：ProcessEnd.nc」</strong>

 M09(Coolant off)
 G91G28Z0
 G49
 G90M05</pre>



<pre class="wp-block-preformatted"> <strong>「全加工の終わり：Footer.nc」</strong> 

 (自動掃除など、加工終了のみやらせたい指令)  
 M30
 %</pre>



<p class="wp-block-paragraph">こんな感じでしょうか。<br>この構成の「加工工程の前・後」の間に、加工経路指令のNCプログラムを挿入すれば、マシニングセンターでの自動加工プログラムの完成ですね。</p>



<h2 class="wp-block-heading"><span id="toc5">メイン・サブ　プログラム方式</span></h2>



<p class="wp-block-paragraph"> もちろん上記のように、「加工工程の前・後」の間に、加工経路指令を直接挿入してもいいですが、「加工経路指令」部分を<strong>サブプログラム</strong>として呼びだす方法もあります。<br>こちらのほうが、「機種依存」だけのプログラムになるので、より読みやすくなります。<br>上の説明のように、<span class="markerYellow">「<strong>加工経路指令</strong>」は互換性が高い</span>ですから、この部分をサブプロとして、互換性の低い「<strong>準備機能指令</strong>」をメインプロとしてこのメインから呼び出す構成にします。こうする事で、多機種に対応したい場合、<span class="markerPink">メインプロのみ機種依存に応じたデータを用意すればよく、</span>管理も楽になります。<br>さらに「加工経路指令」部分は、複雑になれば手作業での作成は難しいのでCAMのお世話になる事が多いですが、メインプロだけであれば、<strong>テンプレート</strong>を作成しておき、少しの編集で作成可能です。<br>下の例でも、編集箇所はそれほど多くないのがわかります。</p>



<pre class="wp-block-preformatted">  %
 O6412(PARTS-02 CAVITY V33 2020/01/01 )
 G90G00G17G40G80G49    
 G54                          
 N0001
 <strong>T01  </strong>        　　　　　&lt;---------- 使用工具に番号に変更                
 M06                          
 G90G00X0Y0
 G43Z50.<strong>H01 </strong>  　　　　　&lt;---------- 使用工具長補正番号に変更                
 <strong>S4000</strong>                 &lt;---------- 使用回転数に変更                      
 M03                     
<strong> M07</strong>                   &lt;----------　使用クーラントに変更                  
 G04X30.                    
 　・
 <strong>M98P2000 </strong>             &lt;--　実際の加工経路 この部分をサブプロ化し呼び出す
 　・
 M09                  
 G91G28Z0               
 G49                  
 G90M05                   
 M30                   
 % </pre>



<p class="wp-block-paragraph"> メインプロのみ、エディタなどで作成すれば、互換性の高いサブプロ部分は、CAMの標準的なポストプロセッサで出力できますから、<span class="markerPink">最小限のポストプロセッサで、複数の機械を動作させる事ができます。 </span></p>



<h3 class="wp-block-heading"><span id="toc6">M98・M198　／　ファナック、サブプロ呼び出し</span></h3>



<p class="wp-block-paragraph">ファナックでは、サブプロ呼び出しに、「<strong>M98 / M198</strong>」を使用します<br>このMコードに、サブプログラムのファイル名を付加して指令します。<br>二つの違いは、<span class="markerBlue">サブプログラムを保存している制御機内の場所</span>になります。<br>基本的にメインプログラムはメモリー内に登録して実行しますが、「<strong>M98</strong>」は、<strong>メインプログラムと同じメモリーの場所</strong>に保存してあるNCプログラムを呼び出します。<br>「<strong>M198</strong>」は、メモリとは別に、ハードディスクなど<strong>補助記憶装置に保存</strong>してあるNCプログラムを呼び出します。<br>昔はファナック制御機のメモリ容量を増やすのはかなり高価でしたが、３D加工が主流になりプログラム容量が大きくなるにつれて、補助記憶装置を設備する場合が多くなっていると思います</p>



<h3 class="wp-block-heading"><span id="toc7">サブプログラムのファイル名</span></h3>



<p class="wp-block-paragraph">基本的には、ファナックは「<strong>O番号</strong>」と呼ばれる番号でプログラムを識別するので<span class="markerYellow">その番号と同じファイル名を使用</span>します。<br>例えば、プログラム番号を「<strong>O1234</strong>」とした場合、サブプログラムのファイル名も「<strong>O1234</strong>」とします。<br>その後、<span class="markerPink">「<strong>O</strong>」を「<strong>P</strong>」に変更</span>し、このメインプロに「<strong>M98 P1234</strong>」の指令をする事で、その箇所にサブプログラムを挿入する事ができます<br>また多くは、「<strong>O</strong>」+「数字４桁」という制限があり、４桁の番号で加工プログラムを識別しなければいけません。<br>なんとも厄介な仕様ですが、制御機によっては<span class="markerYellow">ファイル名で呼び出せる</span>機種もあります。<br>こちらであれば、かなりわかりやすいです。<br>「&lt; &gt;」内に、ファイル名を書いて呼び出しが可能な機種もあります。<br>こちらであれれば、ファイル管理はかなり楽になりますね。<br>（例）<em><strong> M198 &lt;Running.nc&gt;</strong></em><br> <br>ただし、ソディックの場合は、「<strong>&lt; &gt;</strong>」でなく「<strong>(  )</strong>」になります。<br>またまた、面倒ですね～。いじめです！</p>



<h3 class="wp-block-heading"><span id="toc8">M99</span></h3>



<p class="wp-block-paragraph">通常NCプログラムの最後は「<strong>M30</strong>（もしくはM02）」ですが、サブプログラムの最後は、「<strong>M99</strong>」にしなければいけません。<br>完成された一連のNCプログラムを使用する場合には、そえほど問題になりませんが、<span class="markerPink">既存のプログラムを使用</span>して、<span class="markerPink">多数個や多品種加工</span>に対応したい場合、かなり面倒です。<br><span class="markerYellow"><strong>サブプログラムだけ</strong>でも加工ができる場合、<strong>メインプログラム</strong>として使用</span>したいですが、最後の「M99」をそのままにすると、永遠にプログラムを繰り返す事になります。<br>また、逆に<span class="markerYellow"><strong>メインプログラム</strong>を別のプログラムから呼び出して、<strong>サブプログラム</strong>として使用</span>したい場合、最後の「M30」をそのままにすると、そこで終了してしまい、呼び出し元に戻ってきません。<br>ちなみに、ハイデンハインもレダースも、メイン・サブの違いはありません。<br>ハイデンハインは「END PRM 」が終了コードですし、レダースはすべてが「M30」です。</p>



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



<p class="wp-block-paragraph">機械が増えてきて、同じ制御機でもバージョンが変わってきたり、機械メーカー独特の指令が増えてきたりすると、NCプログラムの管理も大変になってきます。<br>ポストプロセッサでの対応でどうにかなりますが、<span class="markerPink">CAM作成時に加工機械が決定されていない</span>場合、機械の種類だけポストを準備して数種類のNCプログラムを作成しなくてはいけません。<br>このメイン・サブ方式にすることで、メインプログラムのみを複数作ることで対応できます。</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="900" height="736" src="https://www.kazuban.com/blog/wp-content/uploads/2020/01/変換ソフト.png" alt="" class="wp-image-1749" srcset="https://www.kazuban.com/blog/wp-content/uploads/2020/01/変換ソフト.png 900w, https://www.kazuban.com/blog/wp-content/uploads/2020/01/変換ソフト-300x245.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2020/01/変換ソフト-768x628.png 768w" sizes="(max-width: 900px) 100vw, 900px" /></figure>



<p class="wp-block-paragraph"><br>メインプログラムは、<strong>エディタ</strong>編集や<strong>エクセルのマクロ</strong>でも作成可能です。<br>私は、ファナックとOSPの機械は、<span class="markerPink">基準のメインプロデータ</span>のみ作成し、変換ソフトで複数の機械へ対応させる方法で運用しています。<br>メイン・サブ方式のほうが変換ソフトを開発する場合でも、作成しやすいです。</p>



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



<div class="pager">
  <a class="prev page-numbers" href="https://www.kazuban.com/blog/lenrth-compensation/">PREV</a>
  <a class="page-numbers" href="https://www.kazuban.com/blog/nc-gcode-01/">1</a>
  <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>
  <span aria-current="page" class="page-numbers current">5</span>
  <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/sub-to-package/">NEXT</a>
</div>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
