みんなさん、お久しぶりです。最近はお仕事とか色々忙しくなってBLOGが一時的に放置しました。今回はTIAのATキーワードでANY DATE TYPEを作ってBLK_MOVEなどの命令と一緒に使えるようになるには、どうすればいいのかを簡単なメモします。
まず今回私が使っていたのはS7-1500です。S7-1500ならDBの構造がデフォルトに最適化が入っててつまりアドレスがありません。そうなるとANY DATA TYPEが使用できませんのでまずDBの最適化のCHECK BOXを外してください。
ではまずS7-1200とS7-1500がどうやって間接アドレスアクセスできるのかをF1を押して見てみましょう。
うんうん、なるほど。もしSiemens使うのなら英語を読むのは怖がらないでくださいね。POINTERで使えますね、あとSTLならARなどのアドレスRegisterが使えますが、SCLなら命令で間接アドレスアクセスしかできないってことですね。
でもいまはATというKEYWORDを使えば、SCLでもPOINTER活用できます。
まず、AT Keywordはなに?
AT KEYWORDは簡単だというと1つのDEVICEを別の形で表示するってことです。例えば1つのWORDを16BITで表示すること。PROGRAMで個別でWORDの中にあるBITを操作することできるってこと。
ANY POINTERの構造
F1 HELPは永遠もあなたの仲間です。
BYTE0は10h。
BYTE1はデータタイプ。
BYTE2、3は謎、影響ないので触らなくてもいいです。
BYTE4、5はDB番号もしくは0。
BYTE6はどんなAREAを使う。Qか?Mか?Iか?など。
BYTE7−9はアドレスですね。
これで全部わかった!
データタイプのコード
Memory Areaのコード
Data Typeを作る
先の構造のようにDATA TYPEを作ってください。
S7-CODEはデフォルト値を16#10します。
テスト用のデータタイプ
適当でいいです。
FC作る
FCを作ります。INTERFACEの中にTEMPという所でANYを作って、そのしたに”AT”というKEYWORDを付けてデータタイプを先に作ったものを宣言します。ここで2つを作ります。
POINTERをINITするFCを作る
これは必要ではありませんが、INITのFCを作ればあと何回も再使用できるの便利。
中身はこんな感じです。NETWORK-1のとろこは8にかけてBYTE MEMORYのTAGのアドレスを正確にSHIFTします。
実装
あとはPOINTERをBLKMOVに参考させれば完成です。
ONLINEしてみるとこんな感じです。
P#DB3.DBX0.0 BYTE 4→P#DB5.DBX2.0 BYTE4
これだけです。お疲れ様ですー