三菱にはBMOVのようないわゆるブロッグのデータ転送の命令があります、Siemensにも似てるのような命令がありまして使用するときにはPointerについてちょっとはっかり理解できないと使う時はトラブルが発生しやすいんです。みんなさんも経験あると思いますがPointerを使うこなすと非常にプログラム作成の効率があげるんですけれどちょっとだけ間違えるとデータが勝手に消されたり変な数字が書き込んでしまったり。もしこの時は元のデータBackUpがないと万事休の状態…前の会社のソフト開発者がいつも僕にそう言ってます。
Back Up is Always needed when you do not have it.
だから現場で言っても作業する前に必ずBackupを取ります。プログラムだけではなくメモリもですね!
BLKMOV
では話に戻りますね。まずは下の”BLKMOV”の命令を使うことによって指定されたデータアドレス+N Byteのデータがデータアドレス+N Byteの処へ保存することができます。つまり三菱のBMOVEに近い命令ですね。
もしSiemensのPointerにわからない方ならまずこのリンク先のPOSTを読んでくださいね。
SiemensPLC#S7300_400 Pointerの使用方法(STL編)
SRCBLKは転送する方のアドレスと幾つByteのデータを送りたいのか指定するんです。
P#DB5.DBX0.0 BYTE22はつまりDB5.DBX0.0から22個のByteを転送します。
DSTBLKはデータを貰える方のアドレスと幾つByteのデータを貰いたいのか指定するんです。
P#DB6.DBX0.0 BYTEはDB6.DBX0.0から22BYTE分を保存します。
RET_VALはエラーcodeです。もし命令は実行された時エラーが出る場合はそのcodeがここで出力します。
じゃ22BYTEってつまり何個のデータですか?
もしBOOLなら22*8=176Bitです。
もしINTなら22/2=11個のINTです。
もちろんBOOLとINTと一緒に混ぜっても平気。命令が送るのはあくまでもBYTEですなので。
FILL
いわゆる三菱のFMOVですね。指定されたデータを繰り返し送り先に送るんです。
SRCBLKは転送する方のアドレスと幾つByteのデータを送りたいのか指定するんです。
DSTBLKはデータを貰える方のアドレスと幾つByteのデータを貰いたいのか指定するんです。
P#DB37.DBX630 BYTE 96 はDB6.DBX0.0から96BYTE分を保存します。
RET_VALはエラーcodeです。もし命令は実行された時エラーが出る場合はそのcodeがここで出力します。
なんだか似てません?ではここで2つのケースを仮定してみましょう。
ケース1は上の例みたい#jをSRCBLKに設定します。もし#jは0の場合はどうになります?答えはP#DB37.DBX630から96BYTE分のデータも0になります!つまり、
DB37
Offset 630.0 =0
Offset 632.0 =0
Offset 634.0 =0
Offset 636.0 =0
…
Offset 676.0 =0
の結果になります。(ここではデータはINTで2Byte=1INTのことで)
ケース2は上の例が#jではなく、例えばP#DB10.DBX0.0 BYTE 8にします。つまり…
DB10 DB37
Offset 0.0 = 4 Offset 630.0 =4 Offset 631.0 =4
Offset 2.0 = 1 Offset 630.2 =1 Offset 631.2 =1
Offset 4.0 = 30 Offset 630.4 =30 Offset 631.4 =30
Offset 6.0 = 19 Offset 630.6 =19 Offset 631.6 =19
Offset 8.0 = 5 Offset 630.8 =5 Offset 631.8 =5 …..
になります。設定されるデータの数の分を繰り返して与えるってことです。