概要
読み出し先アドレスから指定バイト数分の内容を指定ファイルに書き込みます。データの格納方法(モード)は、下表のように「新規」、「追記」、「上書き」があります。
書式
_CF_write / _SD_write / _USB_write (フォルダ名, ファイル名, 読み出し先アドレス, オフセット, バイト数, モード)
パラメータ1
フォルダ名 : 固定文字列(最大文字数は、半角32 文字)
パラメータ2
ファイル名 : 固定文字列(最大文字数は半角32文字)、内部デバイス(最大文字数は半角14文字)、オフセット指定付デバイス(内部デバイス)(内部アドレス+テンポラリアドレス、最大文字数は半角14文字)
パラメータ3
読出し先アドレス : デバイスアドレス、デバイスアドレス+テンポラリアドレス
パラメータ4
オフセット : 数値、デバイスアドレス、テンポラリアドレス(指定最大数は16 ビット長の時65535、32ビット長の時4294967295)
パラメータ5
バイト数 : 数値、デバイスアドレス、テンポラリアドレス(指定最大数は1280)
パラメータ6
モード : 数値、デバイスアドレス、テンポラリアドレス(値は0,1,2)
格納方法(モード)の概要
モード |
名称 |
内容 |
0 |
新規 |
ファイルを新規に作成します。ファイルが存在していれば、古いファイルを削除します。 |
1 |
追記 |
追記書込みを行います。ファイルが存在していなければ新たに作成します。 |
2 |
上書き |
ファイルの一部を上書きで書き換えます。オフセットをファイルサイズより大きくした場合は、超えた分を0で埋めて、その後にデータを書き込みます。オフセットをファイルの最後に指定すると追記書込みとなります。ファイルが存在していなければエラーとなります。エラーの詳細については、22.11.7.7 ラベル設定を参照してください。 |
記述例
[w:[#INTERNAL]LS0200] = 0 //オフセット(モードが新規の場合は、“0”固定です。)
[w:[#INTERNAL]LS0202] = 100 //バイト数(100 バイト)
[w:[#INTERNAL]LS0204] = 0 //モード(新規)
_CF_write ("\DATA", "DATA0001.BIN", [w:[#INTERNAL]LS0100], [w:[#INTERNAL]LS0200], [w:[#INTERNAL]LS0202], [w:[#INTERNAL]:LS0204])
上記の例は、LS0100から100バイト読み出したデータを\DATAフォルダにDATA0001.BINファイルを新規に作成します。オフセット、バイト数、モードに内部デバイスを指定することにより間接的にバイト数、モードを指定できます。
内部デバイスを使用してファイル名を指定する場合
_CF_write ("\DATA", [w:[#INTERNAL]LS0100], [w:[#INTERNAL]LS0200], 0, 100, 0)
LS0100にファイル名を格納することで、ファイル名を間接的に指定できます。ここでは、LS0100からLS0106に以下のようにファイル名を格納します。
例)文字列データモードが1の場合
上記式を実行することで、LS0200から100バイト読み出して"\DATA\DATA0001.BIN"のファイルを新規に作成します。
データの格納順序については以下を参照してください。
22.10.7 データ格納モードについて
外部ストレージへのアクセス時やファイル操作中にエラーが発生した場合は、エラーステータスが格納されます。エラーが発生した場合でも処理はそのまま続行されますので、ファイル操作関数を使用したときには、必ずエラーを確認するスクリプトを記述してください。
22.11.7.7 ラベル設定
ファイル名は、8.3フォーマット(ファイル名8文字、拡張子3文字の最大12文字)のみ使用できます。12文字を超えるファイル名は使用できません。
ルートフォルダ(ディレクトリ)を指定する場合には、フォルダ名に“”(空文字列)を指定してください。
第1パラメータのフォルダ名の最大文字数は、半角32文字までです。
第2パラメータのファイル名には、フォルダ名を付加して指定することが可能です。第2パラメータのフォルダ名+ファイル名の最大文字数は、半角32文字までです。
例 : \DATA\01\DATA.bin
第2パラメータのファイル名には、内部デバイスが指定可能です。内部デバイスを指定することにより間接的にファイル名を指定できます。ただし、内部デバイス指定時はフォルダ名+ファイル名の文字数は最大半角14文字までに制限されます。
ファイル名に内部デバイスを指定した場合、ファイル名の格納順序は文字列データモードに従います。
7.9.1 システム設定[接続機器設定]の設定ガイド
モードが「上書き」の時のみ、オフセットが有効です。「新規」、「追記」ではオフセットは無効です。「上書き」以外の場合は、オフセットの値を0にしてください。
モードを新規に指定したときに、すでにファイルが存在しているときはそのファイルを上書きします。
ファイル名に内部デバイスを指定した場合、また「読み出し先アドレス」は、Dスクリプトのアドレス数には加算されません。
読み出し先アドレスにPLCデバイスを指定した場合、関数を実行したときに一度だけPLCからデータを読み出します。データ読み出し時にエラーとなった場合には、外部ストレージエラーステータス[s:CF_ERR_STAT]/[s:SD_ERR_STAT]/[s:USB_ERR_STAT]にエラーがセットされます。正常に読み出しが終了した場合には、エラーはクリアされます。
読み出すバイト数にもよりますが、分割しながらデータを読み出しますので、データの読み出し途中で通信エラーが発生した場合には、途中までのデータがファイルに書き込まれます。
ファイル名にフルパスを指定する場合は、フォルダ名に“*”(アスタリスク)を指定してください。
例 : _CF_read ("*", "\DATA\DATA0001.BIN", [w:[#INTERNAL]LS0100], 0, 10)
格納方法(モード)の記述例
モードを「新規」にしたとき
上記式を実行すると、LS0100から100バイト読み出したデータを\DATAフォルダにDATA0001.BIN ファイルを新規に作成します。
モードを「追記」にしたとき
すでに指定ファイル(例ではDATA0001.BIN)が存在している場合に上記式を実行すると、LS0100から100バイト読み出したデータを\DATAフォルダのDATA0001.BINファイルに追記します。
モードを「上書き」にしたとき(1)
すでに指定ファイル(例ではDATA0001.BIN)が存在している場合に上記式を実行すると、LS0100から10バイト読み出したデータを\DATAフォルダのDATA0001.BINファイルのオフセット17バイト目から10バイト分上書きします。
モードを「上書き」にしたとき(2)
(上書きするファイルがオフセット+追加バイト数より小さい場合)
すでに指定ファイル(例ではDATA0001.BIN)が存在していて、ファイルサイズが100バイトある場合に、オフセットを96バイト、バイト数を10バイトにして書き込んだ場合は、LS0100から10バイト読み出したデータを97バイト目から4バイト分上書きし、残りの6バイトを追記書き込みします。したがって、最終的には106バイトのファイルが作成されます。
モードを「上書き」にしたとき(3)
(上書きするファイルがオフセットより小さい場合)
すでに指定ファイル(例ではDATA0001.BIN)が存在していて、ファイルサイズが100バイトある場合に、オフセットを110バイト、バイト数を10バイトにして書き込んだ場合は、101バイト目から110バイト分0で埋められて、LS0100から10バイト読み出したデータを111バイト目から追記書き込みします。したがって、最終的には120バイトのファイルが作成されます。