Epoch time realtime component help

More
2 years 11 months ago #284682 by dberndt
Hello all,

I'm looking to get epoch time (seconds since linux epoch jan1, 1970)  onto a float pin so that I can compare that with the epoch time a userspace component will generate in post-processing of some halsample'd data. Basically so I can understand the lag and re-stitch the data offline.

I've never written a realtime component before and my C hasn't been used much in a couple of decades. Perhaps I could get some assistance?
Code:
pin out float totalmseconds "totalmseconds"; variable int curtime; function _; ;; #include <stdio.h> #include <stdint.h> #include <sys/time.h> FUNCTION(_) {     struct timeval tv;     struct timezone tz;     gettimeofday(&tv, &tz);     curtime = (long int)tv.tv_sec;     //subtract 1699.... just to make the float smaller so it'll print more nicely in halmeter/halcmd/etc     totalmseconds = (float)curtime - 1699226972; }


This does get a number into the the output pin, but it does not seem to update every time the function is called. Though it does seem to work on occasion for a few seconds, or that is just a C induced hallucination.

I eventually need to add milliseconds to this, but that seems trivial to pull out of tv_usec.

Can anyone point me in the right direction?


During this coding journey I found it pretty annoying that larger floats just print in exponent notation in all the linuxcnc tools. How do I go about viewing the full value of a float in halmeter, halcmd, anything? Is there a flag/option for this somewhere?

Thanks,
-Dave

Edit I'm compiling with halcompile mycomp.comp followed by halcompile --install mycomp.comp
Running 2.9pre1 RIP on Mint 21.
 

Please Log in to join the conversation.

More
2 years 11 months ago #284686 by rodw
I don't think its necessary to use any conversion to get epocch time
Code:
#include <stdio.h> #include <time.h> int main () { time_t seconds; seconds = time(NULL); printf("Hours since January 1, 1970 = %ld\n", seconds/3600); return(0); }

Ref:  www.tutorialspoint.com/c_standard_library/c_function_time.htm

Please Log in to join the conversation.

More
2 years 11 months ago #284838 by dberndt
Thanks. I got it working. I'll leave the ugly code below, it's got a bunch of extra logic in there that didn't end up being used but I don't want to clean it up and potentially break it and post it as code I'm actually using when I'm not.

I'd still love to see a way to display floats in a more useful way. Displaying epoch seconds as a float is kind of disasterous. 1.699373e+09 is just not that helpful...


Code:
// Output Pins pin out float totalmseconds "totalmsecondsaaa"; variable int curtime; variable int curms; variable int firstrun = 0; variable int counter = 0; variable float elapsedtime = 0; function _; ;; #include <stdio.h> #include <stdint.h> #include <sys/time.h> struct timeval tv; struct timezone tz; FUNCTION(_) { //totalmseconds = (float)curtime - 1699226972; if (firstrun == 0) { firstrun = 1; } elapsedtime += period * 0.000000001; if (counter % 1 == 0) { counter = 1; gettimeofday(&tv, &tz); curtime = (long int)tv.tv_sec; curms = (long int)tv.tv_usec; //printf("***** curtime: %d %d\n", curtime, curms); //printf("%lf\n", elapsedtime); totalmseconds = curtime + ((float)curms * 0.000001); } counter += 1; }

Please Log in to join the conversation.

Time to create page: 0.093 seconds
Powered by Kunena Forum