Skip to main content
CNC.wikiCNC.wiki

三菱CNC M01タップ退避エラー解除:G26安全復旧完全ガイド

三菱製CNCで発生するM01 0057アラーム(タップ退避待ち)とP729エラーを安全に解除する実践ガイド。G26コマンドによる同期逆転退避プログラムの書き方、パラメータ#1234や#1171 of 検証、ロット生産における高い信頼性と繰り返し精度を維持する対策を徹底解説。

Hakan Gündoğdu
Hakan Gündoğdu

CNC CARE 共同創業者

はじめに

非常停止や送り保持によって同期タップサイクルが途中で急停止した際、ワークピースに食い込んだ超硬タップをオペレータがパニックを起こして手動ジョグで強引にZ軸方向に引き抜こうとすると、タップ刃先が瞬時に折損し、破断した工具鋼の残骸がネジ穴の深部に残ることで、高額な仕掛品は一瞬にして廃棄処分(不良品)となる。三菱電機(Mitsubishi)のCNCシステムでは、通常のプログラムストップ・エンド指令とは異なり、タップが加工途中で拘束されると強力な安全インターロックが自動的に作動する。この状態を正しく認識せず、オペレータが軸を強制的に手動移動させようとすれば、ワークのクランプ冶具やバイスに刃物が激突し、最悪の場合は主軸や刃物台を破損する深刻な衝突事故を引き起こす。量産現場での高い信頼性とロット間の繰り返し精度を恒久的に維持するためには、三菱製CNC独自のインターロックシーケンスと専用のタップ退避モード(G26)の論理構造を厳格に理解し、安全な復旧プロセスを標準化することが絶対的な必須要件となる。

技術概要

技術仕様詳細
コマンドコードG26
モーダルグループ非モーダル (Gコード) / PLC信号
対象ブランドMitsubishi
重要パラメータ#1234 set06/bit3 (タップ退避中のインターロック), #1171 taprov (退避送り速度倍率), #079 bit1 (タップ退避オプション有効化)
主な制約事項主軸を逆転させて退避するために、専用の退避プログラム内での G26 実行、またはPLC信号 YC5C のトリガーが必要。手動でのクリアには、インターロックを解除するためのPLC信号 YCD6 が必要。

クイックリード

  • 安全インターロックの確保: タップがねじ部に噛み込んでいる際のアクシデント的な軸ジョグ操作を防止するため、安全インターロックパラメータ #1234 set06/bit3 を必ず 0 に設定しておきます。
  • 同期復旧の実行: 工具を安全に逆転・退避させるため、専用の退避復旧ルーチン内で専用の G26 コマンドを実行します。
  • 復帰フィードレート(feedrate)の制御: 逆転逆送り時の退避速度を安全に制御するため、タップ退避のオーバーライド(override)倍率パラメータ #1171 taprov を適切に設定します。
  • アクティブ主軸(spindle)の整合: M01 1032 アラームの不整合を防ぐため、マルチスピンドル環境では退避を実行する前に、正しいアクティブ主軸(spindle)を選択します。
  • シーケンス論理の遵守: P729 アラームの発生を防ぐため、退避プログラム内で G26 コマンドを呼び出す前に、直線補間や位置決め(早送り)などの軸移動動作を絶対に開始しないでください。
  • 残留状態のクリア: タップがすでに手動で取り除かれている場合は、PLCのキャンセル信号 YCD6 をトリガーして XCA5 インターロック状態を強制的に解除します。

基本概念

三菱電機(Mitsubishi)のタップ退避機能の実用的なプログラミング上の効果は、非常停止や送り保持(feed hold)によって同期タップサイクル(cycle)が途中で停止した際、工具が致命的な破損を起こさないよう保護することです。三菱電機のアーキテクチャの最大の特徴は、パラメータ #1234 set06/bit3 を介してすべての機械軸を厳格にインターロックすることにあります。「タップ退避可能」信号(XCA5)がONになった際、このパラメータが「0」に設定されていると、制御装置は手動および自動の軸移動を一切禁止し、即座にアラームコード(M01 0057)を発生させます。この厳格なインターロック動作は、オペレータがやみくもに軸をジョグ操作で逃がそうとして、結果的にほぼ確実にタップを破断させてしまう他のコントローラと、三菱電機のシステムを明確に区別するポイントです。

もう一つの決定的な特徴は、プログラム検証の処理方法です。システムがタップ退避待機状態でロックされている間にオペレータがグラフィックチェックを実行しようとすると、CNCはシミュレーションをアクティブに停止し、3Dチェック画面上にアラームを直接表示します。これにより、ユーザーは将来のツールパスを検証する前に、まず物理的なタップ退避状態を解決することを強制されます。さらに、三菱電機は退避プログラムにおけるシーケンス論理を厳格に適用しており、G26 タップ退避コマンドを実行する前にいかなる移動指令も実行することを禁止し、違反した場合はシーケンスを即座に停止します。

低レベルのパラメータ変更やカスタムのPLC復旧シーケンスを実行する前に、システム構成を安全に保護するため、事前に完全な Mitsubishi M Series backup and restore(三菱電機 Mシリーズ バックアップ&リストア)を実行しておくことを強く推奨します。

コマンド構造

三菱電機の G26 コマンドは、途中で停止した穴から工具を同期的に退避させるために特別に実行される非モーダルGコードです。このコマンドが実行されると、制御装置は中断されたタップサイクルの履歴情報(タップのピッチ、ねじ回転方向、アクティブな主軸など)を読み取り、主軸(spindle)を逆転させ、Z軸を同期させながら退避復帰レベルまで戻します。この G26 ブロックは、あらゆる復旧用プログラムにおいて、絶対的な最初の命令でなければなりません。

このシーケンスを統合するため、PLCシステムは個別のステータス信号と制御ビットを使用してCNCユニットと通信します。基本となる制御パラメータは #079 bit1 であり、機械側の退避オプションを有効にするために「1」に設定する必要があります。これが有効になると、物理的なハードウェアの状態が PLC信号 XCA5 を介して監視されます。タップサイクルが停止すると、機械はロックされたインターロック状態に入り、退避動作を実行するために G26 Gコードまたは PLC信号 YC5C のいずれかを必要とします。万が一、タップを手動で物理的に抜き取った場合は、PLC信号 YCD6 を使用してインターロック状態を手動で解除しなければなりません。

G26 ;
信号 / パラメータ識別子説明と設定範囲
タップ退避入力信号YC5CGコードを使用せずに、物理的なタップ退避動作を実行するために使用されるPLC入力信号。
退避状態解除信号YCD6タップ退避可能信号 (XCA5) を強制的にOFFにするために使用されるPLC入力信号。
タップ退避可能状態信号XCA5タップサイクルが中断され、軸がロックされていることを示すPLC出力ステータス信号。
退避中インターロックパラメータ#1234 set06/bit30: 厳格なインターロックを適用し、M01 0057 アラームをトリガー; 1: インターロックを無効化。
退避送り速度倍率#1171 taprov退避オーバーライド倍率(実際の退避速度 = タップサイクル時の送り速度 × taprov倍率)。
退避機能オプションパラメータ#079 bit1タップ退避および戻りシステムオプションの有効 (1) または無効 (0)。

ブランド別応用

Mitsubishi

三菱電機(Mitsubishi)のコントローラは、CNC制御コアとPLCラダー(ladder)プログラムの緊密な統合によって、中断されたタップサイクルを処理します。フィードホールド(feed hold)や非常停止によって同期タップサイクル(G84、G74、またはG88)が停止すると、制御装置は即座に「タップ退避可能」状態(XCA5)を立ち上げます。この状態は、機械座標系に対する瞬時の安全ブロックとして機能します。

タップを安全に退避させるため、コントローラは専用の G26 タップ退避コマンドの実行を要求します。退避送り速度は、タップ退避のオーバーライド(override)倍率パラメータ #1171 taprov によって動的にスケーリングされ、ねじ山を破損させることなく、高度に同期・制御された退避が行われます。

構成要素識別子機能および設定範囲
専用GコードG26復旧用プログラム内で実行される、専用の非モーダルタップ退避コマンド。
PLCインターフェースYC5C / YCD6YC5Cはタップ退避を実行し、YCD6はタップ退避可能状態を強制クリア。
システムパラメータ#1234 set06/bit3アクティブな軸インターロックを制御(0: 絶対的な軸ロック、1: 安全ロックをバイパス)。
送り制御#1171 taprov退避送り速度倍率(元のタップサイクル時の送り速度をスケーリング)。
システムアラームM01 0057 / P729M01 0057: タップ退避待ち、P729: G26以前の不正な移動コマンド入力。

警告: パラメータ #1234 set06/bit3 を 1 に設定して軸のインターロックを一時的にバイパスすると、手動ジョグ移動自体は可能になりますが、主軸(spindle)との同期式保護機能が完全に無効化されるため、ほぼ確実にタップが穴の内部でねじ切れ、ワークピースが完全な不良品と化します。

ブランド比較

三菱電機の制御システムにおける、世代間でのタップ退避機能およびシミュレーション統合を比較すると、世代ごとに大幅な安全機能の進化が見られます:

三菱電機コントローラシリーズタップ退避インターロックの統合レベルグラフィック / シミュレーション時の主要な挙動オペレータの復旧ワークフロー
M800V / M80V シリーズ高度な3D加工シミュレーション(Machining Simulation)および軸フィードバックへ緊密に統合。グラフィックチェック操作([Check continu] / [Check step] メニュー)の実行をCNCが能動的に拒否し、3Dチェック画面上に M01 0057 アラームを直接投影・表示。3Dシミュレーションやプログラムのパスチェックを実行する前に、物理的なタップ退避コマンド(G26)を実行するか、PLCで状態解除を完了させることが絶対条件。
M80 / M70 シリーズシステムパラメータを介した標準的なハードウェアインターロック。XCA5アクティブ時に軸移動を電気的・機械的にロック。物理的な軸移動自体は防止されるが、通常のグラフィックシミュレーション画面でのシミュレーション動作は強制的に停止せず、アラームも連動表示されない。オペレータはプログラムのパス(軌跡)を画面上で視覚的に検証できるが、実際の機械の軸ロックは G26 の実行または YCD6 がトリガーされるまで解除されない。
レガシー M60 / M50 シリーズ基本的なPLCインターフェース信号によるインターロック。手動軸の移動制限は、個別機械メーカーが作成するカスタムPLCラダープログラムに依存。グラフィックシミュレーションへのインターロックは一切存在せず、チェック画面は物理的なタップ退避インターロック状態とは完全に無関係に動作。軸の可動制限はPLCプログラム次第。オペレータは G26 を呼び出す専用のマクロプログラムを実行するか、物理的な手動ジョグのオーバーライド手順を実行。

技術解析

タップ退避インターロックの物理的およびデジタル的統合は、三菱電機のコントローラ世代における安全システムの進化を浮き彫りにしています。高度な M800V および M80V シリーズでは、このインターロックは単なるバックグラウンドのPLC制限にとどまらず、CNCのシミュレーションエグゼクティブ(制御コア)と能動的に連動しています。「タップ退避可能」(XCA5)信号がON(高レベル)であり、パラメータ #1234 set06/bit3 が 0 に設定されている場合、CNCは仮想的な 3D加工シミュレーション(3D Machining Simulation)を強制停止します。[Check continu] または [Check step] メニューを介してグラフィックチェックを実行しようとすると、画面上に実際の M01 0057 アラームがトリガーされ、デジタル検証環境自体がロックされます。これにより、オペレータは後続の工具パスをシミュレートする前に、まず工場の製造現場で物理的に被削材からタップを退避・解消することを余儀なくされます。

標準的な M80/M70 シリーズやレガシーな M60/M50 システムでは、インターロックは純粋にハードウェアまたはカスタムのPLC軸ブロックとして動作します。物理軸は工具のねじ切れを防止するために安全にロックされますが、グラフィックチェックシステムは制御系とは別のスレッド(thread)で動作するため、物理的な機械がタップ退避待機状態でロックされたままであっても、オペレータがグラフィック上のシミュレーションを実行することが可能です。これは、システムがすでにクリアされたかどうかに関して現場での不要な混乱を招く原因となり得ます。

パラメータ制御の観点から見ると、パラメータ #1234 set06/bit3 を 0 に設定することが主要な防衛ラインとなります。これを 0 に設定しておくと、XCA5がアクティブな状態で自動プログラムの実行や手動ジョグ指令が行われた際、即座に M01 0057 アラームがトリガーされ、不適切な軸の動きが抑止されます。このパラメータを 1 に設定すると安全ロックが解除(バイパス)されますが、タップを同期して逆転退避させるために必要な主軸(spindle)との連動関係を無視した、生のジョグ入力を許容してしまうため、運用上絶対に避けるべきです。一方、パラメータ #1171 taprov は、プロセス安全のための重要な調整ダイヤルとして機能します。元のタップサイクルでプログラムされた送り速度(feedrate)に乗算することで、オペレータは深穴から精密に制御された安全な速度で工具を引き抜くことが可能となり、重要な復旧時におけるネジ山のつぶれや工具の拘束(バインディング)を防ぎます。

プログラム例

以下の例は、中断されたタップを退避・クリアするために三菱電機の制御システムで使用される、構造化された復旧ルーチンを示しています。G26 コマンドを使用してタップがネジ部から安全に逆転退避された後に、Z軸を上昇させることができます。標準的なタップルーチン内でプログラムされている場合、この退避移動は選択された G98 and G99 cycle return levels(G98およびG99サイクル復帰レベル)の規則によって制御されます。

; Mitsubishi: 中断された場合に退避状態をトリガーする可能性のある標準的なタップサイクルを実行
G90 G98 G84 X11.25 Y13.28 Z-10. F200 R1. ;

; Mitsubishi: 退避復旧プログラムの内部で発行される専用のタップ退避コマンド G26 ;

; Mitsubishi: G26 タップ退避ブロックの直後に配置される安全なZ軸退避指令 G00 Z50.0 ;

空運転 (dry run)時の挙動

三菱電機の制御システムにおける空運転の環境下では、標準的なタップサイクル(G84)または退避コマンド(G26)の実行時、主軸と軸送りの完全な同期関係が強固に維持されます。オペレータが空運転スイッチをONにして復旧プログラムを実行した場合、G26 コマンドは手動の送り速度オーバーライド(feedrate override)設定を完全に無視します。CNCシステムは主軸とZ軸がタップピッチ(pitch)に基づいて厳密に協調・同期し続けるよう制御します。これにより、手動での検証や空運転の実行時であっても、同期のズレによる物理的なタップ工具の破断が確実に防止されます。

エラー解析

アラームコードトリガー条件オペレータ側の症状根本原因と解決策
M01 0057「タップ退避可能」状態信号(XCA5)がONで、かつパラメータ #1234 set06/bit3 が 0 に設定されている状態で、手動または自動の軸移動指令、あるいはグラフィックチェックを実行しようとした場合。機械の全軸が強制ロックされ、サイクルスタートがブロックされ、画面上に「Wait for tap retract」(タップ退避待ち)が表示されます。グラフィックチェックメニュー([Check continu] / [Check step])の実行が停止します。中断されたタップサイクルによって工具が被削材のネジ穴に噛み込んだままになっています。G26 タップ退避シーケンスを実行するか、PLC入力信号 YC5C を送信して工具を安全に逆転退避させてください。すでにタップが手動などで取り除かれている場合は、PLCのキャンセル信号 YCD6 をトリガーして XCA5 ステータスをクリアしてください。
P729退避復旧用プログラムにおいて、G26 タップ退避コマンドより前に何らかの移動指令(G00、G01など)が実行された場合。プログラムの実行が即座にアボート(中断)し、画面上に「Invalid cmd before tap retract」(タップ退避前の不正コマンド)アラームが発生します。復旧プログラムが三菱電機独自の厳格なシーケンス論理に違反しています。いかなるエスケープ移動や軸位置決めを行う前に、G26 コマンドを復旧用プログラムの絶対的な先頭行に配置するように修正してください。
M01 1032選択されているアクティブ主軸(spindle)が、停止時に実際にタップ加工を行っていた主軸と一致しない状態で、G26 コマンドまたは PLC信号 YC5C が実行された場合。タップ退避動作が開始されず、軸のインターロック状態が継続し、画面に「Tap retract Sp select illegal」(タップ退避主軸選択不正)が表示されます。マルチスピンドル(複数主軸)構成における主軸選択の不整合。退避動作をトリガーする前に、タップ加工を行っていた正しい主軸(spindle)をGコード(例:S1主軸選択)または手動で正しく選択してください。

実務応用ノウハウ

被削材のねじ穴の内部に超硬タップ工具が噛み込んだまま破断し、破断した工具鋼の残骸がネジ深部に埋め込まれたことで、ロット生産中のワークが一瞬にして修復不能な廃棄処分(不良品)と化す惨事は、非常停止(E-stop)や突然の遮断でパニックに陥ったオペレータが、手動ジョグ(jog)で強引にZ軸を上昇させようとした瞬間に発生する。この致命的な損壊を絶対的に回避するため、三菱電機のCNCシステムは『タップ退避可能』ステータス信号(XCA5)と、安全パラメータ #1234 set06/bit3 を『0』に設定した強固な機械軸インターロックによって物理的な軸移動を一切封じ込める。このパラメータ変更を『1』に書き換えてロックを手動バイパスすることは、主軸(spindle)と送り軸の同期保護機能をすべて剥ぎ取る結果になり、極めて危険である。安全にタップをネジ穴から回収するためには、必ず G26 コマンドを退避復旧プログラムの絶対的な先頭行に配置して実行(G26より前に移動指令を実行すると P729 アラームで自動停止)するか、PLC側からタップ退避信号 YC5C をトリガーして、パラメータ #1171 taprov に基づく安全な倍率送りで逆転同期退避を行わねばならない。また、手動で工具をすでに救出している場合には、PLC信号 YCD6 を用いて XCA5 状態を明示的にキャンセル(OFF)することが必須である。これを怠ったまま加工プロセスを再開すると、予期せぬ位置への急激な軸の飛び出しが発生し、新しい工具がワークのクランプ冶具、バイスのジョー(バイス爪)、回転するチャック、あるいはインデックスタレット(刃物台)に猛スピードで激突する凄惨な衝突事故へと直結する。このような復旧手順を厳格なチェックリストに基づいて遂行することが、非計画停止を防ぎ、量産ロット全体における部品加工の高い再現性と繰り返し精度、そして工場の信頼性を確実にする唯一の方法である。

関連コマンド

  • G26 (タップ退避実行): 中断されたタップをクリアするため、主軸(spindle)の同期逆転とZ軸の引き抜き退避動作を開始します。
  • G84 (右ねじタップサイクル): 中断された際に XCA5 タップ退避状態を自動的にアクティブにする、初期の主軸回転と送り軸の同期関係を確立します。
  • G74 (左ねじタップサイクル): フィードホールドや非常停止時に、同様のタップ退避用インターロック条件を自動登録する逆タップ(左ねじタップ)を開始します。
  • G88 (側面タップサイクル): 途中停止した際に同一の保護用PLCインターロックシーケンスを起動する、側面軸(XまたはY軸)での同期タップサイクルを実行します。
  • G00 (早送り位置決め): G26 退避コマンドによってタップがねじネジ部を完全にクリアした後にのみ、干渉平面まで安全に工具を引き上げるために使用されます。

おわりに

三菱電機のCNCに実装されているタップ退避機能および安全パラメータの管理は、単なるエラー解消の手順ではなく、量産現場における信頼性と製品の繰り返し精度を保証するための強固な防御壁である。突発的な非常停止で停止したタップを復旧する際は、パラメータ #1234 set06/bit3 を『0』のまま維持して物理的なインターロックを厳格に保護し、専用の G26 コマンドまたはPLC信号 YC5C による同期制御で正しく退避を実行することがプロセス安定の絶対条件となる。また、手動抽出を行った場合には必ず YCD6 で XCA5 ステータスをリセットし、復帰時の不意の軸の飛び出しを防ぐ体制を標準作業手順(SOP)として義務付けるべきである。加工現場での段取り段階から、安全上の不等式タイミングや主軸と送りの同期状態をチェックシートで事前検証する習慣を徹底することが、高額なサーボモーターや金型・ワークピースを保護し、不良品発生リスクを極限まで排除するための最善のロードマップである。

よくある質問

三菱のCNCで同期タップの途中に非常停止がかかった際、M01 0057アラーム(タップ退避待ち)で軸がロックされた場合の安全な復旧手順は?

このアラームは、同期タップが中断されたことを検出し、主軸と送り軸の同期を壊さないように物理移動をロックしている状態です。クリアするには、まず復旧用のサブプログラムを作成し、その先頭に G26 コマンドを記述して実行します。これにより、主軸とZ軸がピッチ同期しながら安全に逆転退避します。もし、工具を手動でワークから抜き取った場合は、PLC側から YCD6 (タップ退避可能状態キャンセル)信号を入力してロックを強制解除します。
【アクション】アラーム発生時は決して手動ジョグでZ軸を無理に引き抜こうとせず、G26を用いた自動同期退避プログラムを作成して実行してください。

量産ロットでネジの寸法精度ばらつき(繰り返し精度)を防ぐために、タップ退避に関連するどのパラメータを監視すべきか?

ロット生産での加工再現性を保証するには、安全パラメータ #1234 set06/bit3 を必ず『0』(厳格なインターロック適用)に保つことが基本ですが、さらにタップ退避速度を決定する #1171 taprov 倍率も極めて重要です。この倍率設定が高すぎると、逆転退避時の過大なサーボ負荷やバックラッシュによってネジ山を痛め、次ロットのネジゲージ測定で突然の寸法不良を引き起こす原因になります。
【アクション】段取り替え時や定期メンテナンスのチェックシートに #1234 set06/bit3 = 0 および #1171 taprov の設定値を記録し、ロット開始前に設定値の整合性を必ずダブルチェックしてください。

タップ退避復旧プログラムの実行時に P729 アラーム(タップ退避前の不正コマンド)が発生して停止する原因と対策は?

三菱電機のシステムでは、タップ退避状態において『G26が実行される前の軸移動動作(G00やG01など)』を強固に禁止するシーケンスロジックが組み込まれています。G26を実行する前に少しでも工具を逃がそうとして早送りや直線指令を記述すると、制御装置は即座に P729 アラームを発生させて軸を緊急停止させます。
【アクション】復旧プログラムを開き、G00 Z50.0 などの逃げコマンドよりも前に、必ず G26 ; コマンドが一番最初のブロック(先頭行)として登録されていることをプログラムエディタで確認し、記述順を変更してください。

まだ解決しませんか?

このトピックについて、AIアシスタントに自然言語で質問できます。検証済みの情報源に基づいており、ハルシネーションはありません。

AIアシスタントに質問する
Hakan Gündoğdu
Hakan Gündoğdu
  • CNC CARE Co-Founder (May 2025 - Present)
  • Mitsubishi Electric NC Sales & Service Section Manager (2008 - 2025)
  • Reis CNC Service Engineer (2003 - 2005)
  • Ören Kalıp CNC Mold Line Team Leader (1999 - 2002)

CNC工作機械業界のあらゆる分野で25年以上の経験を持ち、ブランドに依存しないコンサルティング、エンジニアリング、純正部品サービスを提供するCNC CAREの共同創業者として活動を続けています。

関連記事

このトピックに関する他の記事

G73とG83ペックドリルサイクル:深穴ミリング完全ガイド

Fanuc、Siemens、MitsubishiにおけるG73高速ペックおよびG83深穴ドリルサイクルを徹底解説。ロット間寸法ばらつきを防ぐパラメータ5114設定、アラームPS0045原因と対策、再現性の高い加工ノウハウを網羅。

MitsubishiFanucProgramming

G50.2とG51.2ポリゴン加工のプログラミングと安全な同期パラメータ設定

Fanuc、Siemens、MitsubishiのCNC旋盤におけるG50.2・G51.2ポリゴン加工のプログラミング解説。同期パラメータ(7610、#1501)の設定、クランプ診断、アラーム回避手順など、量産時の寸法ばらつきを防ぎ繰り返し精度を高めるノウハウを徹底網羅。

SiemensMitsubishiProgramming

G31スキップ機能とCNCプローブ測定プログラム:ファナック・シーメンス・三菱

ファナック、シーメンス、三菱のG31スキップ機能とプローブ測定プログラムの構築手順。クラッシュを防ぐG40設定やサーボ遅れパラメータ(SEA/SEB)の補正により、量産後半のロット間での寸法ばらつきを防ぎ、繰り返し精度と加工再現性を劇的に向上させる実務ノウハウを徹底解説。

SiemensMitsubishiProgramming

G07.1シリンダ補間のプログラミング方法とアラーム対策

Fanuc、Siemens、三菱CNCにおけるG07.1シリンダ補間の完全ガイド。軸マッピングパラメータの設定方法、G00指令によるPS0176やP481アラームの原因と解決策、干渉を防止する安全なプログラミング手法を徹底解説。

SiemensMitsubishiProgramming