はじめに
このプログラムドキュメントは10年以上前に某基板搬送装置の一部バッファー装置として設計したものです。ドキュメントは受注先の要求でプログラムをわかりやすく説明することを目的に製作しました。今回アップしたのは,FIFOやステッププログラムの手法を流用してほしいと考えております。ちなみに完成後納入した先の装置1式は試運転はしたが生産はほぼせずになくなってしまったので、ほかの装置で少しでも運用していただければ思います。
本プログラムのプログラミング手法と構成について
概要説明
PLC国際標準規格IEC61131-3(=JIS B3503)の基本である「IL,ST,LD,FBDの4言語+SFC1要素」「POU(プログラム構成単位、タスクによる独立実行」を考慮し、弊社で標準化を進めるプログラム手法を取り入れて、設計をしております。
その基本となる動作シーケンスには、単なるステップ(工程歩進)でなく、条件判断処理で自由度が高く、メンテナンス性の高いプログラム手法を用いております。
本ドキュメントは、そのステッププログラムを中心に説明を致します。
動作状態の説明動画
プログラム構成について
プログラム-ブロックについて
プログラム名称 内容
P00 主回路 自装置モード切替、GOT表示、パスワード他
P01 基板情報処理1 基板在荷、禁止情報設定
P02 基板情報処理2 基板良品、NG情報
P03 格納先FIFO検索処理 基板格納先FIFO処理
P04 基板廃却処理 基板廃却処理
P09 異常回路 異常処理
P10 取り出しデータ処理 基板時刻情報、基板取出検索処理
P11 ステータス変更 基板発生処理
P20 位置データ処理 ラックティーチング情報、バッファ速度情報
P21 原点復帰処理 原点復帰シーケンス処理
P22 手動ステップ 手動運転シーケンス処理
P23 手動運転 メンテ運転命令
P24 基板受入動作ステップ 基板受入チャックシーケンス処理
P25 基板払出動作ステップ 基板払出チャックシーケンス処理
P27 自動運転ステップ 自動運転シーケンス処理
P29 トラッキング処理 トラッキング処理
P30 SM_ST10[走行] 走行サーボ運転処理
P31 SM_ST12[昇降] 昇降サーボ運転処理
P32 SM_ST14[チャック1] チャック1サーボ運転処理
P33 SM_ST16[チャック2] チャック2サーボ運転処理
P40 自動動作ログ 自動運転時搬送記録処理
P44 クロスCV44制御 クロスコンベヤ44手動運転処理
P50 34モード選択 搬送ライン3/4との運転モード
P90 在荷情報テーブル 上位通信在荷情報テーブル
P99 IE/NetH通信 自装置IE/NetH変換処理
プログラム内容の詳細コメントについて
プログラムの詳細内容については、P(ポインタ)にコメントを記載しています。
一部Call命令としても使用しています。
ポインタNo. | 内容 |
P0 | デバッグ用ダミー回路 |
P2 | 制御電源・運転準備入切回路 |
P4 | モード切替・条件回路 |
P5 | 各機器の原点及び原点復帰指令回路 |
P6 | 装置全体自動運転起動・停止回路 |
P7 | タッチパネル初期設定及び画面切替回路 |
P8 | 接点増幅・接点置換回路 |
P9 | 各ブロック毎自動運転回路及び手動回路 |
P10 | 異常検出回路 |
P11 | 表示・ブザー・パトライト |
P12 | 生産実績・上位通信 |
P13 | ワークシフト(PLC内部ワークメモリ)回路 |
P90 | 基板滞留状態確認 |
P100 | データ初期化、内部ファイルレジスタ一括初期化 |
P130 | 基板在荷情報 |
P131 | ラック内基板情報*** |
P132 | ラック内段情報作成処理 |
P133 | ラック段レシピ情報格納(良品or NG) |
P134 | ラック使用状況(在荷/禁止) |
P170 | 基板情報編集処理*** |
P171 | 基板情報編集 |
P172 | 基板情報削除 |
P173 | 基板情報発生 |
P174 | 基板情報処理位置 |
P175 | 基板情報削除実行処理 |
P176 | 基板情報発生実行処理 |
P200 | 廃却基板処理*** |
P201 | 廃却基板情報書込 |
P202 | 廃却基板処理実行 |
P203 | 全廃却基板処理 |
P204 | 廃却基板情報Word情報処理 |
P205 | 廃却基板処理条件処理 |
P208 | 廃却基板Swap実行処理(基板情報で廃却データを戻す処理) |
P210 | 全廃却基板処理 |
P220 | 廃却基板データ復元処理 |
P221 | 廃却基板データ復元処理(上書) |
P260 | ***受入スロットFIFO処理*** |
P261 | FIFOデータエリア初期化[良品基板] |
P262 | FIFOデータエリア初期化[NG基板] |
P270 | FIFOデータ書込処理[良品基板] |
P271 | FIFOデータ書込処理[NG基板] |
P275 | 受入スロット検索中処理 |
P278 | FIFO呼出[良品基板スロット] |
P279 | FIFO呼出[NG基板スロット] |
P280 | 時刻読出 |
P281 | 時刻変換処理 |
P282 | 変換時刻 書込処理 |
P290 | 取出スロット検索処理 |
P300 | 転送処理(日付データ検索処理用) |
P301 | カセットステータス変更 カセット1 |
P302 | カセットステータス変更 カセット2 |
P303 | カセットステータス変更 カセット3 |
P304 | カセットステータス変更 カセット4 |
P305 | カセットステータス変更 CV自動バッファ |
P310 | 基板ステータス呼出 |
P311 | 基板ステータスBit設定上位ワード |
P312 | 基板ステータスBit設定下位ワード |
P313 | 基板ステータス基板種別設定 |
P314 | 基板ステータス対象機種設定 |
P315 | 基板ステータス定義(良品/NG)設定 |
P316 | 基板ステータス予備1設定 |
P317 | 基板ステータス予備2設定 |
P318 | 基板ステータス設定WOR処理 |
P319 | 基板ステータス設定確定処理 |
P320 | 基板ステータス設定キャンセル処理 |
P321 | 基板ステータスLP表示 上位ワード |
P322 | 基板ステータスLP表示 下位ワード |
P323 | 基板ステータス情報書込処理 |
P324 | 自動付番処理 |
P350 | 原点復帰[一括原点] |
P351 | チャック状態 |
P352 | はみ出し検知 |
P353 | 基板在荷 |
P360 | 原点復帰[初期状態] |
P361 | 原点復帰処理 |
P362 | 原点復帰監視時間 |
P363 | 原点復帰 走行指示 |
P364 | 原点復帰 昇降指示 |
P365 | 原点復帰 チャック2後退指示 |
P366 | 原点復帰 チャック1後退指示 |
P371 | 手動受取LP処理 |
P372 | 手動払出LP処理 |
P373 | ステップ運転[手動] |
P374 | 連続運転[手動] |
P375 | 在荷チェック[手動] |
P379 | 在荷チェック[手動] |
P380 | *手動[ステップ/連続]* |
P381 | 手動ベース画面変更→ローダーモード |
P382 | 手動実行中信号 |
P383 | 手動画面表示動作コメント |
P390 | 手動位置データ書込処理 |
P391 | 手動昇降位置一致確認処理 |
P392 | 手動昇降移動指示 |
P394 | 手動走行位置一致確認 |
P395 | 手動走行移動指示 |
P396 | 手動チャック2移動指示 |
P397 | 手動チャック1移動指示 |
P400 | 手動運転*** |
P401 | 手動走行昇降移動PB処理 |
P403 | 手動走行移動処理 |
P404 | 手動移動実行処理PB LP処理 |
P405 | 画面インターロック |
P406 | 走行ブレーキ手動解放 |
P407 | チャック位置移動メンテナンス画面 |
P408 | チャック_メンテ位置移動指示 |
P409 | 画面インターロックモーター駆動中 |
P410 | 基板受入動作STEP** |
P411 | 昇降中点移動処理[受入STEP] |
P412 | チャック1移動動作指示[受入STEP] |
P413 | チャック2移動動作指示[受入STEP] |
P419 | 昇降中点移動指示[受入] |
P420 | 基板受入STEP処理[受入STEP] |
P422 | チャック1一時停止処理 |
P428 | 基板受入監視時間 |
P429 | 基板受入完了処理 |
P430 | チャック2移動mm判断処理=チャック1連動 |
P440 | 基板払出動作STEP*** |
P441 | 昇降中点移動処理[払出STEP] |
P442 | チャック2移動動作指示[払出STEP] |
P443 | チャック1移動動作指示[払出STEP] |
P450 | 払出STEP処理 |
P458 | 基板払出タイムオーバ監視 |
P459 | 基板払出完了処理 |
P460 | 自動運転STEP**** |
P461 | 自動モード昇降位置確認 |
P462 | 昇降位置移動処理[自動モード] |
P463 | 走行移動動作処理[自動モード] |
P464 | チャック1移動動作指示[自動モード] |
P465 | チャック2移動動作指示[自動モード] |
P470 | 自動運転STEP初期 |
P471 | 自動運転STEP動作判断 |
P472 | 自動運転在荷判断処理 |
P473 | 自動運転モード判断処理 |
P474 | 自動運転ラック収納処理 |
P475 | 自動運転CV44へ払出処理 |
P476 | 自動運転チャック移動処理 |
P477 | チャック待機位置移動後判断処理在荷無 |
P478 | 自動運転CV44より受取処理 |
P479 | 自動運転 ラックから取出処理 |
P480 | 自動運転CV44 移動データ作成処理 |
P481 | 自動運転ラック点行先データ処理[良品] |
P482 | 自動運転ラック点行先データ処理[NG] |
P483 | 在荷チェック処理 |
P484 | ラックから受入データ処理 |
P490 | トラッギング処理 |
P491 | 基板情報トラッキング受取完了 |
P492 | 基板情報トラッキング払出完了 |
P500 | サーボ走行制御モジュール |
P501 | サーボ運転可能 |
P502 | サーボアラーム発生処理 |
P503 | サーボJOG運転指令 |
P504 | 原点位置設定処理 |
P505 | 原点位置データ書込処理 |
P506 | JOG速度データ書込処理 |
P507 | JOG運転 |
P508 | 原点指示 |
P509 | 位置指令処理 |
P510 | アラームリセット[走行サーボ] |
P511 | サーボON[走行サーボ] |
P512 | 自動・手動選択[走行サーボ] |
P513 | 正転始動[走行サーボ] |
P514 | 逆転始動[走行サーボ] |
P515 | 位置・速度選択方式[走行サーボ] |
P516 | ポジションテーブル選択クリア[走行サーボ] |
P517 | モニタ処理[走行サーボ] |
P518 | サーボブレーキ回路[走行サーボ] |
P519 | ストロークエンド[走行サーボ] |
P520 | サーボ走行制御モジュール |
P521 | サーボ運転可能 |
P522 | サーボアラーム発生処理 |
P523 | サーボJOG運転指令 |
P524 | 原点位置設定処理 |
P525 | 原点位置データ書込処理 |
P526 | JOG速度データ書込処理 |
P527 | JOG運転 |
P528 | 原点指示 |
P529 | 位置指令処理 |
P530 | アラームリセット[昇降サーボ] |
P531 | サーボON[昇降サーボ] |
P532 | 自動・手動選択[昇降サーボ] |
P533 | 正転始動[昇降サーボ] |
P534 | 逆転始動[昇降サーボ] |
P535 | 位置・速度選択方式[昇降サーボ] |
P536 | ポジションテーブル選択クリア[昇降サーボ] |
P537 | モニタ処理[昇降サーボ] |
P538 | サーボブレーキ回路[昇降サーボ] |
P539 | ストロークエンド[昇降サーボ] |
P540 | サーボチャック1制御モジュール |
P541 | サーボ運転可能 |
P542 | サーボアラーム発生処理 |
P543 | サーボJOG運転指令 |
P544 | 原点位置設定処理 |
P545 | 原点位置データ書込処理 |
P546 | JOG速度データ書込処理 |
P547 | JOG運転[チャック1] |
P548 | サーボ一時停止後手動自動切替 |
P549 | 位置指令処理 |
P550 | アラームリセット[C1サーボ] |
P551 | サーボON[C1サーボ] |
P552 | 自動・手動選択[C1サーボ] |
P553 | 正転始動[C1サーボ] |
P554 | 逆転始動[C1サーボ] |
P555 | 位置・速度選択方式[C1サーボ] |
P556 | ポジションテーブル選択クリア[C1サーボ] |
P557 | モニタ処理[C1サーボ] |
P558 | サーボブレーキ回路[C1サーボ] |
P559 | ストロークエンド[C1サーボ] |
P560 | サーボチャック2制御モジュール |
P561 | サーボ運転可能 |
P562 | サーボアラーム発生処理 |
P563 | サーボJOG運転指令 |
P564 | 原点位置設定処理 |
P565 | 原点位置データ書込処理 |
P566 | JOG速度データ書込処理 |
P567 | JOG運転[チャック2] |
P568 | 原点指示[チャック2] |
P569 | 位置指令処理 |
P570 | アラームリセット[C2サーボ] |
P571 | サーボON[C2サーボ] |
P572 | 自動・手動選択[C2サーボ] |
P573 | 正転始動[C2サーボ] |
P574 | 逆転始動[C2サーボ] |
P575 | 位置・速度選択方式[C2サーボ] |
P576 | ポジションテーブル選択クリア[C2サーボ] |
P577 | plsモニタ処理[C2サーボ] |
P578 | サーボブレーキ回路[C2サーボ] |
P579 | ストロークエンド[C2サーボ] |
P600 | ティーチング計算書込 |
P601 | ティ-チングデータ書込処理 |
P602 | 昇降補正値書込 |
P610 | ローダティーチングデータ処理 |
P611 | カセットスロットNo.変換処理1-200(INDEX) |
P612 | CV44No.変換処理K0(INDEX) |
P613 | 表示ティーチングデータ読込 |
P620 | カセット/CV44選択切替 |
P621 | ティーチングデータ書込処理 |
P622 | 現在値データ書込処理 |
P630 | チャック1ティ-チングデータ書込処理 |
P631 | チャック2ティ-チングデータ書込処理 |
P632 | 昇降補正位置制限 |
P633 | 昇降補正位置データ書込処理 |
P635 | 走行速度初期値書込 |
P636 | 走行速度演算処理(回転数) |
P638 | 昇降速度初期値書込 |
P639 | 昇降速度演算処理(回転数) |
P641 | チャック1速度初期値書込 |
P642 | チャック1速度演算処理(回転数) |
P644 | チャック2速度初期値書込 |
P645 | チャック2速度演算処理(回転数) |
P700 | 入出庫記録 |
P710 | 3/4ライン通信処理**** |
P711 | 運転モード切替処理[運転モード] |
P712 | 運転モード切替処理[ストックモード] |
P713 | 運転モード切替処理[排出モード] |
P720 | CV44-自動バッファ[3/4通信] |
P730 | 集中管理 時刻変換処理 [年月] |
P731 | 集中管理 時刻変換処理 [日時] |
P732 | 集中管理 時刻変換処理[分秒曜日] |
P733 | 時刻合わせ処理 |
P734 | 時刻書込み処理 |
P739 | PLC時刻合 Net/H報告用 |
P740 | 在荷テーブル作成処理 |
- 補足事項
①.チャック1は下の駆動、チャック2は、上の駆動となります。
②.PBは押しボタン、LPはランプを意味します。
③.C1は、チャック1、C2はチャック2を意味します。
タスクについて(ステップシーケンス処理部)
原点復帰、手動運転、自動運転、受取処理(チャック動作)、払出処理(チャック動作)が主な動作です。
タスク構成について
①原点復帰処理(原点復帰時のみタスク)
②自動運転(自動運転中の処理)
③手動運転(手動動作の処理)
④受取処理(チャック動作):自動運転及び手動運転時にチャック動作(受取)要求で実行します。また、修理中の場合(復旧時のみ)、単独で実行される処理です。
⑤払出処理(チャック動作):自動運転及び手動運転時にチャック動作(払出)要求で実行します。また、処理中の場合(復旧時のみ)、単独で実行される処理です。
タスクの関連は、下記の通りです。
プログラムステップについて
概要
SFCと同じ機能をラダーで構成させることを目的としたプログラムです。
設定について
ワードデバイスに数値、連続した必要数のビットエリアを使用します。
ラダーへの記述方法
初期状態は、ワードデバイスで0とします。
ワードデバイスの数値に対応するアウトコイルを設定します。
ワードデバイスをデコードした場合のビットをアウトコイルとします。(基本)
*注意事項 ワードデバイスをすべて記述した後に、ビットのアウトコイル記述をします。
初期状態について
初期ステップは、処理中断、電源立ち上がり、キャンセル状態等で0に戻します。
ステップの進歩方法
ステップ、リセット条件等で初期状態になります。
(例:自動運転STEP(D2310=0)の時、M700=On)
PB(押しボタン)や起動条件(自動運転、運転可能等)で、まずステップを1として、ステップが起動するようにします。
(例:自動運転STEP(D2310=1)の時、M701=On)
- 注意点:リセット条件、起動条件が類似している場合、ステップが可逆する可能性があるので、ステップをMOVでなくMOVPとしたり、起動条件の立ち上がりを条件として加えるよう考慮します。
ステップが運転状態となってからは、装置の状態や実行条件分岐により、移行するステップをブロックごとに考慮して、遷移させます。
(例:自動運転STEP(D2310<=11)ローダに在荷有の場合の処理、自動運転STEP(D2310<=31)ローダに在荷無の場合の処理)
特別な条件や、ループ処理が必要な場合には、条件判断処理まで戻す記述も可能です。
(例:自動運転STEPで、3/4ライン運転モードの場合、ローダは、ラインからの要求(回収、投入)がない場合でも、処理は先行して進みます。途中で回収、投入信号が切り替わった場合、投入処理から、回収処理に切り替えすることが必要になります。
その場合には、先のローダの在荷状態での判断処理までステップを戻すことになります。)
ステップの条件分岐方法
自動運転処理は、M700(デバイス値0)から始まります。P472は、自動運転条件で運転可能となり、M710(デバイス値10)がオンした状態で、自動運転の判断処理を開始します。
P472 自動運転在荷情報処理 内容について
M710(デバイス値10)で自動運転の判断処理をします。
M102サイクル停止信号があるとこの状態で停止します。
M349ローダの在荷状態で判断をして有の場合、自動運転STEPを11(自動運転で在荷有の条件で、ラインとのモードを判断する処理)へ移行します。
無の場合、自動運転STEPを31(自動運転で、チャック2を受け取り待機位置へ移動)へ移行します。
また、自動運転STEP38(基板受取処理)になった場合で、回収要求がなく投入要求になった場合、自動運転の判断処理に戻ってきます。
P473 自動運転モード判断処理 内容について
M711(デバイス値11)でモード確認処理になります。
M102サイクル停止信号があるとこの状態で停止します。
M349ローダの在荷状態である確認をします。
3/4ラインとの運転モード条件と3/4ラインからの要求信号判断で自動運転STEP12(基板収納先検索)または、自動運転STEP21(CV44への払出処理)へ移行します。
3/4との運転モードで排出モードの場合は、自動運転STEP21(CV44への払出処理)へ、ストックモードの場合は、自動運転STEP12(基板収納先検索)へ移行します。
このような判断ステップをすることで、複雑な条件処理も処理可能となります。
実行処理と戻り値の考え方について
ステップ中に判断処理、または演算処理が必要な場合は、サブルーチン呼び出しのような形で、実行処理ビットをOnします。
実行処理ビットで判断または、演算された処理結果とその戻り値として、必要な戻り値(ビットまたは、ワード)を処理中ステップに返します。
このような処理をすることで、本体のステップをより簡潔にプログラムすることになります。
動作の記録に関して
このステップ処理では、必ずアウトビットがONしているまたは、フローチャートのようにフロー以外へは、突然意向しないので、HMI(GOT等)のアラーム記録を利用してビットの遷移をロギングすることが可能になります。
このため、メンテナンス時にどの処理がどこでどうなっていたのかが明確に判断できます。
CFカードへ保存が可能なので、異常発生時にステップの状況解析ができます。
フローチャート
参考に、原点復帰処理のシーケンス処理をフローチャート示します。
データ管理方法について
格納ラック段数処理について
D5500から201WORD分が良品基板の収納場所をFIFOで書き込みます。
D5710に良品基板収納ラックを読出します。
D5750から201WORD分がNG基板の収納場所をFIFOで書き込みます。
D5960にNG基板収納ラックを読出します。
①.自動運転処理ステップで、基板が自動バッファにあり、または
基板を受け取ります。
②.良品基板かNG基板かを判断。
③.良品基板の場合、D5500から201WORDを0クリアし、FIFOで在荷無でラック番号を転送します。
③-1.NG基板の場合、D5750から201WORDを0クリアし、FIFOで在荷無でラック番号を転送します。
④.③または、③-1が完了した後、FIFOの情報を読出します。
⑤.収納ラックがある場合は、収納先有と収納先番号を返します。ない場合は、収納先無となり、エラーとなります。
取り出しラック段数検索処理について
収納基板の時刻変換処理内容は、下記の表のようにします。
* R4000から32bitで時間情報をラックに入庫した時間情報として書き込みをします。
禁止棚または、NG収納ラックにも入庫時間があります。
FIFO時の処理方法について
①.自動運転処理STEPで、基板払い出しラック検索実行処理がされます。
②.NGまたは、禁止棚の条件でなく、基板が存在する場合、R4500へ時間情報を転送していきます。NGまたは、禁止棚の場合、H7FFFFFFFをデータに書き込みます。
③.R4500からの中で最小値=入庫日付の最も古いラック番号を検索します。
④.検索ラックがすべてH7FFFFFFFの場合は、払い出し無で戻り値を返します。上記でない場合、ラック番号と処理基板有を返します。
⑤.処理基板を払いだし動作を実行します。最小値の場所を取出しのラック番号として返します。
ティーチングデータについて
下記のようなファイルレジスタにティーチングデータ 及びサーボの速度指令データを格納しています。
基板情報処理エリアについて
基板情報は、下記のようなファイルレジスタに格納します。
搬送装置内のNet/H運用について
上位通信エリアLW,LBと自装置内LW.LBについては、重ならない範囲で設定をします。
自動バッファがCC-LINK IEの上位通信の窓口となります。
各ライン装置のプログラムでは、CC-LINK IEの上位通信と同じアドレスを使用するために、自動バッファ側で、IEとNet/Hでの変換処理をしています。
補足
装置レイアウトについて
チャック動作説明
基板の受渡の動作は、下記の通りです。
実機の写真
参考プログラムのダウンロード
自動バッファープログラムドキュメント
※GX Develpoerのファイルをアップしてるご指摘があり、GXWorks2ファイルに変換して再アップしました。
変換処理はこちらを参考に
コメント
いじわるな意見です
あまり参考にならないのでは
どうせ標準化をするのなら、構造化プログラムを使用してはどうでしょう
一番気になるのは、ステップ処理は即値で切り替えていますがその処理が見えにくい事です
即値を入れた所で、それがどの処理を行なうか不明な事です
ノートなりステートを書き込みすればすこしは良くなりますが、その分手間で、間違いの元かなと思います
サンプルにもそのような記述がないのは残念でした
ひさしぶりにGXでしたの、今の時代にGXと思いました
さすがに、新規装置でGXを使用することはないでしょう、せめてWorks2で記述されたものを出された方が、別りやすいのではないでしょうか
標準化はたいへんだと思います、100人いれば100通りのプログラムできます
回路の標準化ではなく、なるべくドキュメントをプログラムの中に入れて(コメント、ノートステート等)、さらに詳しいドキュメントを整備するほうが近道かと思います
コメントありがとうございます。
ご指摘の通り、人それぞれの部分もあるかと思います。
その一つの意見として後進のものに提示することも必要かと存じます。
アップしたファイルですが、GX Developerでの作成したのをそのままアップしてしまいました。
参考に変換の記事です。
https://gorism1010.com/?p=225
Works2に変換して再アップしました。
今後ともコメントがありましたら、お気軽にどうぞよろしくお願いいたします。