Skip to content

Commit

Permalink
Fixes #17.
Browse files Browse the repository at this point in the history
Adds new property TimeInfoReady to TcLogCore to signal when valid time information is available.
Buffers messages until valid time information is available, so filenames should always be correct.
  • Loading branch information
bengeisler committed Jan 7, 2024
1 parent 50ca4fb commit 2c1aa63
Show file tree
Hide file tree
Showing 7 changed files with 80 additions and 21 deletions.
36 changes: 18 additions & 18 deletions src/TcLog.sln
Original file line number Diff line number Diff line change
Expand Up @@ -39,24 +39,6 @@ Global
{84E2C694-C6B7-48C0-A46A-93E9E79E1E4B}.Release|TwinCAT RT (x64).Build.0 = Release|TwinCAT RT (x64)
{84E2C694-C6B7-48C0-A46A-93E9E79E1E4B}.Release|TwinCAT RT (x86).ActiveCfg = Release|TwinCAT RT (x86)
{84E2C694-C6B7-48C0-A46A-93E9E79E1E4B}.Release|TwinCAT RT (x86).Build.0 = Release|TwinCAT RT (x86)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Debug|Any CPU.ActiveCfg = Debug|TwinCAT OS (ARMT2)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Debug|TwinCAT CE7 (ARMV7).ActiveCfg = Debug|TwinCAT CE7 (ARMV7)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Debug|TwinCAT CE7 (ARMV7).Build.0 = Debug|TwinCAT CE7 (ARMV7)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Debug|TwinCAT OS (ARMT2).ActiveCfg = Debug|TwinCAT OS (ARMT2)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Debug|TwinCAT OS (ARMT2).Build.0 = Debug|TwinCAT OS (ARMT2)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Debug|TwinCAT RT (x64).ActiveCfg = Debug|TwinCAT RT (x64)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Debug|TwinCAT RT (x64).Build.0 = Debug|TwinCAT RT (x64)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Debug|TwinCAT RT (x86).ActiveCfg = Debug|TwinCAT RT (x86)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Debug|TwinCAT RT (x86).Build.0 = Debug|TwinCAT RT (x86)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Release|Any CPU.ActiveCfg = Release|TwinCAT OS (ARMT2)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Release|TwinCAT CE7 (ARMV7).ActiveCfg = Release|TwinCAT CE7 (ARMV7)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Release|TwinCAT CE7 (ARMV7).Build.0 = Release|TwinCAT CE7 (ARMV7)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Release|TwinCAT OS (ARMT2).ActiveCfg = Release|TwinCAT OS (ARMT2)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Release|TwinCAT OS (ARMT2).Build.0 = Release|TwinCAT OS (ARMT2)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Release|TwinCAT RT (x64).ActiveCfg = Release|TwinCAT RT (x64)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Release|TwinCAT RT (x64).Build.0 = Release|TwinCAT RT (x64)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Release|TwinCAT RT (x86).ActiveCfg = Release|TwinCAT RT (x86)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Release|TwinCAT RT (x86).Build.0 = Release|TwinCAT RT (x86)
{534B7BB3-9B49-4F2B-86CC-2317930EA23D}.Debug|Any CPU.ActiveCfg = Debug|TwinCAT RT (x64)
{534B7BB3-9B49-4F2B-86CC-2317930EA23D}.Debug|Any CPU.Build.0 = Debug|TwinCAT RT (x64)
{534B7BB3-9B49-4F2B-86CC-2317930EA23D}.Debug|TwinCAT CE7 (ARMV7).ActiveCfg = Debug|TwinCAT CE7 (ARMV7)
Expand All @@ -77,6 +59,24 @@ Global
{534B7BB3-9B49-4F2B-86CC-2317930EA23D}.Release|TwinCAT RT (x64).Build.0 = Release|TwinCAT RT (x64)
{534B7BB3-9B49-4F2B-86CC-2317930EA23D}.Release|TwinCAT RT (x86).ActiveCfg = Release|TwinCAT RT (x86)
{534B7BB3-9B49-4F2B-86CC-2317930EA23D}.Release|TwinCAT RT (x86).Build.0 = Release|TwinCAT RT (x86)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Debug|Any CPU.ActiveCfg = Debug|TwinCAT OS (ARMT2)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Debug|TwinCAT CE7 (ARMV7).ActiveCfg = Debug|TwinCAT CE7 (ARMV7)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Debug|TwinCAT CE7 (ARMV7).Build.0 = Debug|TwinCAT CE7 (ARMV7)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Debug|TwinCAT OS (ARMT2).ActiveCfg = Debug|TwinCAT OS (ARMT2)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Debug|TwinCAT OS (ARMT2).Build.0 = Debug|TwinCAT OS (ARMT2)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Debug|TwinCAT RT (x64).ActiveCfg = Debug|TwinCAT RT (x64)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Debug|TwinCAT RT (x64).Build.0 = Debug|TwinCAT RT (x64)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Debug|TwinCAT RT (x86).ActiveCfg = Debug|TwinCAT RT (x86)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Debug|TwinCAT RT (x86).Build.0 = Debug|TwinCAT RT (x86)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Release|Any CPU.ActiveCfg = Release|TwinCAT OS (ARMT2)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Release|TwinCAT CE7 (ARMV7).ActiveCfg = Release|TwinCAT CE7 (ARMV7)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Release|TwinCAT CE7 (ARMV7).Build.0 = Release|TwinCAT CE7 (ARMV7)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Release|TwinCAT OS (ARMT2).ActiveCfg = Release|TwinCAT OS (ARMT2)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Release|TwinCAT OS (ARMT2).Build.0 = Release|TwinCAT OS (ARMT2)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Release|TwinCAT RT (x64).ActiveCfg = Release|TwinCAT RT (x64)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Release|TwinCAT RT (x64).Build.0 = Release|TwinCAT RT (x64)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Release|TwinCAT RT (x86).ActiveCfg = Release|TwinCAT RT (x86)
{39E514BF-8337-4E82-99CA-D7D99BEEE7FE}.Release|TwinCAT RT (x86).Build.0 = Release|TwinCAT RT (x86)
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
17 changes: 17 additions & 0 deletions src/TcLogProj/TcLog/Logger/TcLogCore.TcPOU
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ VAR
_config : LoggingConfiguration; // Logging configuration. Is set by invoking configuration methods.
_error : Error; // Contains information about internal error.
_busy : BOOL; // Logger is busy, typically with writing logs to the file system.
_timeInfoReady : BOOL := FALSE; // Set to true once the time information is available
END_VAR
]]></Declaration>
<Implementation>
Expand Down Expand Up @@ -313,6 +314,7 @@ END_VAR
<Implementation>
<ST><![CDATA[// Generate time data (shared state)
dateTime();
IF dateTime.Done THEN _timeInfoReady := TRUE; END_IF
_localTimeAsSystemTime := dateTime.AsLocalSystemTime;
_localTimeAsString := dateTime.AsLocalSystemTimeString;
Expand All @@ -339,6 +341,7 @@ END_IF
// Persist logging messages to file
_logCache.PersistToFile(
TimeInfoReady,
fileNameStringBuilder
.Reset()
.Append(_config.FilePath)
Expand Down Expand Up @@ -402,6 +405,20 @@ _config.RollingInterval := interval;
SetRollingInterval REF= THIS^;]]></ST>
</Implementation>
</Method>
<Property Name="TimeInfoReady" Id="{b76a0ec9-7958-4ad1-9f57-6632e2828ea1}">
<Declaration><![CDATA[/// `TimeInfoReady` evaluates to `TRUE` once the time information used by determine
/// the timestamp for the message is available.
{attribute 'monitoring':='call'}
PROPERTY TimeInfoReady : BOOL]]></Declaration>
<Get Name="Get" Id="{98f342b2-5e83-4e9b-9a60-9eecedc01f2b}">
<Declaration><![CDATA[VAR
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[TimeInfoReady := _timeInfoReady;]]></ST>
</Implementation>
</Get>
</Property>
<Method Name="TimestampFormat" Id="{ae9acdda-63d0-4143-b862-4bb5f08b434d}">
<Declaration><![CDATA[/// Configuration method.
/// Sets the format of the timestamp in the file name.
Expand Down
23 changes: 23 additions & 0 deletions src/TcLogProj/TcLog/Logger/_Tests/TestWrapper_NET.TcPOU
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
<Declaration><![CDATA[FUNCTION_BLOCK TestWrapper_NET
VAR
_coreLogger : TcLogCore(BufferSize:=50 * 50 * (UDINT_TO_DINT(Tc2_System.MAX_STRING_LENGTH) + INT_TO_DINT(Constants.FifoOverhead)));
_coreLoggerFirstCycle : TcLogCore(BufferSize:=50 * 50 * (UDINT_TO_DINT(Tc2_System.MAX_STRING_LENGTH) + INT_TO_DINT(Constants.FifoOverhead)));
_loggerFirstCycle : TcLog;
_logger : TcLog;
_flushCache : BOOL;
Expand All @@ -13,6 +15,7 @@ VAR
_cycles : INT;
_i : INT;
_persistenceTimeStaysWithinBounds : F_TRIG;
_isFirstCycle: BOOL := TRUE;
// Exchanged variables with .NET tests
FilePath : STRING;
Expand Down Expand Up @@ -58,6 +61,7 @@ VAR
Persistance_time_stays_within_bounds : BOOL;
Duration_in_cylces : DINT := 1;
END_VAR
]]></Declaration>
<Implementation>
Expand Down Expand Up @@ -207,6 +211,25 @@ IF Persistance_time_stays_within_bounds THEN
END_IF
END_IF
// Check first cpu cycle
_coreLoggerFirstCycle
.IncludeInstancePath()
.MinimumLevel(LogLevels.Warning)
.SetDelimiter(Delimiter)
.SetRollingInterval(RollingIntervals.Hourly)
.DeleteLogFilesAfterDays(1)
.TimestampFormat('_YYYYMMDD-hh-mm-ss_')
.WriteToAds()
.WriteToFile('C:\UnitTestFirstCycle\', 'firstCycle.txt')
.RunLogger();
_loggerFirstCycle.SetLogger(_coreLoggerFirstCycle);
IF _isFirstCycle THEN
_loggerFirstCycle.Error('Log in first cycle');
_isFirstCycle := FALSE;
END_IF
]]></ST>
</Implementation>
Expand Down
2 changes: 1 addition & 1 deletion src/TcLogProj/TcLog/TcLog.plcproj
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
<Company>Benedikt Geisler</Company>
<Released>true</Released>
<Title>TcLog</Title>
<ProjectVersion>0.3.1.0</ProjectVersion>
<ProjectVersion>0.4.0.0</ProjectVersion>
<CombineIds>false</CombineIds>
<DefaultNamespace>TcLog</DefaultNamespace>
<Author>Benedikt Geisler</Author>
Expand Down
3 changes: 2 additions & 1 deletion src/TcLogProj/TcLog/Utils/DynamicStringBuffer.TcPOU
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ END_VAR
<Declaration><![CDATA[{attribute 'hide_all_locals'}
METHOD PersistToFile : BOOL
VAR_INPUT
enable: BOOL; // TRUE starts persistence mechanism
fileName : Tc2_System.T_MaxString; // File name including its path
END_VAR
VAR_INST
Expand Down Expand Up @@ -136,7 +137,7 @@ END_VAR
// *** I D L E ***
IF state = PersistToFileState.Idle THEN
lockFileWriteToForceRisingEdge := FALSE;
IF _fifo.nCount > 0 THEN
IF _fifo.nCount > 0 AND enable THEN
lockFileWriteToForceRisingEdge := FALSE;
state := PersistToFileState.OpenFile;
END_IF
Expand Down
2 changes: 1 addition & 1 deletion src/TcLogProj/TcLog/Version/Global_Version.TcGVL
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
// This function has been automatically generated from the project information.
VAR_GLOBAL CONSTANT
{attribute 'const_non_replaced'}
stLibVersion_TcLog : ST_LibVersion := (iMajor := 0, iMinor := 3, iBuild := 1, iRevision := 0, nFlags := 1, sVersion := '0.3.1.0');
stLibVersion_TcLog : ST_LibVersion := (iMajor := 0, iMinor := 4, iBuild := 0, iRevision := 0, nFlags := 1, sVersion := '0.4.0.0');
END_VAR
]]></Declaration>
</GVL>
Expand Down
18 changes: 18 additions & 0 deletions src/TcLogTest.NET/PersistingToFileSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -380,5 +380,23 @@ public async void Persistance_time_stays_within_bounds(int cycleCount, int logCo
fixture.TcClient.DeleteVariableHandle(hLogCount);
fixture.TcClient.DeleteVariableHandle(hDurationInCycles);
}

[Fact]
public void Persistence_in_first_cpu_cycle_has_correct_time_data_in_filename()
{
var files = Directory.GetFiles("C:\\UnitTestFirstCycle\\");
var year = DateTime.Now.Year;
var month = DateTime.Now.Month;
var day = DateTime.Now.Day;

foreach (var f in files) {
Assert.DoesNotContain("1970", f);
Assert.Contains(year.ToString(), f);
Assert.Contains(month.ToString(), f);
Assert.Contains(day.ToString(), f);
}

foreach (var f in files) File.Delete(f);
}
}
}

0 comments on commit 2c1aa63

Please sign in to comment.