From 2c1aa63afade8818394da0feaf75a450a8a29c86 Mon Sep 17 00:00:00 2001 From: Benedikt Geisler Date: Sun, 7 Jan 2024 19:43:52 +0100 Subject: [PATCH] Fixes #17. 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. --- src/TcLog.sln | 36 +++++++++---------- src/TcLogProj/TcLog/Logger/TcLogCore.TcPOU | 17 +++++++++ .../TcLog/Logger/_Tests/TestWrapper_NET.TcPOU | 23 ++++++++++++ src/TcLogProj/TcLog/TcLog.plcproj | 2 +- .../TcLog/Utils/DynamicStringBuffer.TcPOU | 3 +- .../TcLog/Version/Global_Version.TcGVL | 2 +- src/TcLogTest.NET/PersistingToFileSystem.cs | 18 ++++++++++ 7 files changed, 80 insertions(+), 21 deletions(-) diff --git a/src/TcLog.sln b/src/TcLog.sln index c731d0b..f54c331 100644 --- a/src/TcLog.sln +++ b/src/TcLog.sln @@ -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) @@ -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 diff --git a/src/TcLogProj/TcLog/Logger/TcLogCore.TcPOU b/src/TcLogProj/TcLog/Logger/TcLogCore.TcPOU index 7d1e7b2..e7811f2 100644 --- a/src/TcLogProj/TcLog/Logger/TcLogCore.TcPOU +++ b/src/TcLogProj/TcLog/Logger/TcLogCore.TcPOU @@ -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 ]]> @@ -313,6 +314,7 @@ END_VAR + + + + + + + + + @@ -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 + + ]]> diff --git a/src/TcLogProj/TcLog/TcLog.plcproj b/src/TcLogProj/TcLog/TcLog.plcproj index 0190101..52e0866 100644 --- a/src/TcLogProj/TcLog/TcLog.plcproj +++ b/src/TcLogProj/TcLog/TcLog.plcproj @@ -18,7 +18,7 @@ Benedikt Geisler true TcLog - 0.3.1.0 + 0.4.0.0 false TcLog Benedikt Geisler diff --git a/src/TcLogProj/TcLog/Utils/DynamicStringBuffer.TcPOU b/src/TcLogProj/TcLog/Utils/DynamicStringBuffer.TcPOU index 23e773a..a26b381 100644 --- a/src/TcLogProj/TcLog/Utils/DynamicStringBuffer.TcPOU +++ b/src/TcLogProj/TcLog/Utils/DynamicStringBuffer.TcPOU @@ -100,6 +100,7 @@ END_VAR 0 THEN + IF _fifo.nCount > 0 AND enable THEN lockFileWriteToForceRisingEdge := FALSE; state := PersistToFileState.OpenFile; END_IF diff --git a/src/TcLogProj/TcLog/Version/Global_Version.TcGVL b/src/TcLogProj/TcLog/Version/Global_Version.TcGVL index 2a23506..7b3e7f2 100644 --- a/src/TcLogProj/TcLog/Version/Global_Version.TcGVL +++ b/src/TcLogProj/TcLog/Version/Global_Version.TcGVL @@ -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 ]]> diff --git a/src/TcLogTest.NET/PersistingToFileSystem.cs b/src/TcLogTest.NET/PersistingToFileSystem.cs index 742fefb..0296ad2 100644 --- a/src/TcLogTest.NET/PersistingToFileSystem.cs +++ b/src/TcLogTest.NET/PersistingToFileSystem.cs @@ -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); + } } }