Beckhoff#TwinCAT3 Object POUs for implicit checks

今回はImplicit checksのPOUsについて説明します。多分みなさんはこれなに?だと思うかもしれませんが、プログラム内で0を割ってしまったり、配列に存在しないIndexアクセスしたり、そのようなプログラムミスのせいでRuntimeがとまります。そのときImplicit checksのPOUsの出番です。それらの関数は自動的呼びされ、プログラムの中の基本的なミスを予防します。

Object POUs for implicit checks は以下のルールを守る必要があります。

  1. Implicit checksの関数の定義は変更禁止です。(Local 変数だけ大丈夫)
  2. Online Changeができません・Implicit 関数の削除・追加のあとはDownloadだけになります。
  3. Source LibraryではそのImplicit checksに通用しません。
  4. 一応Implicit checksが追加されたら、全てのPOUにも適用します。もし個別のPOUがCheckしないようにしたいなら、attribute ‘no_check‘を追加してください。(再度コンパイルが必要です)

POU for implicit checks追加

POUsで右クリック>Add>POU for implicit checks..をクリックします。

CheckするOptionsを設定できます。今回はすべて選びます。

Add >のあとにもうPOU for implicit checksの選択がなくなります。

以下の関数が追加されます。

CheckBounds

該当配列以外のIndexにアクセスしてるかどうかCheckします。

CheckDivDInt/CheckDivLint/CheckDivReal/CheckDivLReal

演算中に0を割ったかどうかをCheckします。

CheckRangeSigned/CheckRangeUnsigned/CheckLRangeSigned/CheckRangeUnsigned

配列のRangeをCheckします。

CheckPointer

注意するのはこの関数は自分で実装する必要があります。その関数目的はFunction、Function Blockに渡すPointerが正確かどうか。REFERENCE TOを使用したときもこの関数が使われます。


Example

今回は0を割ったときがどうなるかを見てみましょう。下図のようにException Popupが出てきて、Exception発生したコードが黄色に示されます。

下のRuntimeのIconも黄色になっています。そのときは再起動するしかないです。

次は、Implicit checksのPOUsを入れたら、0を割ってもRuntimeが止まりません。

Footer_Basic

Please Support some devices for my blog

Amazon Gift List

Find ME

Twitter:@3threes2
Email:soup01threes*gmail.com (* to @)
YoutubeChannel:https://www.youtube.com/channel/UCQ3CHGAIXZAbeOC_9mjQiWQ

シェアする

  • このエントリーをはてなブックマークに追加

フォローする