POUとは

ユーザプログラム、ファンクション、ファンクションブロックの各要素のことです
これのことです
NJシリーズのPOU一覧

POUの種類
種類特徴用途
Programタスクに割付けて実行設備全体の制御を行う
Function状態保持なし計算処理向け
Function Block状態保持あり状態保持が必要な処理向け

タスクとは

一連の処理をするプログラムを実行する単位のことです。
そのタスクにPOUを割付けます。タスクは一定の周期で実行するタイプがあり、タスクごとに実行周期と優先順位が設定できます

タスクはこんな感じです
タスク構成例
POUの割付けはこんな感じです
タスクへのPOU割付例

上記の設定だと1ms周期でProgram0を実行して、10ms周期でprogram1→program2の順番で実行します
(50msの定周期タスク17は空です)

タスクの周期とPOUを割付ける目安

プライマリ定周期タスクとは

NJ/NXシリーズで最も重要なタスクです。
EtherCAT通信周期と連動するため、通常は制御処理をここに配置します。

基本的には

プライマリ定周期タスクにプログラムを全部入れて実行してみます
プログラムの起動条件などもONにしたりしてプログラムに負荷をかけてみてください
タスク実行時間モニタを見て実行時間の最大が80%以内であれば問題ないでしょう
タスク実行時間モニタ

プライマリ定周期タスクの周期を伸ばせるなら

プライマリ定周期タスクの周期を伸ばしてみます
[ EtherCATスレーブへの影響 ]
プライマリ定周期タスクの周期を伸ばすとEtherCATの通信周期も連動して伸びるので接続されているスレーブの入出力が伸びてしまいます
サーボやアナログの場合はキメ細かな制御ができなくなったり、精度が悪くなったり、マシンサイクルも伸びる方向になることが懸念されます

表示器が付いているなら

表示器の入出力はそれほど高速性はいらなくて、ボタンなら50msぐらいの反応速度で、表示データの更新速度も50msで更新すれば十分なので、20~50msの定周期タスクを作って、表示器の処理はそちらに入れるようにします

通信処理があるなら

シリアル通信やEthernetで外部機器と接続するときはデータ処理部分が多くなると思うので、そこで時間が伸びるようであれば別のタスクに入れてみます

毎周期計算する必要がなければ

複雑な計算を大量にするときに毎周期する必要がなければ別のタスクに入れてみます

タスク周期の目安

タスク周期の目安
用途周期
サーボ制御1ms
I/O制御1〜10ms
通信処理10〜50ms
表示器処理0〜100ms
ファイル処理100ms以上

おまけ 時間のかかる命令

CONCAT

文字列をつなげる命令ですが、どの言語でもこの命令は遅いです
プログラムは長くなりますが大量に文字操作が必要な時はバイト配列で処理するほうが早いです

LrealToFormatString

LREAL型を文字列に変換する命令です
整数型に変換してから文字列に変換するほうが早いです

よくある質問

POUとは何ですか?

IEC61131-3で定義されたプログラム部品です。Program、Function、Function Blockがあります。

FunctionとFunction Blockの違いは?

Functionは状態保持しません。Function Blockは状態保持します。

タスクは何個作れば良いですか?

まずはプライマリ定周期タスク1つで開始し、機能や負荷に応じて分割するのがおすすめです。

この記事へのコメント