This annex describes an information model for file transfer. Files could be modelled in OPC UA as simple Variables using ByteStrings. However, the overall message size in OPC UA is limited due to resources and security issues (denial of service attacks). Only accessing parts of the array can lead to concurrency issues if one client is reading the array while others are manipulating it. Therefore the ObjectType FileTypeis defined representing a file with Methodsto access the file. The life-cycle of a file stored on a hard disk and an instance of the FileTyperepresenting the file in an OPC UA AddressSpacecan be independent.
In addition to representing individual files this annex also defines a way to represent a whole file system or a part of a file system. This can be done using the FileDirectoryTypein combination with the FileType. The FileDirectoryTypeprovides Methodsto create delete and move files and directories. The root of a file system or part of a file system is represented by an instance of the FileDirectoryTypewith the BrowseName FileSystem. All directories below the root directory are represented by instances of the FileDirectoryTypeor a subtype. All files below the root directory are represented by instances of the FileTypeor a subtype.
In different situations like transfer of configuration files or firmware update, the files are temporary and an additional handshake is necessary to create the file for reading or to apply the file after writing it to the server. This use case is covered by the TemporaryFileTransferTypedefined in this annex.
This annex is an integral part of this standard, that is, the types defined in this annex have to be used as defined. However, it is not required but strongly recommended that a Serveruses these types to expose its files. The defined types may be subtyped to refine their behaviour.