|
邀请回答
马上注册,享受更多特权
您需要 登录 才可以下载或查看,没有帐号?立即注册 ![](source/plugin/zhanmishu_wechat/template/static/img/wechat_login.png)
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崩溃要刷机的哦!
|
上一篇: 纸机负荷分配控制系统的设计与实现下一篇: 高阶篇-共享内存(珍藏版)
|