Hi everyone,
I wrote a logging routine which writes a set of variables in a text file at the end of each robot cycle (approx every 12 seconds)
The line is just an array of 8 REAL numbers separated by a comma.
The problem is that exactly every 256 lines written, the routine fails to write the line feed char and this messes up the log file a little.
How do you usually manage writing files?
Diglo
Logging routine:
Code
GLOBAL DEF log_write( )
INT HANDLE
DECL STATE_T STAT
DECL MODUS_T MODE
MODE=#SYNC
HANDLE=0
;open file
CWRITE($FCT_CALL, STAT, MODE, "krl_fopen", "robot1_log.txt", "a", HANDLE)
;write first 8 variables
CWRITE($FCT_CALL, STAT, MODE, "krl_fprintf", HANDLE, "%f, %f, %f, %f, %f, %f, %f, %f, ", log_value[1], log_value[2], log_value[3], log_value[4], log_value[5], log_value[6], log_value[7], log_value[8] )
;write timestamp (seconds from 01/01/2015) and CR-LF
CWRITE($FCT_CALL, STAT, MODE, "krl_fprintf", HANDLE, "%d%s", ($DATE.DAY*86400+$DATE.MONTH*2678400+$DATE.HOUR*3600+$DATE.MIN*60+$DATE.SEC), "'H0D''H0A'")
;close file
CWRITE($FCT_CALL, STAT, MODE, "krl_fclose", HANDLE)
END
Display More
Example of the "corrupted" logfile in which one line feed is missing:
Code
-1.297743, 101.193565, 86.616020, 76.114006, 38.653564, 20.645895, 45.200001, 0.000000, 10469919
-1.103877, 100.188080, 87.054398, 75.480324, 20.644266, 2.700684, 45.200001, 0.000000, 10469938
-1.118345, 101.173325, 87.314804, 75.374710, 56.705040, 38.651871, 45.200001, 0.000000, -1.312211, 101.248550, 86.892365, 75.098373, 50.690231, 32.638638, 45.200001, 0.000000, 10469976
-1.257234, 101.346931, 86.937210, 76.747696, -87.287987, -93.287041, 45.200001, 0.000000, 10469994
-1.168982, 100.502029, 78.243637, 82.387154, -141.326660, -141.326660, 45.200001, 0.000000, 10470026
-1.006945, 101.299194, 87.825516, 76.840286, 32.638752, 14.654686, 45.200001, 0.000000, 10470045