HOME会社概況業務内容開発分野開発事例CANモジュールソフテックだよりお問い合わせ
HOME > ソフテックだより > 第189号(2013年7月3日発行) 技術レポート「PLCプログラムでの数値データ取り扱い 〜整数データ編〜」

「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。

ソフテックだより(発行日順)のページへ
ソフテックだより(技術分野別)のページへ
ソフテックだより(シーン別)のページへ


ソフテックだより 第189号(2013年7月3日発行)

技術レポート

「PLCプログラムでの数値データ取り扱い 〜整数データ編〜」

1. はじめに

私はPLCソフトウェア開発を担当しております。
おかげさまで今まで色々な分野のPLCソフトウェアを担当させていただきましたが、直近の案件で、7万点近くの数値データを取り扱うことがありました。
そこで初心に帰るという意味もこめまして、今回の技術レポートでは、PLCでの数値データ取り扱いについて、実践的な形でのラダープログラムを紹介したいと思います。
なお、一口に数値データといっても、整数、実数、BCD、バイナリなど様々な形式がありますが、今回は整数データを取り扱ったラダープログラムを紹介します。

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メーカー/機種で取り扱える数値データ

3. デバイスコメントでデータ型を明確にする

ラダープログラムに限りませんが、数値データを扱う上で、データ型は非常に重要です。データ型を間違えて演算を行うと正しい結果が得られず、重大なトラブルに繋がる可能性もあります。
ソフテックでは、ラダープログラムで数値データを扱うとき、デバイスのコメントに、必ずデータ型を記載します。

データ型の記載方法ですが、演算命令に準拠すると分かりやすいと思います。
ラダープログラムの演算命令では、扱うデータ型をアルファベット1文字で表現することが一般的なので、そのアルファベットに使用する、というものです。
「アルファベット1文字+数字」で記載することができるので、デバイスコメントの文字数制限を圧迫することもありません

図1に横河電機製FA−M3を使用した場合のデバイスコメントを示します。

デバイスコメント例
図1. デバイスコメント例

図1において、各デバイスで扱う数値データは、以下となります。

D00001
…2バイト符号有整数
D00003〜D0004
…4バイト符号有整数 (Long wordの略で“L”を使用)
D00006〜D0009
…8バイト符号有整数 (Double long wordの略で“D”を使用)
D00011〜D0012
…単精度浮動小数点 (Floatの略で“F”を使用)
D00014〜D0017
…倍精度浮動小数点 (FA-M3のプリフィックスに準拠し“E”を使用)
4. ラダープログラム作成例
4-1. モデル1(符号有整数の取り扱い)

図2のモデルは、温度コントローラから通知される温度データについて、PLCが最大/最小/平均温度を求め、パソコンに通知する、というものです。
ここでは、最大/最小/平均温度を求めるラダープログラムを作成してみます。
なおPLCは横河電機製FA-M3シリーズとします。

モデル1
図2. モデル1

モデル1のデバイスコメントを図3に示します。
D111〜に演算過程で使用するワークデバイスをマッピングしています。

モデル1 デバイスコメント
図3. モデル1 デバイスコメント

モデル1の最大温度、最小温度を求めるラダープログラムを図4に示します。

モデル1 最大温度、最小温度
図4. モデル1 最大温度、最小温度

モデル1の平均温度を求めるラダープログラムを図5に示します。
温度1と温度2を加算して合計温度を算出し、合計温度を2で除算して平均温度を求めています。

ポイント!

合計温度を算出するときは、オーバーフロー/アンダーフローを防ぐため、合計温度を4バイト整数で算出しています。
数値データの演算を行うときは、オーバーフロー/アンダーフローが発生しないように常に気を配る必要があります。

モデル1 平均温度
図5. モデル1 平均温度

4-2. モデル2(符号無整数の取り扱い)

図6のモデルについて、最大/最小/平均温度を求めるラダープログラムを作成してみます。
モデル1との相違点は、I/Fのデータ型が符合無整数という点です。

モデル2
図6. モデル2

モデル2のデバイスコメントを図7に示します。
D211〜に演算過程で使用するワークデバイスをマッピングしています。

モデル2 デバイスコメント
図7. モデル2 デバイスコメント

モデル2では、まず温度1、温度2の符号無整数を4バイト整数に拡張します。
そのラダープログラムを図8に示します。

ポイント!

横河電機製FA-M3シリーズは符号無整数をサポートしていないため、符号無整数をデータ拡張して扱う必要があります。
今回は、2バイト符号無整数を、4バイト(符号有)整数に拡張して扱います。

ポイント!

モデル2 符号無整数拡張
図8. モデル2 符号無整数拡張

モデル2の最大温度、最小温度を求めるラダープログラムを図9に示します。
入力温度と最大/最小温度の比較命令では、拡張した4バイト整数を使用します。

モデル2 最大温度、最小温度
図9. モデル2 最大温度、最小温度

モデル2の平均温度を求めるラダープログラムを図10に示します。
温度1と温度2を加算して合計温度を算出し、合計温度を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で割る

5. おわりに

いかがでしたでしょうか?
今回は数値データの中でも、整数データにスポットをあててラダープログラムを紹介させていただきましたが、別の数値データ(実数、BCD等)についても書いてみたいと思っております。
本稿が少しでも皆様のお役に立てていただければ幸いです。

(Y.S.)

[参考文献]
三菱電機
−MELSEC-Q/L プログラミングマニュアル(共通命令編)
横河電機
−シーケンスCPU 説明書 命令編
オムロン
−CJ2 CPUユニットユーザーズマニュアルソフトウェア編
キーエンス
−KV-5500/5000/3000/1000 命令語リファレンスマニュアル

関連ページへのリンク

関連するソフテックだより