SiemensのPLCは必ずMemory Cardが付けてて、その役目としてはHardware Config、Userプログラム、Recipes、Logging様々な機能が持っています。今回はまずどうやってDBのデータをMemory Cardへ書き込む、読み取りについて説明したいと思います。今回は仮に4つのRecipesがあって、それぞれ違うの生産データがありまして生産によって違うレシビを取るんです。
Step#1
まずはその4つのDBで右クリックしGeneral→Attributesで”Only store in load memory”を選択してください。”Optimized block access”のCheck Boxを外してください。
Step#2
今度はDB4−これは実際にRecipesのDBから読み込む、書き込むとき使うのDBです。同じように右クリックします。
”Optimized block access”のCheck Boxを外してください。
Step#3
UDTを作ります。これはめんどくさいという方が飛んでください。REQ、REQ_VAL、BUSYは次のSTEPで使われてるのFunction Blockで使うので一回このUDT作ってあとはDBの中に宣言すればOKです。毎回もBITを割付る必要もありません。
*SWはSINTとして、USERがどんなDBが欲しいか?をシミュレーションするスイッチです。
Step#4
次はPOINTERのUDTを作ります。POINTERについてはこの↓リンクについて説明があります。
SiemensPLC#S7300_400 Pointerの使用方法(STL編)
ここで準備OK!
Step#5
では新しいDB3を作って先Step#3で定義したUDTとして変数を宣言します。
Step#6
次は新しいFCを作ります。このFCはDB DataをMemory Cardへ書き込む、読み取りするプログラムが入ってます。
Step#7
Network1はこのCodeを入れます。Pointerのアクセスアドレス、データタイプ、長さ、を設定し、最後はUSER選ぶのレシビ番号によってアクセスするDBを分けます。(もちろん1つのDBで管理する方法もありますけど、毎回もアドレスのOFFSETを計算するのもめんどくさいし、管理上でもよくない…と私はそう思います。)
Step#8
Network2でWRIT_DBLというFUNCTION BLOCKを入れます。
これはLOAD MEMORYのDBへ書き込むのFunction Blockです。
REQ:書き込み始まるのビット。
SRCBLK:どこのデータをから?これはStep#7によって変わります。
RET_VAL:返却値、命令の実行結果がここで反映されます。
BUSY:書き込みしてるというFLAG
DSTBLK:転送先。これはStep#7によって変わります。
最後は命令実行のあとにREQのFLAGをリセットします。
Step#9
Network2でREAD_DBLというFUNCTION BLOCKを入れます。
これはLOAD MEMORYのDBから読み取りのFunction Blockです。
REQ:書き込み始まるのビット。
SRCBLK:何処のLoad Memory?これもStep#7によって変わります。
RET_VAL:返却値、命令の実行結果がここで反映されます。
BUSY:書き込みしてるというFLAG
DSTBLK:転送先。これはStep#7によって変わります。
最後は命令実行のあとにREQのFLAGをリセットします。
これだけです。それじゃまたねー