File転送

ファイルは、ByteString(byte列の配列)を使用し、VariableとしてOPC UAでモデル化されています。全体的なメッセージサイズはリソースとセキュリティにより制限されています。

あるClientが配列を読み取り、他のClientが配列を操作している場合、ファイルにアクセスすると排他の問題が発生する可能性に注意し設計してください。

FileTypeはファイルにアクセスするためのMethodを定義します。ハードディスクに保存されているファイルとOPC UA AddressSpace内のファイルを表すFileTypeは独立しています。ファイルシステムはFileDirectoryTypeとFileTypeを組み合わせて実装されます。ルートフォルダーの下にあるすべてのフォルダはFileDirectoryTypeとし、ファイルはFileTypeとして実装されます。

OPC UAの仕様書ではファイルの転送は、TemporaryFileTransferTypeを使用し、ファイルを転送することを強くすすめています。

FileTypeのDefinition

FileTypeのDefinitionは以下の通りです。

FileTypeを構成するProperty

FileTypeを構成するPropertyは以下の通りです。

Size

Sizeはファイルのサイズをバイト単位で定義します。 ファイルを書き込み用に開くとサイズが正確でない場合があります。

Writable

Writableはファイルが書き込み可能かどうかを示します。 ユーザーのアクセス権は考慮されません。つまり、ファイルは書き込み可能ですが、特定のユーザー/ユーザーグループに制限される場合があります。ファイルが書き込み用に現在開かれているかどうかは考慮しません。

UserWritable

UserWritableはユーザーのアクセス権を考慮してファイルが書き込み可能かどうかを示します。 ファイルが現在別のClientによる書き込み用に開かれていて現在ロックされ他のClientが書き込みできないかどうかを考慮していません。

OpenCount

OpenCountはファイルで現在有効なファイルハンドルの数を示します。

FileTypeを構成するMethod

FileTypeのTargetNodeであるMethodは以下の通りです。

Open

OpenはFileTypeのObjectで表されるファイルを開くために使用されます。 Clientがファイルを開くとセッションが開いている間、有効なファイルハンドルを取得します。 Clientはファイルにアクセスする必要がなくなったときにClose Methodを使用しハンドルを解放する必要があります。 Clientは同じファイルを数回開いて読み取ることができます。 ファイルがすでに開かれている場合、書き込み用に開く要求はBad_NotWritableを返します。 ファイルがすでに書き込み用に開かれている場合、読み取り用に開く要求はBad_NotReadableを返します。

Close

CloseはFileType Objectで表されるファイルを閉じるために使用されます。 Clientがファイルを閉じるとハンドルは無効になります。

Read

Readは現在のファイル位置からファイルの一部を読み取るために使用されます。 ファイルの位置は読み取られたバイト数だけ進められます。

Write

Writeは現在のファイル位置からファイルの一部を書き込むために使用されます。 ファイルの位置は書き込まれたバイト数だけ進められます。

GetPosition

GetPositionはファイルハンドルの現在の位置を提供するために使用されます。

SetPosition

SetPositionはファイルハンドルの現在の位置を設定するために使用されます。

FileDirectoryType

FileDirectoryTypeのDefinitionは以下の通りです。

FileDirectoryTypeを構成するProperty

FileDirectoryTypeのTargetNodeであるPropertyは以下の通りです。

<FileDirectoryName>

ObjectTypeのインスタンスはこのObjectTypeのインスタンスによって表されるファイルディレクトリのサブディレクトリを表すFileDirectoryTypeObjectのリストが含まれています。

<FileName>

ObjectTypeのインスタンスには、このObjectTypeのインスタンスによって表されるファイルディレクトリ内のファイルを表すFileTypeObjectのリストが含まれています。

FileDirectoryTypeを構成するMethod

FileDirectoryTypeのMethodは以下の通りです。

CreateDirectory

CreateDirectoryは新しいFileDirectoryType Objectを作成するために使用されます。

CreateFile

CreateFileはObjectはFileType Objectを作成するために使用されます。 作成されたファイルはFileTypeのWrite Methodを使用して書き込むことができます。

Delete

Deleteはファイルまたはディレクトリを削除するために使用されます。

MoveOrCopy

MoveOrCopyはファイルまたはディレクトリを別のディレクトリに移動またはコピー、ファイルまたはディレクトリの名前を変更するために使用されます。

TemporaryFileTransferType

TemporaryFileTransferTypeは、一時ファイル転送を表すためのタイプを定義します。 GenerateFileForRead、GenerateFileForWriteはAddressSpaceで参照できない一時的なFileTypeObjectを生成します。同じセッションのMethodによって返されるNodeIdとFileHandleによってファイルへのアクセスが可能になります。 このObjectはOPC UA ClientとServer間で一時ファイルを転送するために使用されます。 TemporaryFileTransferTypeのDefinitionは以下の通りです。

TemporaryFileTransferTypeを構成するProperty

TemporaryFileTransferTypeのPropertyは以下の通りです。

ClientProcessingTimeout

ClientProcessingTimeoutは、ファイル読み取り、転送、またはファイル書き込み転送トランザクションを完了するために、必要なMethod呼び出しでServeが受け入れる最大時間をミリ秒単位で定義します。 これには、TemporaryFileTypeObjectからファイルコンテンツを読み書きするためのMethodの呼び出しが含まれます。 ClientがMethod呼び出し中にタイムアウトを超えると、Serverはファイルを閉じ、対応する転送トランザクションをキャンセルする場合があります。 ファイルの作成に使用されたセッションが有効でなくなった場合、開いているTemporaryFileはすべて削除されます。

<TransferState>

TransferStateは読み取り用のファイルの準備または書き込み後のファイルの処理が対応するMethodの実行後に非同期で完了した場合に転送トランザクションの状態を公開するために使用されます。 Methodが返されたときにトランザクションが完了した場合、TransferStateは使用できません。

TemporaryFileTransferTypeを構成するMethod

TemporaryFileTransferTypeのMethodは以下の通りです。

GenerateFileForRead

GenerateFileForReadは、ファイルの読み取りトランザクションを開始するために使用され、一時的なFileTypeObjectが作成され、このObjectのNodeIdとObjectにアクセスするためのFileHandleが返されます。

GenerateFileForWrite

GenerateFileForWriteは、ファイルの書き込みトランザクションを開始するために使用され、一時的なFileTypeObjectが作成され、このObjectのNodeIdとObjectにアクセスするためのFileHandleが返されます。

CloseAndCommit

CloseAndCommitは、書き込まれたファイルの内容を更新し、トランザクションの完了後に一時ファイルを削除するために使用されます。

File Transferシーケンス

File Transferのシーケンスのシナリオは以下の通りです。

Readのシーケンス

読み取りでのファイル転送トランザクションを実行するために必要なMethod呼び出しのシーケンスを図に示します。

1.読み取りファイル転送トランザクションは、TemporaryFileTransferTypeによって定義されたGenerateFileForRead Methodで開始されます。
2.Methodが正常に呼び出された後、Clientはファイル全体が、ServerからClientに転送されるまで、FileTypeで定義されたReadを呼び出し、ファイルの内容を読み取ります。
3.トランザクションはFileTypeで定義されたCloseを呼び出すことによって完了します。

Writeのシーケンス

書き込みファイル転送トランザクションを実行するために必要なMethod呼び出しのシーケンスを図に示します。

1.書き込みファイル転送トランザクションはTemporaryFileTransferTypeで定義されたGenerateFileForWrite Methodで開始されます。
2.呼び出しが成功したらClientは、ファイル全体がClientからServerに転送されるまで、FileTypeで定義されWriteを呼び出すことによりファイルの内容を書き込みます。
3.トランザクションはCloseAndCommitを呼び出すことで完了します。