AzeoTech

Administrators
  • Content Count

    5,672
  • Joined

  • Last visited

Community Reputation

0 Neutral

2 Followers

About AzeoTech

  • Rank
    Guru

Recent Profile Visitors

50,338 profile views
  1. AzeoTech

    ctci04

    First, see if you can read the bits individually from the controller. Many controllers will offer discrete I/O both in packed form on an input / holding register, or as individual bits using coils / input status registers. But if you have to get it packed, just use the testbit() function. So in your LED, if you want it to light up if bit 3 (numbered from 0, so the 4th bit) is on for "MyChannel", you would do: testbit(MyChannel[0], 3)
  2. AzeoTech

    Channel reading issues

    I'd have to see the project. Can you post it or email it to us?
  3. There are actually very few times it is used as a command as it is largely left over from when DAQFactory had table driven sequences which was like 18 years ago. It is used most often for the U12 driver as the U12 is equally old and its driver thus developed during the time before proper scripting. The UE series devices I believe only use it for specifying the second input to use for differential analog inputs. OPC uses it for specifying the actual OPC tag (thus the OPC part of its name) but usually you should use the OPC browser to pick it. Other than that I can't really think of any other places a driver utilizes this field, thus the reason most people just use it for channel notes.
  4. AzeoTech

    Logging data from a Table

    Sure. Use the low level File. functions, specifically File.Open, File.WriteDelim, and File.Close. See 9.9 in the user's guide.
  5. AzeoTech

    PC spec

    Its actually more about the historical graphing than anything else. I'm working on a system with a single Atom that runs 3 copies of DAQFactory simultaneously (to connect to three identical systems), but using OPC, but with about 1000+ channels each. But most of the automation is being done in the PLC, and DAQFactory is largely just an HMI in this case. The HMI has minimal historical trending, but does log to a CSV about 100 channels. The Atom is more than capable for this application and really only bogs down when I fire up the PLC's development environment, which is a bit of a behemoth and has nothing to do with DAQFactory. For that I had the customer buy an i7 laptop so that we don't have to run that PLC programming software on the atom. I'm working on a separate Atom powered system that is only about 15 tags, but does things at high speed (50 hz software sampled data rates) and stores and trends huge amounts of data. For this application I feel like the Atom was a bit underpowered. It works fine for the acquisition, but when they do the analysis and trending, it seems a bit sluggish for my taste. In general DAQFactory is 20 years old and was originally designed at its core to run on slow PC's 20 years ago. Even the slowest of today's computers are way faster than ones available 20 years ago, so DAQFactory should do fine. The issue often comes down to the OS: is the processor fast enough to adequately run the latest version of Windows? After that, it unfortunately comes down to the details of your application and, if the application has a lot of data processing, how efficient you are in your scripting, but this really only applies on more advanced applications.
  6. AzeoTech

    Modbus pooling

    You don't really need the delay() between calls as the CPU is released while waiting for a response. You do need a delay inside any error handling, i.e.: while(1) try // read the devices catch() ? strLastError delay(0.1) endcatch endwhile If you don't then if there is a typo in your code, or some other error, it will get repeated without any CPU release, tying up that CPU and possibly hanging or at least greatly slowing DAQFactory. A few notes on your app: 1) 115200 is quite susceptible to noise due to the duration of each pulse, so be especially diligent with your shielding and termination 2) there is often required a 10 to 20ms delay in polls when switching between multiple devices on a multidrop system. This is because the transciever on the first unit will "hold the line" and not allow you to move on. 3) for the above reason, and because DAQFactory is multithreaded, you can get much higher data rates if you put each device on its own RS485 line and then have separate, concurrent running script to poll each device As to your original question, you can always use the time stamp of your data points to determine throughput. Or add script to do so using the system clock.
  7. AzeoTech

    Table Sliders too small to click

    You can always just not use the built in slider and either use the separate Slider component, or another component (like up/down arrows) to scroll. To do this, you need a variable with the top index, for example: global tableTop = 0 global tableRowCount = 20 Then, in the table, you should subset all your columns: myData[tableTop, tableTop + TableRowCount - 1] Then, use a scroll bar component or other components to adjust the tableTop variable accordingly, limiting it to 0 to however many rows you have.
  8. AzeoTech

    Modbus write multiple registers

    There is a limit defined in the Modbus spec. I don't remember off hand what it is, but I think it is 63 bytes of data for RTU, and each register is 2 bytes. But don't take my word for it on the exact number. The point is that it is a Modbus limit, not DAQFactory, though DAQFactory enforces it. Also note that some devices don't support setting of multiple registers. This is not your case, as it is obviously working with 16 registers. I simply mention it for others that may have issues trying to set more than one at a time.
  9. AzeoTech

    Modbus write multiple registers

    You can definitely do it through script. Just pass an array for data points. So for example: device.mydevice.setRegisterS32(1, 100, {1,2,3}) which would set register 100/101 to 1, 102/103 to 2, and 104/105 to 3 (register pairs because of the S32 of course). Note that it is "Set" not "Write", and is "Register" not "Holding" because Input Registers can't be set, so there is no reason to differentiate on the output side. Note that with channels, DAQFactory will automatically combine reads of the same type into a minimum number of calls if they are consecutive and the same data type. It will not fill in blanks, though, so sometimes its best to create dummy channels. That said, on the output side you cannot do multiple outputs with one query through channels because there is no way to set multiple channels simultaneously.
  10. I'm going to let LabJack give you a more specific response, but in general you'd want to set some flag, possibly a digital output, or some virtual I/O point that is accessible through the LabJack driver. Create a channel for that point, and then use the Event of the channel to look for a particular state and trigger your sequence.
  11. AzeoTech

    Graph Trend Line between 2 points changing

    It is because of the way DAQFactory optimizes the graph data on large data sets. It does a boxcar min/max and as new data comes in the boxcar locations change causing those mins/maxs to change slightly, especially at edges like when no data is coming in. This can make the connecting line jump around. Normally you can't see it because its only one pixel.
  12. AzeoTech

    if statement not working

    Yes, it may be a threading issue. You should debug it either by adding a breakpoint or by adding ? statements. Also, see if it does it if you stop all the other sequences / events.
  13. Sorry, that image you posted isn't a real image. It needs to be in a standard format.
  14. AzeoTech

    Print Export Function Crashing in Windows 7

    Yes, that is the bug mentioned in the post. You can't use the right-click graph capture feature in newer OS's. You'll have to use an alternative such as the printPDF function.
  15. AzeoTech

    sms message

    Yes, that is the right direction, but you almost certainly will need either a carriage return or a carriage return / line feed afterwards. I typically like to do it with a variable, or you can just add the chr() commands to the end. private string CRLF = chr(13) + chr(10) device.gsmmodem.write("+CMGS" + crlf) ...