查看: 1466|回复: 10
收起左侧

[教程经验] 高阶篇-文件操作

Felix_Ge 2022-2-21 10:03:41 | 显示全部楼层 |阅读模式
邀请回答

马上注册,享受更多特权

您需要 登录 才可以下载或查看,没有帐号?立即注册   

x
CodeSys中如何对系统盘上的文件进行打开,关闭和读写操作呢?话不多说直接上代码!
PROGRAM POU
VAR
        sFileName:STRING:='/Home/PLC7.txt';
        eFileAOpenMode: ACCESS_MODE;
        pResultFileOpen:  RTS_IEC_RESULT;
        TEST_Write: BOOL;
        hFile: RTS_IEC_HANDLE;
        sWrite: ARRAY[0..4] OF  BYTE;
        sRead: ARRAY[0..4] OF  BYTE;
        pResultWrite: RTS_IEC_RESULT;
        TEST_Read: BOOL;
        pResultRead: RTS_IEC_RESULT;
        pResultFileOpen2: RTS_IEC_RESULT;
        udiPosError: UDINT;
        udiPos: __XWORD;
        udiBytesRead: __XWORD;
        udiWrite: __XWORD;
END_VAR


IF TEST_Write AND NOT TEST_Read  THEN
        eFileAOpenMode:=ACCESS_MODE.AM_WRITE_PLUS;
    IF hFile=0 THEN
                hFile:= SysFileOpen(szFile:=sFileName , am:=eFileAOpenMode , pResult:= ADR(pResultFileOpen));//文件打开操作
    END_IF
        IF hFile<>RTS_INVALID_HANDLE  THEN
                udiPosError := SysFileGetPos(hFile:=hFile, pulPos:=ADR(udiPos));
               
                udiWrite := SysFileWrite(hFile:=hFile, pbyBuffer:=ADR(sWrite), ulSize:=SIZEOF(sWrite), pResult:=ADR(pResultWrite));//文件写操作
        END_IF

END_IF
IF TEST_Read AND NOT TEST_Write  THEN
        eFileAOpenMode:=ACCESS_MODE.AM_READ;
        IF hFile=0 THEN
                hFile:= SysFileOpen(szFile:=sFileName , am:=eFileAOpenMode , pResult:= ADR(pResultFileOpen2));
    END_IF
        IF hFile=RTS_INVALID_HANDLE THEN
                hFile:= SysFileOpen(szFile:=sFileName , am:=ACCESS_MODE.AM_WRITE_PLUS , pResult:= ADR(pResultFileOpen2));//文件打开
    END_IF
        IF hFile<>RTS_INVALID_HANDLE  THEN
                udiPos := SysFileSetPos(hFile:=hFile, ulOffset:=0);
                udiBytesRead :=SysFileRead(hFile:=hFile , pbyBuffer:=ADR(sRead) , ulSize:=SIZEOF(sRead) , pResult:=ADR(pResultRead ));//文件读取
                sRead[udiBytesRead] := 0;
        END_IF

END_IF
IF NOT TEST_Read AND NOT TEST_Write THEN
        IF hFile<>RTS_INVALID_HANDLE AND hFile<>0 THEN
                SysFileClose(hFile:=hFile );//文件关闭
        END_IF
        hFile:=0;
        udiWrite:=0;
        udiBytesRead:=0;
END_IF

以上代码已经经过实际项目测试!稍微封装一下就是一个很好的功能块!注意读写文件一定要谨慎,代码编写有问题可会直接导致PLC崩溃要刷机的哦!

点评

感谢分享  发表于 2023-8-2 08:06




上一篇:纸机负荷分配控制系统的设计与实现
下一篇:高阶篇-共享内存(珍藏版)

已有 0 人打赏作者

回复 邀请回答送花

使用道具 举报

Patrical 2022-7-1 08:04:12 | 显示全部楼层
感谢分享这么好的资料------
回复 送花

使用道具 举报

zhuyi 2022-7-3 08:19:38 | 显示全部楼层
谢谢分享!thanks!谢谢分享!thanks!谢谢分享!thanks!谢谢分享!thanks!
回复 送花

使用道具 举报

zhuyi 2022-7-3 08:34:53 | 显示全部楼层
谢谢分享!thanks!谢谢分享!thanks!谢谢分享!thanks!谢谢分享!thanks!
回复 送花

使用道具 举报

感谢分享,读文件一般什么时候要用?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册   

x
回复 送花

使用道具 举报

Parker 2022-7-3 11:41:21 | 显示全部楼层
内容详细,感谢分享
回复 送花

使用道具 举报

zhongyihua 2022-8-31 10:41:34 | 显示全部楼层
感谢分享这么好的资料------
回复 送花

使用道具 举报

工控小小生 2023-8-8 22:03:34 | 显示全部楼层

感谢分享,楼主太棒了!
回复 送花

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册   

本版积分规则

有技术问题,就上汇川技术社区

INOVANCE汇川技术 公众号

扫码下载掌上汇川APP

全国服务热线:8:30-17:30

4000-300124

苏州地址:江苏省苏州市吴中区越溪友翔路16号

深圳地址:深圳市龙华新区观澜街道高新技术产业园汇川技术总部大厦

Copyright © 2003-2100 汇川技术 Powered by Discuz! X3.4 ( 苏ICP备12002088号 )
快速回复 返回列表 返回顶部