AzeoTech

Administrators
  • Content Count

    6,064
  • Joined

  • Last visited

Community Reputation

0 Neutral

2 Followers

About AzeoTech

  • Rank
    Guru

Recent Profile Visitors

51,505 profile views
  1. AzeoTech

    Alarm Summary

    Probably the best way is to create a sequence function for each possible alarm status, i.e. fire, reset, and ack. So, for example, AlarmFire. You'd need to create a global string variable declared in a startup sequence, for example: global string alarmStatus Alternatively, you could create a String Test channel with the same name. Then, create a sequence called alarmFired: function alarmFired(string desc) alarmStatus.addValue("FIRED: " + desc) Do the same for alarmReset, and alarmAck if desired. Next, in each alarm, go to the Fire Event and put: alarmFired(strDescription) In the ResetEvent put: alarmReset(strDescription) and likewise for the Ack event if desired. Finally, you can use a table component to display the alarmStatus variable. You probably want to have the first column be time. That expression would be: formatdateTime("%c", getTime(alarmStatus)) while the second column would just be: alarmStatus Finally, you'll need to set the Description field for each alarm based on what you how you want it described in that table. It might seem a little cumbersome at first, but it will give you A LOT of flexibility. For example, you could, down the road, add email alerts, or handle a stack light or horn without minimal changes. That said, I might actually pass a few other items to the alarmFired/Reset/Ack functions, so: function alarmFired(string desc, priority, string help) Then the Fired event would be: alarmFired(strDescription, Priority, strHelp) You don't have to use priority or help, but at least it is being passed in so if you need it down the road it is already there.
  2. AzeoTech

    Alarm Summary

    This is because everyone seems to want something different. So instead of a lot of high level built in controls, we give access to allow you to create exactly what you want. The next step, hopefully coming soon, is the ability to create your own sort of modules, so stay tuned on that. But as to alarm info, it depends on whether you want to display the status of all alarms at once (usually for smaller alarm counts), or a running list of active alarms as they occur. These are, at least, the two most common. You may want something different.
  3. AzeoTech

    Conditional Colors

    Yes, it automatically shades between values. To make it do discrete colors just double up. So, if you want it blue all the way to 95, then red from 95 up, set the blue threshold to 94.99 and the red one at 95. If you wanted 3 colors, say, blue to 50, yellow to 95, and red above, you'd do blue 49.99, yellow 50, yellow 94.99 and red 95. It is still technically shading from 50 to 94.99, but since both colors are the same, it results in just that color. It is also technically shading from 94.99 to 95, but the range is so small you don't see it. You can of course add more 9's to the end.
  4. AzeoTech

    Alarming After A Set Time

    The pause variable affects when the alarms are processed, so unpausing the alarms will not cause an additional 60 second delay in your case, since you are using the system time as your reference point.
  5. AzeoTech

    Alarming After A Set Time

    There are lots of ways. First, you can always do Alarm.paused = 1 to stop DAQFactory from processing alarms. In fact, this is a good thing if you have lots of alarms. Set paused to 1, then use alarm.checkAlarms() to trigger alarm checking from a simple sequence. This is more efficient. Alternatively, you can modify all your alarm expressions and add: && !isempty(alarmsStarted) to the end, so it might be: pressure[0] > 100 && !isempty(alarmsStarted) Then, just declare alarmsStarted when you are ready for DAQFactory to start processing alarms: global alarmsStarted = 1 There are plenty of other ways too.
  6. If you are going to use DAQFactory networking (meaning creating a "Connection") then you'll have to put the data in a channel. Just use a test D/A channel on the main system and set it to the desired value like you would a variable. Now as to addressing, you can always use 127.0.0.1, which is defined (universally, even in other programs) as the current system. Just remember that you need to enable broadcasting. It is disabled by default for security reasons. Go to File - Document Settings to enable. It should only be enabled on the server application, not the client.
  7. What you are seeing is actually a limitation of your device, not DAQFactory. It apparently only likes one connection at a time. So, the only way to share that data between two DAQFactory instances is to have one instance retrieve the data from the device and have the other instance retrieve the data from the first instance. You can do that with DAQFactory networking if you are using Pro. Alternatively, on the same machine, you could rig something up where that first instance writes the data to a file and the other instance reads it.
  8. AzeoTech

    Workspace Window

    Yup, its 9 years old. We moved our forum so any links to www.azeotech.com/board/index.php? have to be adjusted to support.azeotech.com. So:
  9. AzeoTech

    PostgreSQL

    Probably. You just need to find a 32 bit ODBC connector for PostgreSQL. DAQFactory connects to all databases via ODBC and really doesn't know exactly which database you are working with. ODBC makes this transparent.
  10. AzeoTech

    Modbus 485 Flow Control

    You probably want to set the Comm port handshaking to Manual, then set RTS control to Toggle. These parameters largely align with the Windows DCB structure for opening comm ports and you can read about it here if you want a lot of detail: https://docs.microsoft.com/en-us/windows/win32/api/winbase/ns-winbase-dcb
  11. AzeoTech

    "UNDO" operation issue

    Due to the dynamic nature of DAQFactory (the fact that it is running your application all the time and doesn't really have a compile time vs runtime), the undo only undoes one step, and only position changes. We are looking to improve this.
  12. Can you give me the exact steps you perform to reproduce this? It sounds like you load your document in Runtime mode with a document editing password, then hit F4 and it goes into Development mode?
  13. AzeoTech

    continue ignored in while loop

    Sounds like a bug. I've noted it so it is looked at and fixed in a future release. I tested with this simple sequence and it looks like continue inside of a catch() doesn't just break out of the while, but ends the sequence: while(1) delay(0.1) try ? 'a' ? b catch() ? 'c' continue endcatch ? 'd' endwhile ? 'e'
  14. AzeoTech

    FileHandle

    File handles are used when you are using low level file access, basically functions that start with "File.". You do not need it if you are using an export set. You say the sequence will not run. Have you checked the command/alert for an error message? Can you post the entire sequence?
  15. AzeoTech

    continue ignored in while loop

    Possibly. Personally I typically reverse my logic, checking for valid, rather than invalid cases, so don't use continue much. In your case, I would consider putting the entire script inside the while inside a try/catch block rather than just the comms handling.