hexagon logo

Runtime script with inexplicable results...

I have a function in my scripts to calculate the runtime in seconds for a program, using the Timer value from windows, which returns the current time as seconds from midnight.

The blue code is my script run at the beginning of a part program. The red code is what is run at the end. (I've cut and pasted these sections from the scripts...they are too long.) In the event that a program runs through midnight, I have a section in the red code to correctly calculate runtime. I've tested this code in the excel editor while resetting my computer clock to 11:59 PM and running it through midnight, and it works. Unfortunately, this code does not work when running PC-DMIS through midnight. I get program times of more than 86400.

Any ideas why this is not calculating correctly only when run through PC-DMIS?

[COLOR="Blue"]Sub Main()

Dim BeforeTime As String
BeforeTime = Timer
BeforeTime = CLng(BeforeTime)

End Sub[/COLOR]

[COLOR="Red"]
Sub Main()

Dim Aftertime As String
Aftertime = Timer
Aftertime = CLng(Aftertime)
Dim RunTime As String

If Aftertime < BeforeTime Then
RunTime = (86400 - BeforeTime) + Aftertime
Else
RunTime = Aftertime - BeforeTime
End If

End Sub[/COLOR]
  • I was hoping everyone would be mature about this unfortunate misspelling.
  • I din’t know if to hijack this thread or start my own, but this is what I use to try and keep track of the lenght each program runs. It is in Hrs, Mins, Secs. Although I don’t think hrs has ever been anything above zero.

    This goes in the beginning of the program.
    ASSIGN/STARTTIME=INT(SYSTEMTIME("HH") * 3600) + INT(SYSTEMTIME("mm") * 60) + INT(SYSTEMTIME("ss"))


    This goes in the end of the program.
    ASSIGN/TOTALTIME=(INT(SYSTEMTIME("HH") * 3600) + INT(SYSTEMTIME("mm") * 60) + INT(SYSTEMTIME("ss")) - STARTTIME) / 60
                COMMENT/REPT,"RUN TIME = "+TOTALTIME+" MINUTES"


    This little code will place the actual run time in the report. If it means anything to anyone, If not I’ll just crawl back to my corner lol.
  • No offense but all this? It sounds to me that somebody has too much timer in their hands.
  • No offense but all this? It sounds to me that somebody has too much timer in their hands.


    Unintended pun? Hilarious.
  • Ok, some more testing, and some more errors. Using Integer gives me an overflow error when it goes to grab the TIMER number from the computer. This does not happen in excel. I have yet to try to shorten the Timer number using Clng first, then assign it to an integer.

    I put parentheses all around my functions, just in case. I had a part run through midnight on Friday and guess what? It's a negative number now! Ex. The start of the program was 86000 seconds from midnight. The end of the program was 1000 seconds from midnight on the next day. The correct calculation would be a runtime of 1400 seconds.

    Previously this would have given me the result of 87000 seconds. Now it gives -85000 as the result. Angry

    So, continuing forward, I will try to get this working with integers, and test it then. Thanks for the help guys.
  • Somebody has too much time in there hands by doing all this, I am lucky to get my break over lunch, I have to eat and run parts at the same time.
  • I worked a split shift for a year to pull this together. Now about to implement a web-based frontend for PC-DMIS. All of it has been well worth it.
  • Code:

    Sub Main()

    Dim BeforeTime As String
    BeforeTime = Timer
    BeforeTime = CLng(BeforeTime)

    End Sub


    Sub Main()

    Dim Aftertime As String
    Aftertime = Timer
    Aftertime = CLng(Aftertime)
    Dim RunTime As String

    If Aftertime < BeforeTime Then
    RunTime = (86400 - BeforeTime) + Aftertime
    Else
    RunTime = Aftertime - BeforeTime
    End If

    End Sub

    I've always had to place brackets around the complete formula err for:

    RunTime = ((86400 - BeforeTime) + Aftertime)

    However I'm using 3.5MR2


    How do you place this in program for it to function properly. I tried and just wont do what I want it to. I am working in 4.1
  • This code is used in a VB script that runs at the end of my program. It requires use of the Basic script editor and a decent knowledge of variables and scripting to write.

    What exactly are you trying to do? Perhaps there is a simpler way to do what you want.
  • I have a function in my scripts to calculate the runtime in seconds for a program, using the Timer value from windows, which returns the current time as seconds from midnight.

    The blue code is my script run at the beginning of a part program. The red code is what is run at the end. (I've cut and pasted these sections from the scripts...they are too long.) In the event that a program runs through midnight, I have a section in the red code to correctly calculate runtime. I've tested this code in the excel editor while resetting my computer clock to 11:59 PM and running it through midnight, and it works. Unfortunately, this code does not work when running PC-DMIS through midnight. I get program times of more than 86400.

    Any ideas why this is not calculating correctly only when run through PC-DMIS?

    [COLOR="Blue"]Sub Main()
    
    Dim BeforeTime As String
    BeforeTime = Timer
    BeforeTime = CLng(BeforeTime)
    
    End Sub[/COLOR]
    
    
    [COLOR="Red"]
    Sub Main()
    
    Dim Aftertime As String
    Aftertime = Timer
    Aftertime = CLng(Aftertime)
    Dim RunTime As String
    
    If Aftertime < BeforeTime Then
    RunTime = (86400 - BeforeTime) + Aftertime
    Else
    RunTime = Aftertime - BeforeTime
    End If
    
    End Sub[/COLOR]


    There are lots of problems with your design here. I know because I've made this type of mistake before.

    You're assuming that you're off by 1 day (which is probably OK for this), but won't work when you reuse this (and you will, trust me).

    Better would be:

    while AfterTime < BeforeTIme
    BeforeTIme = BeforeTime - 86400


    which would correct for any number of days off. This is easier to express with:
    BeforeTime = BeforeTIme Mod 86400

    But that is really unnecessary as well.

    Instead:
    BeforeTime = Now
    ...
    AfterTime = Now
    RunTime = DateDiff (s, AfterTIme, BeforeTIme)


    If you're REALLY interested, read Eric Lippert's blog about how he fixed this particular function (he's a software engineer at Microsoft):
    http://blogs.msdn.com/b/ericlippert/archive/2003/09/16/53013.aspx

    Hope this helps.