burt4munger

Members
  • Content Count

    69
  • Joined

  • Last visited

Community Reputation

0 Neutral

About burt4munger

  • Rank
    Member
  1. A windows 10 computer I have running two large DAQFactory programs is crashing in about a week due to memory running out and windows crashing (the bluescreen says) The only real applications running are two very large DAQFactory programs (and SQL Server which is known to be a memory hog but i don't think it crashes windows). I suspect the issue is likely something I'm doing, like a db.open without a matching db.close in a fast loop somewhere so I'm already looking for those. Are there any hints where to look or tools built in that might help with this? Has anyone seen issues continuously writing large amounts of debug text to the command window? I looked elsewhere in the forum and there was only one pretty dated article dealing with memory issues.
  2. When DAQFactory is in development mode, the ctl file name is in the window title. Once DAQFactory is changed to runtime node, the title only says "Runtime", no file name anymore. I'm using the window title to change between instances to prevent one from getting "too much control", ie spread out single point failure. Is there a way to get the title bar to show the file name in runtime mode, or does someone know of a way to switch from one instance to another from within DAQFactory? (I'm trying not to expose the windows task bar to the user).
  3. While regular sequences will update both the Watch pane and the Command window with variable values and the result of debug statements like ?"message", if a class function contains one or more delay(n) statements and is called from the command line in the command window, no debug statements are written to the command window and the watch pane does not update until all of the delays have completed and the function has terminated, making it quite hard to debug certain sequences. The class function with delays will update the debug statements and command window if called from another sequence, but that makes it to directly test class functions. I've attached an example. Running init will update the command window and watch pane (you have to put ElapsedSecs and Test.ElapsedSecs in to watch), but if you then invoke test.testupdate() from the command line DAQFactory will freeze until the function completes, as if no other system display updates are being processed during the delay() call (like a tight loop with no delay would do), but then the results will be updated. Suggestions for a work around or can this be fixed? DisplayTest.ctl
  4. If you have a display component to which you've added a property "index", and the component strexpression is the value of an array at index: test[index], the displayed value works. If you add an quick sequence action that uses the property index, that works: system.messagebox('Your value: " + doubletostr(test[index])). However, if you try to use the set to action just before the messagebox and to set the value using: test[index], it doesn't work, but of course it does work if you make the set to action use a literal number: test[2]. This is a problem because I'm creating a large page full of similar components that act on arrays, and if each component does everything based on its index property, duplicating it and just setting the new index value makes it do everything without clicking through all the panels updating an index value. That said I worked around this by not using the set to action, and just putting a system.entrydialog in the quick sequence section. But it is a bug, even if a little one!
  5. There is a message box font control, and that worked. Trying an approach like SteveMyres suggested, I created a class of arrays with both a string message and a string to feed execute(), and a specific init() to set all the strings up, then the modal popup button called it with an index to put up the next message and then execute it's related code to set up the next step and/or test error conditions and that worked pretty well. It started getting too complicated once it needed to branch on the test result to different steps,etc, so I just went back to the system.messagebox with a huge font.
  6. I'm prompting a user to take multiple steps, with a message in between where he indicates "OK" that the step is complete. The system.messgebox works fine for this; the sequence waits until the operator clicks ok, then proceeds to the next step. The problem is, on a tablet interface, the messagebox font is too small to read more than about 6 inches away. I've tried using a modal popup page with much larger font to accomplish the same thing, but the underlying sequence will not wait on the modal popup to be closed. So, it looks like I would have to build a state machine or some special queuing mechanism to accomplish the same result, with flags to cause a sequence delays until the operator closes the window, which signals the mechanism, etc.. I'm hoping there is some easier way to do this. As I mentioned, if I could control the font in the messagebox, that would work. Are there any other (easy) ways to accomplish this?
  7. I understand, but the annoyance of an error message telling me to define a variable is very small compared to the annoyance of trying to track down a typo in thousands of lines of code by the operational failure symptom it causes. As a coding practice, I could avoid that error message by defining the variable before I write code using it, not a bad idea anyway. Back in the MS Access days, you could set "Option Explicit" to enable this behavior, which forced explicit definition of all variables. You could leave the default operation for DAQFactory as is, to make it easy for the new guys. I have spent many, many, many hours trying to track down a problem only to find it was a misspelled variable. I hope this function will percolate to the top of the new features list! Please!
  8. By far, the most time I spend debugging is tracking down variable names with typos, or if I risk changing the name of a variable later to something more useful, like changing Duration to DurationHrs, making sure that all the instances have been updated is a huge issue. I have to export all the sequences to a big text file, hunt for all the old name, find it, switch to the real sequence and update. If I miss one anywhere, the program will just run and not set it. why won't either the compiler or the run time be made to fail for this: global test1 = 0 global test2 = 0 try test1 = 1 ?"test1" test3 = 1 ?"test2" catch() system.errormessage(strLastError) endcatch this just runs with no indication that anything is wrong, and can be horribly hard to track down. Of course it is harder if you have something like Duration and type Duraton somewhere. really hard to see and no way to hunt it down. Why again can't the compiler compalin (sic) that an assignment is being made to a non-existant (sic) symbol?
  9. burt4munger

    Deleting Components

    I am running 5.90 2183, the list of components does expand under the page name, the duplicate name is not shown twice in the list. Using the compiler helper for component.item.property in the command line, I can see two of each property choice in the list. If I delete the item that is visible in the symbol tree (and that I can see on the page), I can still access the other mystery component.item.positionleft etc and set the coordinates to an area I can see, and set the visible property it does not appear. So it is somewhere in the system, but not in any of the page list symbol trees.
  10. I'm building a page with 24 cells, and have written a sequence that adjusts the spacing of cells 2-24 based on position of cell 1, since the components are all named with a cell number suffix and are created by duplicating the cell 1 component with the ctrl-D function. Mostly it works, but somewhere along the way some duplicate cell 1 components were created but they are not visible on the page, even after setting the coordinates to valid values and making sure the visible property is 1. Is there a programmatic way to delete a component? I think I remember that the answer has been no, but just wondering if there might now be some way to get rid of unwanted components that can't be picked.
  11. Please let me know what I'm doing wrong here. I want to have the equivalent of a 2d array, but with named dimensions so instead of having parent[3][2] references I would have parent.marklist[3].marks[2], where marklist and marks were their own classes: class cChecks local marks function init() private i for (i = 0, i < 10, i++) marks = 0 endfor endfunction endclass class cParent local marklist function init() private l for (l = 0, l < 10, l++) marklist[l] = new(cChecks) marklist[l].init() endfor endfunction endclass global Parent = new(cParent) Parent.init() private i private j for (i = 0, i < 10, i++) for(j=0, j< 10, j++) Parent.MarkList.marks[j] = j endfor endfor ?Parent.MarkList[3].Marks produces 9 not {0,1,2,3,4,5,6,7,8,9} as expected. If I manually assign values, like Parent.Marklist[3].Marks[5] = 32 it will work. It seems like using class references with two or more [] in a line is having a problem. This also seems to appear calling a class function with an array reference topclass[x].myfunction(something[index]). This is all with version 5.90 build 2151. What am I doing wrong?
  12. If you create a component, say a panel, then duplicate it 10 times, group it, duplicate that group a few times, then group the entire thing, and finally ungroup the whole thing, the workspace tree disappears. Moving around a lot of panels on a summary page is a likely use of this feature.
  13. burt4munger

    Labjack Ei1050 T7 Ljm Example Code Anywhere

    Survey sez: Pretty old firmware was it. I took it out of the box new a week ago, and firmware was as you said 1.0017. It upgraded quickly and easily to 1.0071, and immediately worked after that with device.LabjackM.eReadName("10.1.1.80", "SBUS3_TEMP").
  14. burt4munger

    Labjack Ei1050 T7 Ljm Example Code Anywhere

    Firmware_Version reports: 1.001700043678. So that's either pretty old or you dyslexed the 17 to 71. ? I'm using the FIO0-3 terminals on a CB37 board attached to the T7, so that should be the right DIO3. I guess I could test with LJLogM for wiring and hardware but I have a giant DAQFactory application that must be made to work with this.
  15. burt4munger

    Labjack Ei1050 T7 Ljm Example Code Anywhere

    That's better, it is communicating with the T7, but now I get: Read error with LabJack M: SHT1X_COMM_TIME_OUT or Read error with LabJack M: SHT1X_NO_ACK. It was working just before I moved it off the U3 (where I ran into the using device.labjackUD issue), and I'm sure it's wired in right on the T7. Does the T7 somehow know to set FIO2 and 3 high for this, or should I do that?