【PLC演算処理】サイクルタイムの最大・最小・平均を自動で集計するスクリプト構成を解説!
fa-engineer
FAテック ラボ
ラダーでヒストグラムを作成する方法を詳しく解説
前回の記事では、ヒストグラムの概要と「区間値(ビン幅)」の設定方法について解説しました。まだご覧になっていない方は、先にこちらをどうぞ👇
今回は、PLCのラダー制御でヒストグラムを実際に作成していく方法をご紹介します。
完成イメージがこちら👇

この例では、区間数7、最小値2、区間幅20で構成されたヒストグラムを生成しています。
| 区間 | 条件範囲 |
|---|---|
| ① | x < 2 |
| ② | 2 ≦ x < 22 |
| ③ | 22 ≦ x < 42 |
| ④ | 42 ≦ x < 62 |
| ⑤ | 62 ≦ x < 82 |
| ⑥ | 82 ≦ x < 102 |
| ⑦ | 102 ≦ x |
このうち②〜⑥の区間は「左閉右開」(≦ x <)形式で定義されており、最初と最後の区間だけが異なる条件となっている点に注意が必要です。
作成したラダーコードがこちらです👇


一見して複雑そうに見えますが、下図のように処理の流れを色分けして理解すれば、構造がつかみやすくなります。


IF DM104 > 0 AND DM5002 > 5 THEN
生産数が1以上、かつ区間数が5以上であれば処理スタートです。
DM105 = DM104 - 1
DM5003 = DM5002 + 1
FMOV(0, ZF1000, DM5003)
FOR DM106 = 0 TO DM5003 STEP 1
このDM106が区間ごとのインデックスになります。
DM106の値に応じて処理は次の3パターンに分岐:
IF DM106 = 0 THEN
FOR DM108 = 0 TO DM105 STEP 1
IF DM201:DM108 < ZF0 THEN
INC(DM110)
END IF
NEXT
IF DM106 > 0 AND DM106 < DM5003 THEN
DM107 = DM106 - 1
FOR DM122 = 0 TO DM105 STEP 1
IF ZF0:DM107 <= DM201:DM122 AND DM201:DM122 < ZF0:DM106 THEN
INC(DM110)
END IF
NEXT
→ 範囲に一致する測定値をカウントしてDM110に保存。
IF DM5003 = DM106 THEN
DM5005 = DM5003 - 1
FOR DM120 = 0 TO DM105 STEP 1
IF ZF0:DM5005 <= DM201:DM120 THEN
INC(DM110)
END IF
NEXT
ZF1000:DM106 = DM110
| デバイス | 役割 |
|---|---|
| DM104 | 生産個数 |
| DM105 | 測定回数用FORループ上限 |
| DM106 | 区間FORループのカウンター |
| DM107 | 区間下限閾値の参照用 |
| DM5002 | 区間数(タッチパネル設定) |
| DM5003 | 区間FORループの上限 |
| DM5006 | 区間幅(タッチパネル設定) |
| ZF0〜 | 区間の閾値リスト |
| ZF1000〜 | 区間ごとの度数記録先 |
| DM201〜 | 測定履歴データ |
今回はヒストグラム作成までのラダー処理について詳しく解説しました。
次回は、このヒストグラムをタッチパネル上で可視化する方法について取り上げます。