codesys 文件配置程序

文件存储路径如下

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值