「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。
ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ
私はPLCソフトウェア開発を担当しております。
おかげさまで今まで色々な分野のPLCソフトウェアを担当させていただきましたが、直近の案件で、7万点近くの数値データを取り扱うことがありました。
そこで初心に帰るという意味もこめまして、今回の技術レポートでは、PLCでの数値データ取り扱いについて、実践的な形でのラダープログラムを紹介したいと思います。
なお、一口に数値データといっても、整数、実数、BCD、バイナリなど様々な形式がありますが、今回は整数データを取り扱ったラダープログラムを紹介します。
まず、ラダープログラムで取り扱える数値データについて簡単に触れておきます。
ラダープログラムで取り扱える数値データは、PLCメーカー/機種によって異なります。
以下に、主要PLCメーカー/機種で取り扱える数値データ(整数データ/実数データ)をまとめてみます。
なお、機種は現状の最新機種を対象としています。
メーカー | 機種 | 整数データ | 実数データ |
---|---|---|---|
三菱電機 | Qシリーズ | 2バイト符号有 4バイト符号有 |
単精度浮動小数点(4バイト) 倍精度浮動小数点(8バイト) |
横河電機 | FA−M3シリーズ | 2バイト符号有 4バイト符号有 8バイト符号有 |
単精度浮動小数点(4バイト) 倍精度浮動小数点(8バイト) |
オムロン | CJシリーズ | 2バイト符号有 2バイト符号無 4バイト符号有 4バイト符号無 |
単精度浮動小数点(4バイト) 倍精度浮動小数点(8バイト) |
キーエンス | KV-5500/5000/3000シリーズ | 2バイト符号有 2バイト符号無 4バイト符号有 4バイト符号無 |
単精度浮動小数点(4バイト) 倍精度浮動小数点(8バイト) |
表1. 主要PLCメーカー/機種で取り扱える数値データ
ラダープログラムに限りませんが、数値データを扱う上で、データ型は非常に重要です。データ型を間違えて演算を行うと正しい結果が得られず、重大なトラブルに繋がる可能性もあります。
ソフテックでは、ラダープログラムで数値データを扱うとき、デバイスのコメントに、必ずデータ型を記載します。
データ型の記載方法ですが、演算命令に準拠すると分かりやすいと思います。
ラダープログラムの演算命令では、扱うデータ型をアルファベット1文字で表現することが一般的なので、そのアルファベットに使用する、というものです。
「アルファベット1文字+数字」で記載することができるので、デバイスコメントの文字数制限を圧迫することもありません
図1に横河電機製FA−M3を使用した場合のデバイスコメントを示します。
図1. デバイスコメント例
図1において、各デバイスで扱う数値データは、以下となります。
図2のモデルは、温度コントローラから通知される温度データについて、PLCが最大/最小/平均温度を求め、パソコンに通知する、というものです。
ここでは、最大/最小/平均温度を求めるラダープログラムを作成してみます。
なおPLCは横河電機製FA-M3シリーズとします。
図2. モデル1
モデル1のデバイスコメントを図3に示します。
D111〜に演算過程で使用するワークデバイスをマッピングしています。
図3. モデル1 デバイスコメント
モデル1の最大温度、最小温度を求めるラダープログラムを図4に示します。
図4. モデル1 最大温度、最小温度
モデル1の平均温度を求めるラダープログラムを図5に示します。
温度1と温度2を加算して合計温度を算出し、合計温度を2で除算して平均温度を求めています。
合計温度を算出するときは、オーバーフロー/アンダーフローを防ぐため、合計温度を4バイト整数で算出しています。
数値データの演算を行うときは、オーバーフロー/アンダーフローが発生しないように常に気を配る必要があります。
図5. モデル1 平均温度
図6のモデルについて、最大/最小/平均温度を求めるラダープログラムを作成してみます。
モデル1との相違点は、I/Fのデータ型が符合無整数という点です。
図6. モデル2
モデル2のデバイスコメントを図7に示します。
D211〜に演算過程で使用するワークデバイスをマッピングしています。
図7. モデル2 デバイスコメント
モデル2では、まず温度1、温度2の符号無整数を4バイト整数に拡張します。
そのラダープログラムを図8に示します。
横河電機製FA-M3シリーズは符号無整数をサポートしていないため、符号無整数をデータ拡張して扱う必要があります。
今回は、2バイト符号無整数を、4バイト(符号有)整数に拡張して扱います。
図8. モデル2 符号無整数拡張
モデル2の最大温度、最小温度を求めるラダープログラムを図9に示します。
入力温度と最大/最小温度の比較命令では、拡張した4バイト整数を使用します。
図9. モデル2 最大温度、最小温度
モデル2の平均温度を求めるラダープログラムを図10に示します。
温度1と温度2を加算して合計温度を算出し、合計温度を2で除算して平均温度を求めています。
図10. モデル2 平均温度
オムロン製CJシリーズ、キーエンスKVシリーズは符号無整数をサポートしているため、横河電機製FA-M3シリーズのように2バイト符号無整数を、4バイト整数に拡張して扱う必要はありません。
以下に、キーエンスKVシリーズでのプログラム(スクリプト記述形式)を示します。
デバイスアドレスの後に記述されているものは、サフィックスと呼ばれるものでデータ型を表します。“.U”は2バイト符号無整数です。
' ================================================================================
' モデル2 最大/最小/平均温度
' ================================================================================
'------------------------------------------
' 最大温度を求める
D00216.U = 0 ' 最大温度をデータ範囲最小の0で初期化
IF (D00201.U >= D00216.U) THEN
D00216.U = D00201.U ' 最大温度を温度01とする
END IF
IF (D00202.U >= D00216.U) THEN
D00216.U = D00202.U ' 最大温度を温度02とする
END IF
D00204.U = D00216.U ' パソコンIFデバイスに、最大温度を格納
'------------------------------------------
' 最小温度を求める
D00218.U = 65535 ' 最小温度をデータ範囲最大の65535で初期化
IF (D00201.U <= D00218.U) THEN
D00218.U = D00201.U ' 最小温度を温度01とする
END IF
IF (D00202.U <= D00218.U) THEN
D00218.U = D00202.U ' 最小温度を温度02とする
END IF
D00205.U = D00218.U ' パソコンIFデバイスに、最小温度を格納
'------------------------------------------
' 平均温度を求める
D00206.U = (D00201.U + D00202.U) / 2 ' 温度01と温度02を足して2で割る
いかがでしたでしょうか?
今回は数値データの中でも、整数データにスポットをあててラダープログラムを紹介させていただきましたが、別の数値データ(実数、BCD等)についても書いてみたいと思っております。
本稿が少しでも皆様のお役に立てていただければ幸いです。
(Y.S.)
関連ページへのリンク
関連するソフテックだより