概要
ファイルの内容をオフセットから指定バイト数分、書き込み先アドレスに書き込みます。
書式
_CF_read / _SD_read / _USB_read (フォルダ名, ファイル名, 書き込み先アドレス,
オフセット, バイト数)
パラメータ1
フォルダ名 : 固定文字列(最大文字数は、半角32文字)
パラメータ2
ファイル名 : 固定文字列(最大文字数は半角32文字)、内部デバイス(最大文字数は半角14文字)、オフセット指定付デバイス(内部デバイス)(内部アドレス+テンポラリアドレス、最大文字数は半角14文字)
パラメータ3
書き込み先アドレス : デバイスアドレス、オフセット指定付デバイス(内部デバイス)
パラメータ4
オフセット : 数値、デバイスアドレス、テンポラリアドレス(指定最大数は16ビット長の時65535、32ビット長の時4294967295)
パラメータ5
バイト数 : 数値、デバイスアドレス、テンポラリアドレス(指定最大数は1280)
記述例
固定文字列でファイル名を指定し、指定ファイルのオフセット16 から16 バイト分読み出す場合
_CF_read ("\DATA", "DATA0001.BIN", [w:[#INTERNAL]LS0100], 16, 16)
上記式を実行すると、“\DATA\DATA0001.BIN”ファイルの17バイト目から16バイト分のデータをLS0100以降に書き込みます。
内部デバイスを使用してファイル名を指定し、指定ファイルのオフセット0から10バイト分読み出す場合
_CF_read ("\DATA", [w:[#INTERNAL]LS0100], [w:[#INTERNAL]LS0200], 0, 10)
LS0100にファイル名を格納することで、ファイル名を間接的に指定できます。ここでは、LS0100からLS0106に次項のようにファイル名を格納しています。
例)文字列データモードが1の場合
上記式を実行することで、“\DATA\DATA0001.BIN”のファイルの先頭から10バイト読み出してLS0200~に書き込みます。
外部ストレージへのアクセス時やファイル操作中にエラーが発生した場合は、エラーステータスが格納されます。エラーが発生した場合でも処理はそのまま続行されますので、ファイル操作関数を使用したときには、必ずエラーを確認するスクリプトを記述してください。
22.11.7.7 ラベル設定
データの格納順序については以下を参照してください。
22.10.7 データ格納モードについて
ファイル名は、8.3フォーマット(ファイル名8文字、拡張子3文字の最大12文字)のみ使用できます。12文字を超えるファイル名は使用できません。
ルートフォルダ(ディレクトリ)を指定する場合には、フォルダ名に“”(空文字列)を指定してください。
第1パラメータのフォルダ名の最大文字数は、半角32文字までです。
第2パラメータのファイル名には、フォルダ名を付加して指定することが可能です。第2パラメータのフォルダ名+ファイル名の最大文字数は、半角32文字までです。
例 : \DATA\01\DATA.bin
第2パラメータのファイル名には、内部デバイスが指定可能です。内部デバイスを指定することにより間接的にファイル名を指定できます。ただし、内部デバイス指定時はフォルダ名+ファイル名の文字数は最大14文字までに制限されます。
ファイル名に内部デバイスを指定した場合、ファイル名の格納順序は文字列データモードに従います。
7.9.1 システム設定[接続機器設定]の設定ガイド
実際に読み込めたバイト数は、読み出しバイト数[s:CF_READ_NUM]/[s:SD_READ_NUM]/[s:USB_READ_NUM]に書き込まれます。詳細については、22.11.7.7 ラベル設定を参照してください。
「ファイル名」に内部デバイスを指定した場合と「書き込み先アドレス」は、Dスクリプトのアドレス数には加算されません。
書き込み先アドレスにPLCデバイスを指定した場合、書き込むワード数(バイト数)が多くなるにしたがって、PLCへの書き込み時間が長くかかります。ワード数によっては数秒かかる場合があります。
ファイルから読み出したデータを書き込む場合に、PLCのデバイスの範囲外になった場合は通信エラーとなり、電源のON/OFFをしないと復旧することはできませんのでご注意ください。
書き込み先にPLCデバイスを指定した場合、PLCとの通信がありますので、すぐに書き込んだ値が反映されません。
例
次のスクリプトで、①の命令文ではファイルから10バイト読み出したデータを[w:D0100]から書き込みますが、通信を行っているため時間がかかり、②の命令文ではファイルから読み出したデータが[w:[PLC1]D0100]にはまだ書き込まれていません。
_CF_read ("\DATA",
"DATA0001.BIN", [w:[PLC1]D0100], 0, 10) // (1)
[w:[PLC1]D0200] = [w:[PLC1]D0100] + 1 // (2)
このような場合は次のように一度内部デバイスに格納して実行するようにしてください。
_CF_read
("\DATA", "DATA0001.BIN", [w:[PLC1]D0100],
0, 10)
memcpy ([w:[#INTERNAL]LS0100], [w:[PLC1]D0100], 10)
[w:[PLC1]D0200] = [w:[#INTERNAL]LS0100] + 1