「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。
ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ
私は主にPLCソフト開発に携わっている中堅社員です。
最近対応させていただいた仕事で、三菱電機IQ-Rシリーズの「MESインターフェースユニット(RD81MES96N)」(以下MES IFユニット)を使用して、PostgreSQLにDBアクセスする案件がありました。
本稿では、その際のMES IFユニット使用方法について紹介したいと思います。
※ソフテックだより第43号「PLCの高機能化−PLCとデータベースの接続−」でも、PLCとDBの接続についての記載がございますので、そちらもご参考にしていただければ幸いです。
PLCはフィールドネットワークで設備の各装置と通信し、装置の製造実績を収集、PostgreSQLへ登録します。
MES IFユニットは、制御システム(PLC)と、ITシステム(PostgreSQL)を連携する役割を担います。
図1. システム構成
MES IFユニットとPostgreSQLはEthernetで接続されます。
MES IFユニットからのDBアクセス方式は『直接DB接続』を採用しました。
(DBアクセス方式には他に『サービス経由接続』があり、『サービス経由接続』ではDBサーバーに接続サービスソフトをインストール必要があったため、システムシンプル化のために『直接DB接続』を採用しました。)
MES IFユニットは、「情報連携機能設定ツール」という専用設定ツールからパラメータ設定をするだけで、プログラムレスでDBアクセス(SQLコマンド発行)が可能です。
当該案件では、パラメータ設定する上での重要ポイントとして、
・500ms周期(設備タクト)で、全装置の製造実績をDB登録する
・MES IFユニット−PostgreSQL間に通信異常が発生した場合でも、抜け無くDB登録する
がありました。
上記を実現するために、動作検証を行い、その結果採用したパラメータ設定などについて、以下に記載していきます。
パラメータ設定の前に、まずはファームウェアをアップデートしました。
MES IFユニット「RD81MES96N」は、発売開始(2019年10月)してからまだ日が経っておりませんので、重要度の高いファームウェアアップデートが頻繁に行われています。
DBアクセストリガ条件として、「値変化」「定周期」「定刻」等の設定が用意されています。
その中から「値変化」を採用しました。
高速化のため、装置から製造実績を受け取ったタイミングで、ラダープログラムでトリガデバイスをインクリメントし、すぐにMES IFユニットから登録SQLコマンドを発行するようにしました。
図2. トリガ条件
トリガデバイスの読出しタイミングの設定です。
「高速アクセス(毎スキャン)」「高速アクセス(間隔指定)」「汎用アクセス(間隔指定)」が用意されています。
その中から「高速アクセス(毎スキャン)」を採用しました。
高速化のため、毎スキャントリガデバイスを読出して判定させるようにしました。
図3. トリガ判定時データ読出し
トリガ条件成立後のDBアクセス処理の設定です。
「挿入(INSERT)」「抽出(SELECT)」「更新(UPDATE)」「削除(DELETE)」「複数挿入(Multi-INSERT)」「複数抽出(Multi-SELECT)」「処理実行(STORED PROCEDURE)」といったDBアクセス処理、および内部タグの演算処理、を最大20個まで登録できます。
当該案件では「挿入(INSERT)」1つのみ登録しました。
DBテーブル管理のため別のアクションを加えることも考えましたが、高速性を重視し、PLCの役割をシンプルにしました。
図4. メイン処理
※なお、接続先がPostgreSQLの場合、MES IFユニットはストアドプロシージャでのDBアクセスに対応していません。
接続先がOracle、SQL Serverの場合のみ対応しています。
トリガ実行中に、同一トリガが成立した場合、そのトリガ(SQLコマンド)を破棄せずに、MES IFユニット内部メモリにバッファリングする機能です。
「有効」としました。
動作検証で常時500ms周期トリガ成立させたときに、稀にトリガバッファリングすることが確認されたため、有効としました。
図5. トリガバッファリング
ネットワーク切断やDBサーバーがダウンしたとき、トリガ成立したが送信できないSQLコマンドをSDメモリカードにバッファリングする機能です。
「使用する」と設定しました。
再送方法は「自動で再送する」のチェックを外しました。
動作検証で、プライマリーキー違反が発生するSQLコマンドをバッファリングさせたとき、通信復旧しても自動再送されなかったためです。
そのため、手動(ラダープログラム)で再送リクエストタグをONして再送する方法にしました。
復旧時の動作は「即時送信(バッファリング済みのデータに追加しない)」「バッファリング済みのデータに追加」が用意されており、その中から「即時送信(バッファリング済みのデータに追加しない)」を採用しました。
動作検証で常時500ms周期トリガ成立させたときに、DB登録抜けが発生したためです。
その原因は、以下の青字であると推測しています。
「バッファリング済みのデータに追加」設定では、通信復旧後に成立したトリガ(SQLコマンド)は、(前項で説明した)トリガバッファにバッファリングされ、そのあとトリガバッファからDBバッファに移動される。
500ms周期でトリガ成立だと、『トリガバッファに溜まっていく速度 >トリガバッファからDBバッファに移動する速度』となり、トリガバッファがオーバーフローを起こしてSQL文が破棄されてしまったため。
図6. DBバッファリング
いかがでしたでしょうか。
今回は、私が対応した案件を基に、三菱電機IQ-RシリーズのMES IFユニット「RD81MES96N」の使用方法を紹介させていただきました。
近年、FAの現場においては、設備の高性能化に伴うタクト短縮、トレーサビリティの強化、コスト削減、が求められ、PLCから直接DBシステムへアクセスすることは有効な選択肢の1つであることは間違いありません。
本稿が少しでも皆様のお役に立てれば幸いです。
(Y.S.)
関連ページへのリンク
関連するソフテックだより