文件存储路径如下
C:\ProgramData\CODESYS\CODESYSControlWinV3x64\BD916EDF\PlcLogic
TYPE ENUM_config_file :
(
nInitial:=0,
nOpen,
nJudgeOpenStatus,
nWrite,
nJudgeWriteStatus,
nRead,
nJudgeReadStatus,
nClose,
nJudgeCloseStatus
);
END_TYPE
TYPE ST_config_file :
STRUCT
control:ST_config_file_control;
parameter:ST_config_file_parameter;
status:ST_config_file_status;
END_STRUCT
END_TYPE
TYPE ST_config_file_control :
STRUCT
bWrite:BOOL;
bRead:BOOL:=TRUE;
END_STRUCT
END_TYPE
TYPE ST_config_file_parameter :
STRUCT
sPathName:STRING:='./PlcData/Config/Parameter';
END_STRUCT
END_TYPE
TYPE ST_config_file_status :
STRUCT
bWriteDone:BOOL;
bReadDone:BOOL;
bError:BOOL;
sComment:WSTRING:="无信息";
END_STRUCT
END_TYPE
VAR_GLOBAL
configFile:ST_config_file;
END_VAR
PROGRAM P_config_file
VAR
nWriteStep:INT;
nReadStep:INT;
hFileWrite:SysFile.RTS_IEC_HANDLE;
hFileRead:SysFile.RTS_IEC_HANDLE;
iecResultWrite:SysFile.RTS_IEC_RESULT;
iecResultRead:SysFile.RTS_IEC_RESULT;
END_VAR
//写入配置信息步
CASE nWriteStep OF
ENUM_config_file.nInitial://复位动作
IF configFile.control.bWrite THEN
configFile.status.bError:=FALSE;
configFile.status.sComment:="";
configFile.status.bWriteDone:=FALSE;
configFile.control.bWrite:=FALSE;
nWriteStep:=ENUM_config_file.nOpen;
END_IF
ENUM_config_file.nOpen://打开文件
hFileWrite:=SysFileOpen(szFile:=configFile.parameter.sPathName , am:=SYSFILE.AM_WRITE_PLUS , pResult:=ADR(iecResultWrite) );
nWriteStep:=ENUM_config_file.nJudgeOpenStatus;
ENUM_config_file.nJudgeOpenStatus://判断文件是否打开
IF hFileWrite=SysFile.RTS_INVALID_HANDLE THEN
configFile.status.bError:=TRUE;
configFile.status.sComment:="写配置打开文件失败";
nWriteStep:=ENUM_config_file.nInitial;
ELSE
SysFileSetPos(hFile:=hFileWrite , ulOffset:=0 );
nWriteStep:=ENUM_config_file.nWrite;
END_IF
ENUM_config_file.nWrite://写入数据
SysFileWrite(hFile:=hFileWrite , pbyBuffer:=ADR(configData) , ulSize:=SIZEOF(configData) , pResult:=ADR(iecResultWrite) );
nWriteStep:=ENUM_config_file.nJudgeWriteStatus;
ENUM_config_file.nJudgeWriteStatus://判断数据是否写入
IF iecResultWrite<>0 THEN
configFile.status.bError:=TRUE;
configFile.status.sComment:="写配置写入配置失败";
nWriteStep:=ENUM_config_file.nInitial;
END_IF
IF iecResultWrite=0 THEN
nWriteStep:=ENUM_config_file.nClose;
END_IF
ENUM_config_file.nClose://关闭文件
iecResultWrite:=SysFileClose(hFile:=hFileWrite);
nWriteStep:=ENUM_config_file.nJudgeCloseStatus;
ENUM_config_file.nJudgeCloseStatus://判断文件是否关闭
IF iecResultWrite<>0 THEN
configFile.status.bError:=TRUE;
configFile.status.sComment:="写配置关闭文件失败";
nWriteStep:=ENUM_config_file.nInitial;
END_IF
IF iecResultWrite=0 THEN
configFile.status.bWriteDone:=TRUE;
configFile.status.sComment:="写配置写入完成";
nWriteStep:=ENUM_config_file.nInitial;
END_IF
END_CASE
//读取配置信息步
CASE nReadStep OF
ENUM_config_file.nInitial://复位动作
IF configFile.control.bRead THEN
configFile.status.bError:=FALSE;
configFile.status.sComment:="";
configFile.status.bReadDone:=FALSE;
configFile.control.bRead:=FALSE;
nReadStep:=ENUM_config_file.nOpen;
END_IF
ENUM_config_file.nOpen://打开文件
hFileRead:=SysFileOpen(szFile:=configFile.parameter.sPathName , am:=SYSFILE.AM_READ_PLUS , pResult:=ADR(iecResultRead) );
nReadStep:=ENUM_config_file.nJudgeOpenStatus;
ENUM_config_file.nJudgeOpenStatus://判断文件是否打开
IF hFileRead=SysFile.RTS_INVALID_HANDLE THEN
configFile.status.bError:=TRUE;
configFile.status.sComment:="读配置打开文件失败";
nReadStep:=ENUM_config_file.nInitial;
ELSE
SysFileSetPos(hFile:=hFileRead , ulOffset:=0 );
nReadStep:=ENUM_config_file.nRead;
END_IF
ENUM_config_file.nRead://读取数据
SysFileRead(hFile:=hFileRead , pbyBuffer:=ADR(configData) , ulSize:=SIZEOF(configData) , pResult:=ADR(iecResultRead) );
nReadStep:=ENUM_config_file.nJudgeReadStatus;
ENUM_config_file.nJudgeReadStatus://判断数据是否读取
IF iecResultRead<>0 THEN
configFile.status.bError:=TRUE;
configFile.status.sComment:="读配置读取配置失败";
nReadStep:=ENUM_config_file.nInitial;
END_IF
IF iecResultRead=0 THEN
nReadStep:=ENUM_config_file.nClose;
END_IF
ENUM_config_file.nClose://关闭文件
iecResultRead:=SysFileClose(hFile:=hFileRead);
nReadStep:=ENUM_config_file.nJudgeCloseStatus;
ENUM_config_file.nJudgeCloseStatus://判断文件是否关闭
IF iecResultRead<>0 THEN
configFile.status.bError:=TRUE;
configFile.status.sComment:="读配置关闭文件失败";
nReadStep:=ENUM_config_file.nInitial;
END_IF
IF iecResultRead=0 THEN
configFile.status.bReadDone:=TRUE;
configFile.status.sComment:="读配置读取完成";
nReadStep:=ENUM_config_file.nInitial;
END_IF
END_CASE