概要
指定された範囲からブロック単位でデータの検索を行います。ブロックの先頭から任意の位置(オフセット)にあるデータをブロック単位で比較し、検索結果を格納アドレスに返します。一致するブロックがある場合、ブロックのオフセット値(1~)が入り、一致するブロックがない場合、FFFFhが格納されます。エラーが発生した場合、LS9153にエラーステータスを書き出します。
書式
_memsearch (検索元ブロックアドレス,検索開始アドレス,検索終了アドレス,検索結果格納アドレス,先頭ブロックからのオフセット,比較するワード数,1ブロックのワード数)
パラメータ1 : 内部デバイス
パラメータ2 : 内部デバイス
パラメータ3 : 内部デバイス
パラメータ4 : 内部デバイス
パラメータ5 : 数値(0 ~ 639)、内部デバイス、テンポラリ変数
パラメータ6 : 数値(1 ~ 640)
パラメータ7 : 数値(1 ~ 640)
書込まれるデータ
一致するブロック有り:ブロックのオフセット値(1 ~)
一致するブロックなし:FFFFh
検索元ブロックアドレス、検索開始アドレス、検索終了アドレスに指定するデバイスは、必ず種類(LSもしくはUSR)を統一させてください。ただし、「検索元ブロックアドレス」と「検索結果格納アドレス」は、内部デバイスを任意に設定できます。
必ず「パラメータ2」<「パラメータ3」で設定してください。エラーの原因になります。
検索範囲は複数ブロックを指定してください。1ブロックの場合は動作しません。検索範囲が1ブロックの場合は、メモリ比較(_memcmp)を使用してください。
記述例1
_memsearch([w:[#INTERNAL]LS1000],[w:[#INTERNAL]LS1005],[w:[#INTERNAL]LS1025],[w:[#INTERNAL]LS0100],0,1,5)
(検索元ブロックのオフセット0から1ワード間と同じ値のブロックがないか、LS1005からLS1025間で検索し、結果をLS0100に格納する場合)
検索範囲先頭から検索した結果、「ブロック1」の値が「検索元ブロック」の値と一致するため、LS0100に格納される検索結果は「1」となります。
記述例2
_memsearch([w:[#INTERNAL]LS1000],[w:[#INTERNAL]LS1005],[w:[#INTERNAL]LS1025],[w:[#INTERNAL]LS0100],3,2,5)
(検索元ブロックのオフセット3から2ワード間と同じ値のブロックがないか、LS1005~LS1025間で検索し、結果をLS0100に格納する場合)
検索範囲先頭から検索した結果、「ブロック4」の値が「検索元ブロック」の値と一致するため、LS0100に格納される検索結果は「4」となります。
エラーステータス
エディタ関数名 |
LSエリア |
エラーステータス |
要因 |
_memsearch ( ) |
LS9153 |
0000h |
正常終了 |
0001h |
パラメータエラー |
||
0003h |
書き込み、読み込みエラー |
処理時間は、開始アドレスと終了アドレスで指定される範囲に比例します、広範囲を指定するほど処理時間がかかります。処理が完了するまで部品処理は更新されません。
開始アドレス、終了アドレスで指定できる内部デバイスの有効範囲はユーザエリア(LS20~LS2031、LS2096~LS8191、USR00000~USR29999)のみです。