13423885304 发表于 2021-7-8 15:23:21

CODESYS文件读写案例

使用场景:

随着运动控制的发展,我们需要处理的数据越来越多,在CNC应用中,G代码的文件通常为几k到几百k不等;在电子凸轮采样数据应用中,我们的数据也有几万个。因此,大数据量的存储非常有必要。

我们300-C系列的PLC永久保存只有32KB,但CNC文件都需要100K以上的数据需要掉电保存,为了解决这一矛盾。
解决方案:CODESYS集成CAA Libraries中的CAA_FILE.library提供了文件读写的函数库,此库提供用于访问文件目录系统和文件的功能块。下面本文将介绍该库的使用办法。


本库中包含了变量类型的定义、模块,但本文主要是介绍关键模块的使用,包括FILE.Open 、FILE.Close、FILE.Write 、FILE.Read和FILE.Flush,以及变量类型FILE.MODE、FILE.ERROR。其他模块和变量类型请自行查阅CODESYS帮助文档。
FILE.Open
此功能块打开已存在的文件或创建一个新文件。

模块输入详解
xExecute:触发位,在处理文件时应一直导通;
sFileName:文件名称,类型为string,建议用英文;
eFileMode:访问文件的模式,类型为FILE.MODE;
xExclusive:文件访问数量。TRUE:独占数据访问,只有一个FILE.Open模块可以访问该文件,其他模块不能访问该文件,其他FILE.Open模块访问该文件的时候会出错,xError会为TRUE;FALSE:可以进行多个FILE.Open模块的数据访问;
模块输出详解
xDone:模块执行完成将置1;
xBusy:模块正在执行将置1;
xError:模块执行发生错误时将置1;
eError:错误代码,类型为FILE.ERROR;hFile:返回值是一个文件句柄,可以用作函数块⇘FILE.Read,⇘FILE.Write,⇘FILE.Close中的输入“hFile”;
FILE.Close
         
此功能块终止文件访问,即关闭文件。
模块输入详解
xExecute:触发位;
hFile:文件句柄,由FILE.Open的执行结果中得到;
模块输出详解
xDone:模块执行完成将置1;
xBusy:模块正在执行将置1;
xError:模块执行发生错误时将置1;
eError:错误代码,类型为FILE.ERROR;FILE.Write模块

   
此功能块将数据写入文件,该文件以前应由⇘FILE.Open打开。 指针“pBuffer”指示的存储器区域的内容不应在写入操作期间修改!不会检查包含要写入的字节的存储器结构的大小以及要写入的字节数。
模块输入详解
xExecute:触发位;
xAbort:终止;
hFile:文件句柄,由FILE.Open的执行结果中得到;
udiTimeOut:超时时间;
pBuffer:获得数据的地址,可以使用adr指令;
szSize:要写入的字节数,可以通过sizeof操作检索;
模块输出详解
xDone:模块执行完成将置1;
xBusy:模块正在执行将置1;
xError:模块执行发生错误时将置1;
xAborted:写入文件被中断;
eError:错误代码,类型为FILE.ERROR;

FILE.Read模块   
此功能块读取以前通过⇘FILE.Open打开的文件。 如果读取的字符少于“szBuffer”中指定的字符数,则功能块返回一个活动的“xDone”,并指示“szSize”中当前的字符数。 将不检查要读取的字节的目标存储器结构的大小和要读取的字节数。
模块输入详解
xExecute:触发位;
xAbort:终止;
udiTimeOut:超时时间;
hFile:文件句柄,由FILE.Open的执行结果中得到;
pBuffer:存入数据的地址,可以使用adr指令;
szBuffer:要读取的最大字节数,可以通过sizeof操作得到;
模块输出详解
xDone:模块执行完成将置1;
xBusy:模块正在执行将置1;
xError:模块执行发生错误时将置1;
xAborted:写入文件被中断;
eError:错误代码,类型为FILE.ERROR;szSize:读取到的数据字节数。

FILE.Flush模块   此功能块将数据从文件系统的高速缓存拷贝到磁盘,调用此功能块可确保数据将存储在磁盘上。
模块输入详解xExecute:触发位;
hFile:文件句柄,由FILE.Open的执行结果中得到;
模块输出详解
xDone:模块执行完成将置1;
xBusy:模块正在执行将置1;
xError:模块执行发生错误时将置1;
eError:错误代码,类型为FILE.ERROR;
FILE.MODE类型
文件的访问模式,一共有四种;
FILE.MODE.MWRITE:写访问; 文件将被覆盖或创建;
FILE.MODE.MREAD:读访问; 文件将被打开以供阅读;
FILE.MODE.MRDWR:读写访问; 该文件将被覆盖或创建;
FILE.MODE.MAPPD:文件将以WRITE模式打开,但写入的数据将附加在文件的末尾;

FILE.ERROR类型
此数据结构描述了在处理CAA_File.library的函数时可能发生的错误。 错误范围5100 - 5199保留用于CAA.File.library。
下面是具体是使用流程
读操作:打开文件(FILE.MODE.MREAD模式)--读取数据--关闭文件
写操作:打开或新建文件(FILE.MODE.MRDWR模式)--写入数据--保存数据--关闭文件
根据读写文件的流程,本文提供一个相应功能的功能块和库文件。具体如下:
使用办法:将文件名、超时时间、数据首地址(或存放数据的首地址)和要处理的字节数填写好之后,导通写数据或者读数据即可。
本功能块分为两个小块:文件读写和ACT块。其中文件读写是负责程序流程部分,而ACT块是负责调用相应的FILE模块。
具体可以结合附件学习









页: [1]
查看完整版本: CODESYS文件读写案例