「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。
ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ
私は入社18年目の社員です。入社後からPLC(Programmale Logic Controller)及びFAVIEWの開発案件に携わっています。
ソフテックだより第189号の技術レポートで「PLCプログラムでの数値データ取り扱い」をテーマに、整数データについての実践的な形でのラダープログラムを紹介しました。
今回はその第2弾として、実数データを取り扱ったラダーブログラムを紹介します。
前回のおさらいとして、以下に主要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に示します。
D311〜に演算過程で使用するワークデバイスをマッピングしています。
図3. モデル1 デバイスコメント
モデル1では、まず温度1、温度2の2バイト符号有整数を単精度浮動小数点データに変換します。
そのラダープログラムを図4に示します。
図4. モデル1 データ変換
モデル1の最大温度、最小温度を求めるラダープログラムを図5に示します。
比較演算を行っている回路の先頭に単精度浮動小数点データの比較を行っている事を示す「F」が表示されている事を確認して下さい。
データ転送を行っている回路の先頭にロングワードデータ(4バイトデータ)の転送を行っている事を示す「L」が表示されている事を確認して下さい。
定数で浮動小数点データを入力する場合は「%」を先頭につけます。
図5. モデル1 最大温度、最小温度
モデル1の平均温度を求めるラダープログラムを図6に示します。
温度1と温度2を加算して合計温度を算出し、合計温度を2で除算して平均温度を求めています。
算術演算を行っている回路の先頭に単精度浮動小数点データの算術を行っている事を示す「F」が表示されている事を確認して下さい。
図6. モデル1 平均温度
図7のモデルについて、最大/最小/平均温度を求めるラダープログラムを作成してみます。
モデル1との相違点は、パソコン側のデータ型が倍精度浮動小数点という所です。
図7. モデル2
モデル2のデバイスコメントを図8に示します。
D421〜に演算過程で使用するワークデバイスをマッピングしています。
図8. モデル2 デバイスコメント
モデル2では、まず温度1、温度2の2バイト符号有整数を倍精度浮動小数点データに変換します。
そのラダープログラムを図9に示します。
横河電機製FA-M3シリーズは2バイトデータから倍精度浮動小数点データに変換する命令が無い為、一度4バイトデータに変換してから、倍精度浮動小数点データに変換を行う必要があります。
今回は、単精度浮動小数点に変換してから倍精度データに変換しています。
図9. モデル2 データ変換
モデル2の最大温度、最小温度を求めるラダープログラムを図10に示します。
図10. モデル2 最大温度、最小温度
モデル2の平均温度を求めるラダープログラムを図11に示します。
温度1と温度2を加算して合計温度を算出し、合計温度を2で除算して平均温度を求めています。
図11. モデル2 平均温度
以下に、キーエンスKVシリーズでのプログラム(スクリプト記述形式)を示します。
デバイスアドレスの後に記述されているものは、サフィックスと呼ばれるものでデータ型を表します。“.DF”は倍精度浮動小数点型です。
スクリプトの場合は、ラダープログラムと違って演算子の記述が整数と浮動小数点で変わらない為、サフィックスに気を付けるだけで楽にプログラミングする事が可能です。
' ================================================================================
' モデル2 最大/最小/平均温度
' ================================================================================
'------------------------------------------
' 最大温度を求める
D00441.DF = -32768 ' 最大温度をデータ範囲最小の-32768で初期化
IF (D00431.DF >= D00441.DF) THEN
D00441.DF = D00431.DF ' 最大温度を温度01とする
END IF
IF (D00435.DF >= D00441.DF) THEN
D00441.DF = D00435.DF ' 最大温度を温度02とする
END IF
D00404.DF = D00441.DF ' パソコンIFデバイスに、最大温度を格納
'------------------------------------------
' 最小温度を求める
D00445.DF = 32767 ' 最小温度をデータ範囲最大の32767で初期化
IF (D00431.DF <= D00445.DF) THEN
D00445.DF = D00431.DF ' 最小温度を温度01とする
END IF
IF (D00435.DF <= D00445.DF) THEN
D00445.DF = D00435.DF ' 最小温度を温度02とする
END IF
D00408.DF = D00445.DF ' パソコンIFデバイスに、最小温度を格納
'------------------------------------------
' 平均温度を求める
D00412.DF = (D00431.DF + D00435.DF) / 2 ' 温度01と温度02を足して2で割る
いかがでしたでしょうか?
一見すると、整数データとあまり変わりは無いようですが、データ領域の確保が必要だったり、データ転送時に何バイトデータなのかを意識する必要があったりと、なにかと手間がかかります。
また、実数データの場合はスクリプトを使用する事も検討した方が良いと思います。
本稿が少しでも皆様のお役に立てていただければ幸いです。
(T.T.)
関連ページへのリンク
関連するソフテックだより