AJ123 Posted March 20, 2012 Share Posted March 20, 2012 What I want to do is, I have a delay of lets say 30minutes. What I want is to have a coundown timer that shows how much time during that delay cycle is left. So I have While (1) Pump1 on delay(x) Pump1 off delay(30*60) endwhile And I want to know where in that delay for 30 minutes i am at before the pump comes back on Link to comment Share on other sites More sharing options...
AzeoTech Posted March 20, 2012 Share Posted March 20, 2012 You just need to record the start time. Good programming practice would remove the magic number (30 minutes) as well: global loopTime = 30global startTimewhile(1) startTime = systime() pump = 1 delay(x) // ??? pump = 0 delay(loopTIme * 60)endwhile[/CODE]Then to display how far into the loop, use a display value component with an expression of:(systime() - starttime) / 60and how much time is left:looptime - (systime() - starttime) / 60 Link to comment Share on other sites More sharing options...
AJ123 Posted March 20, 2012 Author Share Posted March 20, 2012 when you say record the start time what does that mean? and does anything go into the parentheses after systime? I am very new to DAQFactory or any code writing. Link to comment Share on other sites More sharing options...
AzeoTech Posted March 20, 2012 Share Posted March 20, 2012 That means saving the start time to a variable. That is what the starttime = systime() line does. The global starttime line declares "starttime" as a variable. No, systime() is a function that takes no parameters. Link to comment Share on other sites More sharing options...
AJ123 Posted March 20, 2012 Author Share Posted March 20, 2012 So this is what I have my code written as. global R5off = 1global R5on = 1global starttimewhile(1) // this is a loop function starttime = systime() RAS_R5 = 1 // turns RAS pump for R5 off delay(R5off*60) // this is the time interval that the pump will be off for. It is R5off times 60 because we work with minute frequencys and not seconds RAS_R5 = 0 // command function to turn ras pump for R5 on delay(R5on+2) // peroid of time the pump will be on for. Plus 2 is in there do to the 2 second delay from on to pump actually coming onendwhile // ends the loop sequence and just repeats lines 2-6[/CODE]I am able to have it come on and off at the set times which is perfect. However, when I try and write the expression R5off - (systime() - starttime)/60 in to a variable value component it doesn't work. What might I be missing. Link to comment Share on other sites More sharing options...
AzeoTech Posted March 20, 2012 Share Posted March 20, 2012 What doesn't work? Does it display the wrong value, or nothing at all? Also, remember all time in DF is seconds, so if you want R5On/Off in minutes, you have to remember to multiply by 60 in your second delay statement (you got right in the first one). Link to comment Share on other sites More sharing options...
AJ123 Posted March 20, 2012 Author Share Posted March 20, 2012 Yeah nothing at all, when I am entering in the expression it is read background instead of the green background where the actual expression goes. When I put everything in as I have discribed, I hit enter and I get the red x that is pressent when the value expression is first created as a defualt And yeah the delay time is in minutes and the pump time is in seconds so I should be good there. Link to comment Share on other sites More sharing options...
AzeoTech Posted March 20, 2012 Share Posted March 20, 2012 Break it down. Have it display just starttime, just systime() and just R5Off and see which doesn't have any data in it yet. Link to comment Share on other sites More sharing options...
AJ123 Posted March 20, 2012 Author Share Posted March 20, 2012 So it goes green when I put each in by itself. However it goes red when I try to do systime() - starttime by itself Link to comment Share on other sites More sharing options...
AJ123 Posted March 20, 2012 Author Share Posted March 20, 2012 I saved the program closed DAQFactory and open it up new and it is working now. I my guess is I missed apply &compile somewhere in there but it is working great now. Thank you very much for your help. Link to comment Share on other sites More sharing options...
BH2114 Posted November 1, 2017 Share Posted November 1, 2017 To continue this discussion: I require a cycle timer initiated by a button, with the delay set through (Timer1[0]) So, I have a sequence as follows: ****************************** global StartTime while (1) startTime = systime() channel.Timer_output[0]=1 delay(timer1[0]) channel.Timer_output[0]=0 delay (1) break endwhile ********************************************* This works just fine, but...using a display device with expression: (systime() - starttime) The display starts counting from zero up when the timing sequence starts, but when the sequence stops because of the break, the display just keeps on counting. I need to figure out how to stop the display count when the sequence stops. Link to comment Share on other sites More sharing options...
AzeoTech Posted November 2, 2017 Share Posted November 2, 2017 First, you don't want: channel.Timer_output[0] = 1 you can just do: Timer_output = 1 The channel. prefix is only needed for channel list specific commands, or if you happen to name a global variable the same as a channel. The [0] is assumed in assignment with a channel because you can only change the most recent data point on an actual output. As for your question, the sequence you have won't count from zero up from the start of the sequence. Instead it will count from 0 up for each iteration of the while loop. To make it stop if the sequence stops, just replace the expression with: iif(sequence.mySeq.running, systime() - starttime, "No running") or something like that. You can also use the visible expression of the component to just make it disappear when not running. There are a lot of ways to do it. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.