cadcoke5

Members
  • Content Count

    98
  • Joined

  • Last visited

Community Reputation

0 Neutral

About cadcoke5

  • Rank
    Advanced Member
  1. I know that companies generally require internet access to install, so that they can have some level of control to prevent multiple installations when the user only is permitted one seat. However, I have always been concerned when this software is necessary for the operation of a facility. This is because if the software vendor were shut-down, and then a broken computer required the software to be reinstalled, you would be stuck. In this case, the software vendor would not be able to provide the necessary steps to reinstall the software on the new computer. Perhaps a more likely situation may be if the internet for the vendor was lost for an extended period of time (such as a hurricane). Then all their customers, wherever they may be, cannot re-install their software. A single broken computer might shut them down until the software vendor were back in business. Am I correct that purchasing a USB key is intended as the method of managing the above situation? Though, of course, you would need to buy this method of software security before the software vendor were to be unavailable. -Joe
  2. cadcoke5

    Tick Spacing On X-Axis (Time) Obscuring Graph.

    Thank you for remembering that you suggested those annotation marks to put tick marks at the 1-second lines. I had forgotten about that. The automatic tick-marks on my 1-hour graph are actually reasonable The annotation marks was added as a work-around on the 1-minute graph, because the automatic tick-marks were not acceptable, and the graph was not permitting me to add custom tick marks settings at 1-sec intervals, due to limitations of the program. I hope you are considering removing this limitation on a future release, so we can set our desired tick-marks for the Time axis. -Joe
  3. I am having problems controlling tick spacing. The bottom axis is time. I should note that this particular graph is a copy of an existing graph on the page. I wanted this copy to show a 1-hour range vs.the original one, which only showed 1-minute. I successfully changed the time range on the copy. But, it is an unacceptable display as it is now, since the tick marks are so dense, they obscure the graph. I saw a post on the forum from 2009, that indicated that if the X-axis is set to Date+Time, you cannot control the tick lines. Hoping that the 2009 limitation had been fixed sometime over the past 5-years, I took it off of "auto range". But, nothing I type for grid spacing seems to have any effect. Attached is a screen grab illustrating the problem. Thank you for any advice, -Joe
  4. cadcoke5

    I Need Help With Isempty Function

    For some reason, my code numbers did show up. I think it may just not show up in the preview, but do show up on the actual posting. But, unfortunately there seems to be a variation on how the numbers show up. You refer to a line 4, also being line 39. But, I don't see any line numbers that high. Can we somehow be seeing different line numbers? These little hidden rules about how a function works are quite frustrating. But, I gather that to consistently use time, I should always subtract from current system time You said that my line #3 mixes syntax, and then quote, "You have 0, systime()-60." But, perhaps you are refering to what is showing as line #2, on my screen. I show line #3 as; y = mean(Thermister1[systime()-3540,systime()-3599]) // Avg Temperature 1 Hour ago for 1 min Is that the correct syntax? I will mention that I did a lot of ? to debug, but failed miserably. But that is probably because I was unaware of the time vs. index mode switching. -Joe
  5. cadcoke5

    I Need Help With Isempty Function

    I have the isempty statement working. Though, to get it working I had to use your range method, which starts at 0 and goes back to the time I really want to check. E.g. if (!isempty(thermister1[systime(),systime()-3601]) This would work. But, if I put something like ... if (!isempty(thermister1[systime()-3550,systime()-2601]) it would not work, and always reports it as being empty. I was initially thinking that it would be better to check a smaller range, rather than a longer one. for 1 minute it would not matter, but for an hour ago, I was concerned that the program would have to check the entire set of recorded data for an hour. Perhaps it is the whole range reference method that I am having problems with. I am continuing to have a puzzling error referencing to the range of data. First, note that there is over an hour of data recorded. So, there should be over 3600 seconds of data. if (!isempty(thermister1[systime(),systime()-3601])) // only do if there is data one HOUR ago x = mean(Thermister1[0,systime()-60]) // average of last minute y = mean(Thermister1[systime()-3540,systime()-3599]) // Avg Temperature 1 Hour ago for 1 min Trend_Temper_Hr = x-y // Trend in units of degrees per HOUR. endif This code generates the error on the line that starts y=.. C1086 One of the parameters was empty: Temp_Trend_1_Minute Line 40 - Uncaught error in sequence Temp_Trend_1_Minute Now, if I change the line to say, y = mean(Thermister1[systime(),systime()-3600]) Then it works fine. But, of course, I only want an average from 59 minutes ago to 60 minutes ago. So, the above is not usable. -Joe p.s. When we use the "insert code" function on the forum, we are offered the option of putting a starting line number. But, it never works.
  6. I have a sequence that reports the temperature trend over time. It reports a 1-minute trend, 5-minute trend, and 1-hour trend. However, I am having problems with the portion that checks the data to make sure there we have enough readings to have recorded long enough. For example, this is the first loop, that checks if I have at least 1 minute of data. while ( isempty(thermister1[systime()-60]) ) // only continue if there is data one minute out delay(10) endwhile An earlier version of my code was successful, but it worked differently. It stored the start time of my program in a variable, and simply checked it against the current time. However, I was working to change it, thinking the isempty function would be a more direct test if the data were available. It seems that I am not properly understanding the isemtpy function. I have not been able to find an area in the help file that refers to the usage of this function for for channel history. If I give a index number for an array, would it return a 1 if that index had not been filled yet? One other related question. If I have my channel recording at 1-sec intervals, and my program started at a time interval at perhaps 1/2 second from a 1-sec clock tick, would my data all be recorded at 1/2-sec clock-ticks? Would that cause there to be no data at the exact intervals of 1-sec? Thank you for the help. -Joe
  7. cadcoke5

    Automatic Backups

    I didn't find batch files in the DAQFactory help file, but do recall batch files back in the old DOS days, so I am assuming this is the type of batch file you have. I just looked in my Windows 7 help screen for the word "Batch" and ".bat" but there were no hits. Does Windows 7 even support DOS style batch files? In regards to the button are are referring to; am I correct that this would be a special button you create on one of the pages of your user interface? Or is it possible to add custom buttons to DAQFactory's own interface, like many Windows programs permit? E.g. If I wanted to activate a batch program in MS Word, I would crate a macro, and then create and assign a button to it. Thanks for the great idea about using a batch file. -Joe
  8. cadcoke5

    Automatic Backups

    I suppose another alternative is to use a backup program that has a scheduler. Then schedule a backup of the directory where you save programs at what ever increment you want. Though, it is normally the most recent few saves that you really want to go back to, since it was probably some recent change that caused the program to lock up or otherwise go bad. -Joe
  9. What do the characters "+=" mean? It does not come up when I search the manual. -Joe
  10. I have a process that needs to follow a series of temperature goals. But, I am not clear about how to logically program the sequence. Since this is probably something you all do regularly, perhaps there is a better approach. Here is my current approach in pseudo-code Global variables CurrentTemperatureGoal, and Hysteresis. global 2D array that has the time, and its associated temperature goals for that time. There is a separate, continuously running, sequence that maintains the temperature at the value saved in CurrentTemperatureGoal 1) For-next loop, with a counter equal to the number of steps. 2) While the temperature is not at the final temperature goal (+/- the Hysteresis) 3) Set CurrentTemperatureGoal equal to the temperature goal for this step. 4) Wait for the amount of time for this step. 5) End While. 6) Endfor I need to know if the CurrentTemperatureGoal is not reached in the amount of time allocated to the current step. Wait for a little bit longer, and abort the process if it does not reach the goal. Back when I first started programming in basic, with line numbers, I might simply have used a GoTo statement and jumped out of my nested loops. But, I know that is not recommended, nor does there seem to be a way to label a line to jump to in DAQFactory. Another possibility is to insert a if-then statement before line 6. Test if the temperature goal is met, and if not wait a short time longer, and if it still is not at the goal, increment my counter to the last value. Then, when it loops back to line 1, it will exit the loop entirely. Any other recommendations? -Joe
  11. Getting-Started Guide; You have a complex program to learn how to use. An in-depth getting started guide, that takes the user through the various options and commands in an orderly way. I don't think you need to do basic programming introductions, but remember that users may not be programming professionals. While you might omit some less used features, it might be good to describe the omissions in a sentence or two each, so that the user can be aware of what is possible, and then look it up in the command reference. Examples; This is perhaps going to be done to some extent if you create a getting-started guide. It might be good to add hyper-linking to/from the stuff in the getting-started guide and the command reference manual. The stuff you don't cover in the getting-started guide may warrant the additional examples. Index; While you do have most of the important words in the index already, I have come across several important words that should be in the index, but are not. An example is the word "Boolean" or "Not". Sometimes these words or phrases are difficult to find using the search tool, because they may be on many pages. All commands and functions should certainly be included in the index. Perhaps you should check that you include everything in your table of contents which can be described in one word. You would have discovered that Boolean was omitted by using that method. === Of the above, I think the Getting-Started Guide is the most important. Some of the content can be directly copied from your existing manual, but I am sure it will take a lot of work to add new content. Ideally this is not done by someone who has been at your company for years. If you were to bring on a new staff member at some point, ask them to take notes about their learning experience, so that they know what was confusing to them, and therefore know what is important to write about in a getting started guide. -Joe
  12. Currently, there is no way to close a log file, except by starting a new log file with a new file name. Consider either automatically closing the file when logging is stopped, or alternatively, add a new command to close the log file. -Joe
  13. cadcoke5

    Basic Starting And Stopping Of Logging

    The manual may have an error. It says, ====== .strFileName: changing the file name while the logging or export set is running will close the current file and open the new file. Application: if you are logging batch data and wish to start logging to a different file, simply set this variable to your new file name. You can use an edit box component or any of the components with actions, specifying Logging.LoggingSetName.FileName as the action/set channel or use a sequence with assignment: Logging.LoggingSetName.FileName = "c:\newfile" ====== Note that in the above example it says, Logging.LoggingSetName.FileName = "c:\newfile" wihout the str prefixed to the word Filename. I also just realized a misunderstanding I had. I thought the phrase "LoggingSetName" was to be typed exactly as it was. I see now that I should have substituted the actual name of the Logging Set. Perhaps it would be better to change the font to Italics for when the user is expected to substitute their own names. The logging procedure is working now, as long as my file name is without the time and date functions included. The following sequence placed in the command window causes DAQFactory to crash Logging.Pressure_Test_Log.strFileName = "c:\Data_Log\Pressure%y-%m-%d at %h-%m.csv" logging.Pressure_Test_Log.Start() DAQFactory then immediately crashes. Thank you for the help. -Joe
  14. cadcoke5

    Basic Starting And Stopping Of Logging

    I tried the following commands directly from the command prompt. Logging.LoggingSetName.FileName = "c:\Data_Log\Pressure.csv" logging.Pressure_Test_Log.Start() [below is what started appearing on the screen] 04/22/14 20:20:55.859 C1013 Problem logging to data file: 04/22/14 20:20:56.859 C1013 Problem logging to data file: 04/22/14 20:20:57.859 ... The following command successfully stopped it. logging.Pressure_Test_Log.Stop() Note that the file "c:\Data_Log\Pressure.csv" was not created, and that directory is empty. Perhaps there is some command I must use to get the file to be created? Note that on the logging set, there is no file name. I had tried use the browse button, which allows me to browse around, but apparently it is expecting you to choose a file. Just browsing to a directory is not sufficient. So, I created a text file in that directory using Explorer, by right-clicking in that folder, and selecting "create new text file". Then, I named that file "temp.csv". Then I edited the Logging Set and browsed to that file. Finally, I ran the same sequence of commands as I showed above. The results opened in Excel just fine, though I did need to format the date column using a custom number format to allow for decimal seconds, m/d/yyyy h:mm:ss.00, which showed it as something like, 4/22/2014 8:28:47.25 PM And while the above does work, I would rather start a new log file each time I start logging. I understand that I can specify a file name formatted something like this, Logging.LoggingSetName.FileName = "c:\Data_Log\Pressure%y-%m-%d at %h-%m.csv" But, that won't work, since the file must already exist. I wish I could find where all this is explained, rather than figuring out things here on the forum, and by trial and error. -Joe
  15. Sorry, but the manual is confusing about this. There seem to be two areas where this is discussed. One area says; All are accessed using either Logging.LoggingSetName. or Export.ExportSetName. .Start(): starts the set. If the set is already started, nothing happens.. .Stop(): stops the set. If the set is already stopped, nothing happens But, I am not clear if the proper format is Logging.LoggingSetName.Start() or Start().Logging.LoggingSetName Another part of the manual describes using this other command; beginlogging(MyLoggingSet), But, it returns the following error; "C1013 Problem logging to data file". Note that I already created the directory, and set the file name using; Logging.LoggingSetName.FileName = "c:\Data_Log\Pressure.csv" Are there any examples I can see about logging data? -Joe