# SF1011异步文件操作手册

### 概述

SF1011是一个能够对文件夹和文件进行开、关、读、写等操作的异步文件组件，通过该组件可以对工智机内的文件夹和文件执行一系列的操作。

下表概述了各个产品组件

产品组件 | 描述说明
--- | ---
cmpsysfile_0.0.1-rc.3_amd64.deb | 异步文件的ACP客户端组件
asyncfile-service_0.0.3_amd64.deb | 异步文件的ACP服务端组件
SysFilePLC.library | PLC工程库文件
SysFileLib.project | PLC快速启动工程
Sinsegye.Ide.DeviceManager_0.0.1.9 | 工智机设备管理系统

### 安装卸载

安装要求

- 中科时代出厂的工智机；

- 个人电脑安装中科时代IDE MetaFacture软件；

- 工智机设备管理系统Sinsegye.Ide.DeviceManager

安装过程

1、安装异步文件的ACP客户端、服务端和ACP服务组件

- 上传deb包到工智机Linux环境的/home/sinsegye目录下

- 上传完成后在工智机上执行命令安装（参考下方截图，如果模块文件名发生变化则命令行中的文件名做相应更改）

    sudo dpkg -i cmpsysfile\_0.0.1-rc.3\_amd64.deb&#xA;sudo dpkg -i asyncfile-service\_0.0.3\_amd64.deb&#xA;sudo dpkg -i libacp\_0.2.0-rc.3\_amd64.deb

- 修改RTE的配置文件，ComponentManger模块下加入sf1011_sysfile

    sudo vim /usr/local/etc/SinsegyeRTE/SinsegyeRTE.cfg

    [ComponentManager]
    Component.0=CmpCanBusUtils
    Component.1=CmpLedManager
    Component.2=CmpSinsegyeLibs
    Component.3=retainDeamon
    Component.4=SE4100&
    Component.5=sf1011\_sysfile

- 重启RTE服务，使新加入的sf1011_sysfile被调用并确保异步文件ACP服务端组件正常运行

    sudo systemctl restart sinsegyerte.service
    sudo systemctl start asyncfile-service.service
    sudo systemctl status asyncfile-service.service

2、IDE侧部署SF1011_SysFile的library

- MetaFacture中点击最上面的菜单栏 ”工具“ -- ”库存储“ ；

- 弹出的对话窗中点击”安装“ -- 选中SysFileLib.library -- 点击“打开”；

- 工程中双击“库管理器” -- “添加库” --点击杂项 --双击“SysFileLib” ，加载库完成

更新安装

1、升级异步文件的ACP客户端、服务端

- 上传升级版deb包到工智机Linux环境的/home/sinsegye目录下，上传方法参考附录；

- 上传完成后在工智机上执行命令安装（参考下方截图，如果模块文件名发生变化则命令行中的文件名做相应更改）

    sudo dpkg -i cmpsysfile\_0.0.1-rc.3\_amd64.deb&#xA;sudo dpkg -i asyncfile-service\_0.0.3\_amd64.deb

- 重启RTE服务，使新升级的SF1011_SysFile被调用

    sudo systemctl restart sinsegyerte.service

2、升级IDE侧SF1011_SysFile的library

- MetaFacture中点击最上面的菜单栏 ”工具“ -- ”库存储“ ；

- 弹出的对话窗中点击”安装“ -- 选中SysFileLib.library -- 点击“打开”；

- 工程中双击“库管理器” -- “添加库” --点击杂项 --双击“SysFileLib” ，加载库完成；

卸载过程

1、卸载异步文件的ACP客户端、服务端

- 工智机上执行命令卸载

    sudo dpkg -r cmpsysfile\_0.0.1-rc.3\_amd64.deb&#xA;sudo dpkg -r asyncfile-service\_0.0.3\_amd64.deb

- 修改RTE的配置文件，ComponentManger模块下去掉sf1011_sysfile

    sudo vim /usr/local/etc/SinsegyeRTE/SinsegyeRTE.cfg

- 重启RTE服务

     sudo systemctl restart sinsegyerte.service

2、卸载IDE侧SF1011_SysFile的library

- MetaFacture界面点击“工具” -- “库存储”

- 对话框中选中安装的SysFileLib库，点击“卸载”

### 快速启动

一、本例软、硬件配置

硬件： | 软件：
--- | ---
1.SX20 | 1.MetaFacutre V1.0.6.3
2.Win11PC | 2. Sinsegye.Ide.DeviceManager0.0.1.9

二、本例实验操作步骤

1.实验要求

a.工智机成功安装相关组件

b.MetaFacture成功安装库文件SysFileLib.library

可以参考产品组件中的SysFileLib.project项目来进行本次实验

2.实验内容

DirOpen

打开一个目录，返回的句柄后续使用的时候都需要用到，如果需要获得目录内的条目，需要调用DirList，一个一个获得

DirClose

关闭一个目录

DirList

读取目录条目，每次读取一条，读取的内容存储在结构体中

设置的机制是每次读取只会读取到一个目录信息（如果需要读取到所有的就得遍历）

DirCreate

创建一个子目录

DirCopy

拷贝目录，可以通过参数指定是否拷贝子目录或者是否覆盖

xRecursive (递归复制)

- TRUE: 复制所有子目录及其内容

- FALSE: 不复制子目录

xOverWrite (覆盖文件)

- TRUE: 会覆盖已存在的文件

- FALSE: 保留已存在的文件不变

xRecursive=false xOverWrite=false

xRecursive=true xOverWrite=false

xRecursive=true xOverWrite=true

DirRename

重命名一个目录（不建议用此功能移动文件，可以使用Rename）

DirRemove

删除一个目录（可能有文件已经被Open打开）

目录中有内容且不选择xRecursive=true就会提示错误NOT_EMPTY

FileOpen

打开一个文件，生成一个句柄，可以用于Read、Write、Close（xExclusive参数codesys不支持）

打开后返回的句柄数字很大，但结果还是正常的

MREADPLUS模式下关闭才会保留文本中原有的数据，而默认的MODE会覆盖导致数据为空

FileClose

关闭文件句柄

FileRead

读取数据到buffer中

FileWrite

将buffer写入文件中

打开文件（模式一定要选mreadplus，否则无法写入，会报错）

写入

关闭

成功写入

FileCopy

拷贝文件，如果不存在则创建，存在根据参数可以选择覆盖

如果文件已存在并且不选择覆盖，那么会返回对应的error code；如果文件已存在并且选择覆盖，那么就会对文件进行覆盖的操作

已存在报错

成功 FileDelete

删除文件，如果Open也会被删除 FileRename

重命名文件，也可以用于移动文件，不能用于移动目录 FileSetPos

移动当前打开文件的读写位置

在打开文件以后设置POS FileGetPos

读取当前打开文件的读写位置

基于上述的SETPOS以后再次GET获取到一致的POS FileEOF

用于判断当前读写位置是否已经到文件末尾

只有在调用完FileRead功能块以后再次调用该接口才会返回EOF的状态，需要配合FileRead一起使用

FileFlush

强制将缓冲区内的数据写入到磁盘中

默认情况下write以后数据并没有直接进入（还处于缓冲区中）使用该功能块后不需要close也就立马看到写入的数据 FileGetAttribute

获得当前打开文件的文件属性，文件属性的定义位于枚举变量ATTRIB

FileGetSize

获取文件名指向文件的文件大小

FileGetTime

获取文件名指向文件的最新修改日期

备注：默认获取的就是UTC时间，如果需要本地时间则需要进行手动做时间的转换

证明：使用codesys的CAA File功能测试结果是一致的