今回はDB_ANYについて説明します。
少しわかりにくいかもしれませんが、最後までお付きいただけると嬉しいです。
まずDB_ANYをHelpをみますと、
Identification (name or number) of a DB,
The data type “DB_ANY” has the length 0 in the section “Temp”
つまり、DB_ANYは該当するDBの名前や番号など、DBを確定するもの変数です。昔のBLOGも書いてたことがありますが、SiemensのDBはGlobal DB DB・Instance・ArrayDBの3種類があります。そしてDBは最適化されたか最適化されてないかの2つがあります。
DB最適化かどうかを設定する場所
では、まず簡単なプログラムからDB_ANYTIMEを見てみましょう。ここまDBを作って、
配列のDB_ANYsを作ります。
次は一つのGlobalDBを作り、DB番号は1です。
そのままmyDB1をそのままDB_ANYsに移動しようと思いますがなぜかエラーが出てますね。
Global access to a data block with memory reserve is not permitted here.というエラーのが原因ですね。
myDB1のプロパティーを開いてMemory reserveのところをDefault100入っていますので、それを0にします。
このMemory Reserveとはなんでしょうか。SiemensのPLCはData Blockのメモリ領域を増やしたり減らしたりすると中にの値を初期化されます。
このことについてまた別のBlogで説明したいと思います。
そうするとエラーが消えましたね。
ダウンロードしみたら、その変数が”1”が入っています。その1ってmyDB1の番番号です。
ATTR_D
実際、なにできる?
最初にはATTR_DB関数を紹介します。この関数を使えばDBの属性を取ることができます。
- REQ:BoolでONすると関数実行する
- DB_NUMBER:DB_ANY・UINTで取りたいDB。
- RET_VAL:関数の実行状態
- DB_LENGTH:DBのBytes数。0ならDB_NUMBERのDBが最適化されたDBです。
- ATRIB:DBのプロパティーを返してくれます。
- Bit0:1=Load Memoryに保存するだけのDB
- Bit1:1=Write-protecteDB
- Bit2:1=最低限1つの変数がラッチされる
- Bit3:1=Load MemoryとWork Memory両方も入ってるDB。
これは実装すると出たの結果です。
Technology Object運用
こそまでみても、あまり実用性がないと思っていますね。これからTechnology Objectのプログラム作るときにどう組めるかちょっと見せたいと思います。
ハードウエア構成
PLCがS120(2軸)とG120(1軸)をつながってて、Technology Objectで制御しようと思います。
このように3つのTechnology Objectを作ります。
プログラム実装
DB_ANY用のDB
まず1つのGlobal DBを追加し、中にMyAxisというDB_ANYの配列を作成します。
OB100
OB100はCPUがStop>RUNするときに一回実行するBlockです。この中に
FB_Drive_PositionAxis
位置決めのFunction Blockを作ります。
ここで一番のPOINTはInOutをTO_PositioningAxisパラメータを定義する、ことです。
そしてBlockの中に簡単なPLC_OPENのBlock使用しプログラムするだけです。
FB_Drive_SpeedAxis
SPEED軸のFunction Blockを作ります。
ここで一番のPOINTはInOutをTO_SpeedAxisパラメータを定義する、ことです。
そしてBlockの中に簡単なPLC_OPENのBlock使用しプログラムするだけです。
EQ_TypeOfDB
最後はこの関数を紹介します。
この関数はI、もしIN1とIN2のデータタイプが同じならOUTが1を出力します。
実装
まずSQ_TypeOfDBでTO_PositioningAxisかどうかをCheckし、もし合ってるのであればFB_Drive_PositionAxisを実行します。
Axisのパラメータは最初OB100にMoveしてたの変数でOKです。
FB_Drive_SpeedAxisも同じです。
最後、この組み方のプログラムになるとあなたのプログラムがもっとflexibly に組むこともできますし、一つの配列リストでプロジェクト内のTechnology Objectすべて収めることができます。
はーい、お疲れ様ですー