Codesys-读写文件

一:写文件

1.添加库

点击库管理器–点击添加库
在这里插入图片描述
点击高级
在这里插入图片描述
搜索添加,需要添加的库有:

StringUtils,3.3.15.0
SysFile,3.5.15.0
SysTypes2 Interfaces,3.5.4.0
Util,3.5.15.0

在这里插入图片描述

2.添加功能块

在这里插入图片描述
编写功能块WriteData_Fun代码
局部变量:

FUNCTION_BLOCK WriteData_Fun
VAR_INPUT
	input_String:WSTRING;
	start:UINT;//文件写入开始位置
END_VAR

VAR_OUTPUT
	end:UINT;//文件写入结束位置
END_VAR

VAR
	xWrite         : BOOL:=TRUE;//文件写入标志
    szFileName     : STRING(128) := 'E:\CoDeSys/Test1.txt';//文件存储路径和名称
    hFile          : SysTypes.RTS_IEC_HANDLE := SysTypes.RTS_INVALID_HANDLE;//文件句柄:初始化为无效的文件句柄
    iecResult      : SysTypes.RTS_IEC_RESULT;//写文件结果
    wsTextLine     : WSTRING(10) := "Übersetzer";
    sUTF8TextLine  : STRING;//用于存储转换后的UTF-8编码字符串
    udiPos         : __XWORD;
    udiWrite       : __XWORD;
END_VAR

程序:

IF xWrite THEN
	//打开指定路径的文件,并将文件句柄保存在hFile中,同时通过iecResult记录函数执行的结果
	//hFile存储打开文件后返回的文件句柄,如果打开文件成功,hFile获得有效的文件句柄,否则返回无效的句柄值。
	//文件句柄是操作系统为文件分配的唯一标识符,之后的文件操作需要使用这个句柄来标识文件
	//am:指定文件的打开方式,SYSFILE.AM_APPEND_PLUS表示以追加写入的方式打开文件,即在文件末尾添加内容,不会覆盖原有内容
	//pResult:指针参数,用于接收函数执行的结果
    hFile := SysFileOpen(szFile:=szFileName, am:=SYSFILE.AM_APPEND_PLUS , pResult:=ADR(iecResult));
    IF hFile <> RTS_INVALID_HANDLE    THEN
		//将字符串从UTF16编码转换为UTF8编码
		//sourceStart:输入参数,指向UTF-16编码字符串的起始位置
		//targetStart:输出参数,指向UTF-8编码字符串的起始位置
		//dwTargetBufferSize:输入参数,表示目标缓冲区的大小,即可以容纳转换后的UTF-8编码字符串的最大字节数
		//bStrictConversion: 这是一个布尔型的输入参数,用于指定转换是否采用严格模式。如果为TRUE,则表示采用严格模式进行转换,如果为FALSE,则表示采用宽松模式进行转换。
        Stu.ConvertUTF16toUTF8(sourceStart := ADR(input_String), targetStart := ADR(sUTF8TextLine), dwTargetBufferSize := SIZEOF(input_String), bStrictConversion := TRUE);
		//sysfileSetpos:用于设置文件指针的位置,即将文件指针定位到指定的偏移量位置。
		//ulOffset: 输入参数,它表示要设置文件指针的偏移量位置。即用于表示文件指针要定位的起始位置。
		sysfileSetpos(hFile:=hFile,ulOffset:= start);
		//SysFileWrite函数:将数据从指定的缓冲区写入到文件中,并返回写入的字节数。这个值会被赋给udiWrite
		//pbyBuffer: 输入参数,它是指向要写入文件的数据缓冲区的指针。
		//ulSize: 输入参数,表示要写入的数据的大小(字节数)。
		//pResult: 输出参数,用于存储函数执行的结果。
		udiWrite := SysFileWrite(hFile:=hFile, pbyBuffer:=ADR(sUTF8TextLine), ulSize:=INT_TO_UDINT(LEN(sUTF8TextLine)), pResult:=ADR(iecResult));
		//关闭文件
        iecResult  := SysFileClose(hFile:=hFile);
		//更新文件写入的结束位置
		end:=start+LEN(WSTRING_TO_STRING(input_String));
    END_IF
END_IF

3.编写主程序PLC_PRG代码

局部变量:

PROGRAM PLC_PRG
VAR
	fbWriteFile	:	WriteData_Fun;//实例化WriteData_Fun功能块
	i: INT;
	start:INT;
	end: INT;
	sign_sta:BOOL:=TRUE;
	content_str: WSTRING(INT#14);//INT#14 :可以存储14个Unicode字符
END_VAR

程序:

IF sign_sta = TRUE THEN
	FOR i:=1 TO 6 BY 1 DO
		content_str:="Hello world! ";//空格也可以识别,很舒服的编码
		fbWriteFile(input_String:=content_str,start:=start,end=>end);
		start:=end;
	END_FOR	
	sign_sta:=FALSE;
END_IF

4.结果:

在这里插入图片描述
源码资源获取见文章末尾。不着急的话可以评论区私信

二:读文件

1.添加库

具体添加库的方式参照一:写文件。需要添加的库有:

StringUtils,3.3.15.0
SysFile,3.5.15.0
SysTypes2 Interfaces,3.5.4.0
Util,3.5.15.0

2.编写主程序PLC_PRG代码

局部变量

PROGRAM PLC_PRG 
VAR
    xRead         :  BOOL:=TRUE;
    szFileName     : STRING(128) := 'E:\CoDeSys\Read_TXT/test2.txt';//文件的路径和名称,根据你的个人情况进行修改
    hFile          : SysTypes.RTS_IEC_HANDLE;//句柄
    iecResult      : SysTypes.RTS_IEC_RESULT;//记录函数执行的结果
    recive         : STRING;//存放读取文件的内容
    udiRead       : __XWORD;
	udiSize		: LWORD; //用来存储文件的大小
END_VAR

程序

IF xRead THEN
    //打开指定路径的文件,并将文件句柄保存在hFile中,同时通过iecResult记录函数执行的结果
	//hFile存储打开文件后返回的文件句柄,如果打开文件成功,hFile获得有效的文件句柄,否则返回无效的句柄值。
	//文件句柄是操作系统为文件分配的唯一标识符,之后的文件操作需要使用这个句柄来标识文件
	//am:指定文件的打开方式,SYSFILE.AM_READ,以只读的方式打开文件
	//pResult:指针参数,用于接收函数执行的结果	
    hFile := SysFileOpen(szFile:=szFileName, am:=SYSFILE.AM_READ , pResult:=ADR(iecResult));
    IF hFile <> RTS_INVALID_HANDLE    THEN  //hFile不是无效句柄,说明成功打开文件  
		//SysFileGetSize函数获取文件的大小,并将结果存储在udisize变量中
		udisize:=SysFileGetSize(szFileName:=szFileName,pResult:=ADR(iecResult));
		//将文件中的内容读取到指定的缓冲区中。成功读取时,将返回udiRead表示实际读取的字节数,失败时将返回错误代码,并将错误状态存储在iecResult变量中。
		//pbyBuffer是用于存储读取内容的缓冲区
		//ulSize是要读取的字节数
		//pResult: 这是指向结果的指针,用于接收操作的结果状态。
		udiRead := SysFileread(hFile:=hFile, pbyBuffer:=ADR(recive), ulSize:=udiSize, pResult:=ADR(iecResult));
		//关闭文件
        iecResult  := SysFileClose(hFile:=hFile);		
    END_IF
END_IF
xRead:=FALSE;

3.可视化输出显示

可视化输出显示操作参照往期文章:
链接: Codesys-实例代码-可视化输出变量——Hello world!
在这里插入图片描述

4.结果显示

在这里插入图片描述
读和写两个工程资源获取
提取码2023: 获取资源

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
### 回答1: CODESYS v3是一种PLC编程软件,常用于工业自动化控制系统中。该软件可以帮助用户开发控制系统应用程序。对于想要掌握CODESYS v3编程的人来说,《CODESYS-v3基础编程指南》是一个非常好的教材资料。 该指南从基础概念开始讲解,详细介绍了CODESYS v3编程的各种基础知识,包括系统介绍、安装、界面布局、编程语言、变量及数据类型、视觉化程序等方面,并提供了大量实例和具体操作步骤。通过这些内容,读者可以逐步掌握如何在CODESYS v3中进行编程,建立自己的应用程序。 与其他相关教材相比,《CODESYS-v3基础编程指南》有以下优势:首先,它是一篇入门级别的教程,对于没有任何基础的初学者来说,非常易于理解和掌握;其次,该指南的实例非常丰富,这将帮助读者更好地理解和应用概念;最后,本指南是由CODESYS v3的开发者所编写的,可以为读者提供更深入、更权威的解析。整体而言,CODESYS-v3基础编程指南是一本非常实用的教材和工具书,适用于所有想要学习CODESYS v3编程的人。 ### 回答2: CODESYS V3是一款建立在IEC 61131-3标准上的编程工具,它是一种广泛应用于自动化控制和工业自动化领域的编程语言。在工业自动化中,CODESYS V3可用于编写具有实时性要求的控制程序,如PLC控制程序和机器人控制程序等。 基础编程指南是CODESYS V3的入门级教程,它解释了如何使用该工具来编写PLC控制程序。该教程涵盖了工具的基础知识、程序设计和调试等方面。下载并学习该指南可以帮助用户深入了解如何使用CODESYS V3进行编程,并掌握使用该工具编写PLC控制程序的基本技能。 在学习CODESYS V3时,有一些基本的编程技能是必不可少的。需要具备使用计算机的基本技能,例如数据输入、鼠标操纵和文件夹操作等。学习者还需要具备一定的编程基础,如掌握基础的编程语法和概念,如变量、数据类型、条件语句、循环语句等。 总的来说,CODESYS V3是一款非常实用的编程工具,可以为工业自动化带来更高的效率和更精细的控制。基础编程指南是学习CODESYS V3的一个好的起点,也是掌握PLC控制编程的必不可少的工具。 ### 回答3: CODESYS V3是一款极受欢迎的工业自动化软件开发工具,其具有可扩展和开放式体系结构,允许用户自定义低级别驱动和功能块。随着越来越多的企业和产品开始使用CODESYS V3,学习和熟练掌握该软件的编程方法变得尤为重要。 CODESYS V3的基础编程指南则成为了初学者学习该软件编程的主要资料之一。该指南具有完整的教学流程,使用易于理解的语言和示例来解释各种编程功能。对于有编程经验的人来说,该指南还提供了足够数量的例子和代码片段来增强他们现有的技能。 CODESYS V3的基础编程指南的内容包括软件开发环境的介绍、PLC编程的基础知识、各种编程方法以及如何创建和启动PLC程序。它也覆盖了不同类型的编程块,如函数块、结构体和类型等。此外,该指南也讨论了通信、文件管理、调试和错误处理等主题。 CODESYS V3的基础编程指南能够帮助PLC编程初学者更好地理解该软件并开始使用它进行编程工作。无论是需要快速熟练地掌握该软件的新手,还是有一定编程经验的专业人士,本指南都是一个非常有用的学习工具。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值