文件存储路径如下
C:\ProgramData\CODESYS\CODESYSControlWinV3x64\BD916EDF\PlcLogic
TYPE ENUM_log :
(
nInitial:=0,
nOpen,
nJudgeOpenStatus,
nWrite,
nJudgeWriteStatus,
nClose,
nJudgeCloseStatus
);
END_TYPE
TYPE ST_log :
STRUCT
control:ST_log_control;
parameter:ST_log_parameter;
status:ST_log_status;
FB:FB_log;
END_STRUCT
END_TYPE
TYPE ST_log_control :
STRUCT
bWrite:BOOL;
END_STRUCT
END_TYPE
TYPE ST_log_parameter :
STRUCT
sPathName:STRING:='./PlcData/Log/';
sDescription:WSTRING:="无信息";
END_STRUCT
END_TYPE
TYPE ST_log_status :
STRUCT
bWriteDone:BOOL;
bError:BOOL;
sComment:WSTRING;
END_STRUCT
END_TYPE
FUNCTION_BLOCK FB_log
VAR_INPUT
LogControl:ST_log_control;
LogParameter:ST_log_parameter;
LogTime:STRING;
END_VAR
VAR_OUTPUT
LogStatus:ST_log_status;
END_VAR
VAR
sFileName:STRING;
sData:WSTRING;
sDataUTF8:STRING(255);
hFileWrite:SysFile.RTS_IEC_HANDLE;
iecResultWrite:SysFile.RTS_IEC_RESULT;
END_VAR
//文件名
sFileName:=CONCAT(MID(STR:=LogTime , LEN:=10 , POS:=1 ),'.TXT');
sFileName:=CONCAT(LogParameter.sPathName,sFileName);
//写入数据处理
sData:=WCONCAT(STRING_TO_WSTRING(LogTime)," ");
sData:=WCONCAT(sData,LogParameter.sDescription);
sData:=WCONCAT(sData,STRING_TO_WSTRING('$n'));
sDataUTF8:='';
ConvertUTF16toUTF8(sourceStart:=ADR(sData) , targetStart:=ADR(sDataUTF8) , dwTargetBufferSize:=SIZEOF(sData) , bStrictConversion:=TRUE );
IF LogControl.bWrite THEN
hFileWrite:=SysFileOpen(szFile:=sFileName , am:=SYSFILE.AM_APPEND_PLUS , pResult:=ADR(iecResultWrite) );
SysFileWrite(hFile:=hFileWrite , pbyBuffer:=ADR(sDataUTF8) , ulSize:=INT_TO_UDINT(LEN(sDataUTF8)) , pResult:=ADR(iecResultWrite) );
SysFileClose(hFile:=hFileWrite);
END_IF
VAR_GLOBAL
//报警记录日志
alarmLog:ARRAY[0..indexAlarmEnd-1] OF ST_log;
END_VAR
PROGRAM P_log
VAR
i:INT;
END_VAR
//******报警记录******//
FOR i:=1 TO indexAlarmEnd-1 BY 1 DO
//复位写log
IF alarmLog[i].control.bWrite THEN
alarmLog[i].control.bWrite:=FALSE;
END_IF
//报警上升沿触发信息
IF alarm[i].rTrig.Q THEN
alarmLog[i].control.bWrite:=TRUE;
alarmLog[i].parameter.sDescription:=WCONCAT("报警码:",STRING_TO_WSTRING(FUN_int_string(alarm[i].nCode,4)));
alarmLog[i].parameter.sDescription:=WCONCAT(alarmLog[i].parameter.sDescription," 报警信息:");
alarmLog[i].parameter.sDescription:=WCONCAT(alarmLog[i].parameter.sDescription,alarm[i].sComment);
END_IF
//报警下降沿触发信息
IF alarm[i].fTrig.Q THEN
alarmLog[i].control.bWrite:=TRUE;
alarmLog[i].parameter.sDescription:=WCONCAT("报警码:",STRING_TO_WSTRING(FUN_int_string(alarm[i].nCode,4)));
alarmLog[i].parameter.sDescription:=WCONCAT(alarmLog[i].parameter.sDescription," 报警信息:");
alarmLog[i].parameter.sDescription:=WCONCAT(alarmLog[i].parameter.sDescription,alarm[i].sComment);
alarmLog[i].parameter.sDescription:=WCONCAT(alarmLog[i].parameter.sDescription,"--报警消除");
END_IF
//报警LOG功能块
alarmLog[i].FB(
LogControl:=alarmLog[i].control ,
LogParameter:=alarmLog[i].parameter ,
LogTime:=sSystemTime ,
LogStatus=>alarmLog[i].status );
END_FOR