• Content Count

  • Joined

  • Last visited

Everything posted by AzeoTech

  1. AzeoTech

    Running a sequence once in 8 days

    I would probably create a Test channel with a History and Persist of 1 to store the next time the sequence should run, then have another sequence always running looking to see if that time has past. So, the Test channel could be like "NextMySequenceTime", Device Type: "Test", D#: 0, I/O type D to A, Channel #0, Timing 0, History 1, Persist 1. Then create a sequence marked auto-start, or that is started by your auto-start sequence: if (isempty(nextMySequenceTime)) nextMySequenceTime = systime() endif while(1) if (systime() < nextMySequenceTime) beginseq(mySequence) nextMySequenceTime = systime() endif delay(1) endwhile
  2. AzeoTech

    Rotate Component

    Most likely your wmf's aren't coming across as WMF's, but as bitmaps. This happens if you cut and paste from most programs. You may need to import the wmf into Symbol Factory then copy and paste it out.
  3. AzeoTech

    Hikvision IP and DF

    The plugin isn't for DAQFactory, but for the Chrome installation on that PC. To refresh the browser component, just call the SetURL() function of the component: component.myBrowser.SetURL("http://user:password@´╗┐ ") That may not work if the browser instead pulls from cache, so you might do something like: private i while(1) component.myBrowser.SetURL("http://user:password@´╗┐?junk=" + i) i++ delay(0.1) endwhile
  4. AzeoTech

    Markers text location and font

    Oh, to change the page programmatically, just do: page.strCurrentPage = "mygraphpage" delay(0.1) page.strCurrentPage = "someotherPage" As for the second part, I would probably split my page in two. Put the graph and anything else you want to print on one page, and everything else on another. Then have DAQFactory show both pages overlaid for viewing, and just show the one for printing. To programmatically change to two pages, do: page.strCurrentPage = "firstPage,secondPage" Make sure not to put any spaces after the ,
  5. AzeoTech

    Hikvision IP and DF

    If RTSP isn't working in the browser component, you probably need a plugin. Open Chrome on your system and see if that can access it. Was the error 302 or -302? 302 means the server sent a redirect and you'll have to figure out where it sent it. -302 isn't valid that I know of... Also, why not use the http method? You can just force a refresh every 0.1 seconds or so.
  6. AzeoTech

    Markers text location and font

    Depends on how you started DAQFactory and what the target directory is. This is largely determined by Windows. It is usually better to fully specify the path, for example: "c:\daqfactory\abc.pdf" There is no way to print just a part of a page. If you want to include just a part, it is best to create a second page with the exact same components, excluding the ones you don't want, and print that page instead. Note that in 17.x and earlier you have to view any page with a graph at least once before trying to print it / capture it. You can just view it programmatically for 0.1 seconds. To view a PDF you'd have to use the system.shellExecute() command. Ideally you would run the acrobat reader, but just executing the .pdf will likely work if you have it properly associated in windows.
  7. I personally use daqconnect.addValue() for everything. It gives me more control over exactly what data gets sent. And in your case avoids a dummy channel. I also use daqconnect.init() instead of using the menu, as it is more obvious what the data source is set to. It also allows for programmatic change of the data source.
  8. AzeoTech

    Markers text location and font

    Your best bet is to create a separate page for each graph, presumably duplicating the main page with 4 graphs. Then use page.printPDF() to print the appropriate page with the appropriate graph. Note that under 17.1 and earlier you have to view these 4 pages at least once before trying to print them. You can do this in a startup sequence. The viewing can be quite quick, 0.1 seconds. Releases after 17.1 will not have this requirement.
  9. There are shortcut keys you can assign in the Page properties, but usually people will create screen elements, such as a button that changes the page. To avoid creating the same menu over and over again, you can use overlaid pages. To see this in action check out the AshlandWater.ctl file in the samples folder.
  10. No, the dropdown is fixed.
  11. AzeoTech

    Unknown Error In Draw

    Olis, which release of DAQFactory are you using, and can you post your .ctl document and instructions on how to reproduce the failure?
  12. AzeoTech

    "p-Modbustcp 0010: Timeout" Error

    That is still pretty odd. Does that number actually update? Try creating a variable value control with this Expression: CH1.time[0] and see if it changes as well.
  13. Don't use the workspace to switch pages. Create buttons that change the pages and then it is easy to add script to trigger a sequence. The workspace is really designed for development, not for running your application.
  14. AzeoTech

    Multiple serial ports open

    Something is off then. My guess is the assignments aren't correct. Why don't you post or email us your .ctl doc so I can check. Many customers run multiple com ports so the program is certainly capable of it.
  15. AzeoTech

    Markers text location and font

    1) Removing Markers on graph via code: You can't do it. The idea of the markers it that they are user adjustable. If you want to create a scriptable marker, use the line or axis annotations instead. 2) Enlarging font of markers description which is displayed at the bottom of the graph and also changing its location. You can create your own display and make it look however you want by referencing the MarkerA_X, MarkerA_Y variables of the graph. 3) Changing font size for values inside of dropdown Combo List. Not currently possible. 4) While using Date-time picker, option to make time as either start or end of the day selected. You can simply do the math on the result. Start of day is: floor(value / 86400) * 86400. End of day is: floor(value / 86400) * 86400 + 86400. 5) Thaw all axis, instead of x and yfrozen for graph via code. Not sure what you mean here. In code, just set XAxisFrozen and YAxisFrozen variables to 0. Having another variable to do both is redundant. 6) Also, I tried printing graph and then saving it at a specific location, but when I click browse to select a path, the Daqfactory file crashes. This is a known issue in newer versions of Windows. Put the graph on a page to itself and use the regular print instead of the right click print.
  16. AzeoTech

    Multiple serial ports open

    Yes you can definitely do this. What problem are you seeing when you try this? Note that if you want to create two devices that use the same serial port you should only create one port and assign it to both devices.
  17. AzeoTech

    "p-Modbustcp 0010: Timeout" Error

    It is hard to say. It is probably just one channel that is causing it. Either you are querying an invalid tag, or you have other settings wrong on one of your channels, such as D# set to 0 instead of the proper Modbus ID. I would go through and set the Timing of all your channels to 0, then reset them one by one until the message starts appearing. Then you'll know which channel is causing the troubles.
  18. OK, but first I have to say: DAQFactory can't collect data when it isn't running, and Windows won't buffer the data on the serial port, so there is no way for DAQFactory to acquire data on the serial port before it starts, or if it is closed and reopened. This is a Windows limitation. As to the question at hand, there are a number of posts on this forum to read data that constantly streams. The general format is something like: purge() while(1) readUntil() parsedata endwhile where the while loop also generally contains a try/catch around the readuntil/parsedata portion, with a catch() that adds a small delay. You don't need a delay otherwise, and don't want one as it can cause a backlog. The readuntil() function will generate a delay while waiting for data. As to the parsing, use the parse() function to parse each line by the comma. Then it comes down to data manipulation. So, do the high / low sides need to be combined, or do you want them in different channels? If different channels, its pretty easy: either name your channels based on a convention based on the addressing, or use the channel.addValue() function to map the addressing to D# and Channel #'s.
  19. Send the file to support at azeotech There must be something in your file that is referencing those drivers.
  20. The Trilogi error is a little unusual. I do not believe it is included in the installer anymore. It must be referenced in your document somewhere. You can send the doc to us and we can quickly check. Initcomm() just tries to get access to the serial port for communications. It does not actually send anything over the line. It's kind of like picking up a phone and listening for a dial tone. It does just that, but doesn't actually make a call, or talk with anyone. If the serial port doesn't exist, or is being used by another application it will throw an error.
  21. Section 12.7 of the user's guide covers this. Take a look and post any questions that might come up. Note that DAQFactory is subject to whatever firewall settings you have in Windows, so if you can't get it to connect, it is probably because your Windows firewall settings aren't allowing the ports (2345 - 2348 if I remember correctly)
  22. If you really want to do error handling on the comms you should probably switch from using Channels and Timing to using a little script. You can still use Channels to store your data, but you would use a little script to collect the data. Something like: while(1) try private myData = device.myDevice.ReadHoldingU16(1,0,1) myChannel.addValue(myData) catch() ? strLastError // do something else if it fails endcatch delay(1) endwhile Channels and Timing does its own error handling. It prints the error to the command/alert and tries again next time. There is nothing wrong with those error messages, but if you want more, you have to revert to script. I should add that if you have multiple devices, and one is timing out, it will slow down acquisition for the other devices. For this, I suggest using the Offset parameter to stagger the reads across multiple threads. Use a different Offset value for each device, though if you have multiple devices on a single 485 chain, you should put all of them on the same offset.
  23. There's nothing glaringly wrong in your document, though you should watch your indentation. Though that won't affect the way DAQFactory, it does affect how readable your code is. Also, your giant boolean expressions can be written much simpler. You can use bit math to quickly tell if 4 bits are in a certain configuration, just & the value with 15 and compare. So, if you want all 4 bits off, just do: (S1 & 0x0f) == 0 For any bits 0-2 on and bit 3 off, do: ((S1 & 0x0f) < 8) && ((S1 & 0x0f) > 0) I also would do a for loop and use evaluate() to check all 67 items if I stuck with S1-S67. But if you had S1-S67 in array called S with 67 elements [0] -> [66], it gets even simpler and you can pretty much do it in a single line: All of the 4 LSB's off for the entire S array: max(S & 0x0f) == 0 Any bits 0-2 on and bit 3 off: min(((S & 0x0f) < 8) && ((S & 0x0f) > 0)) == 1
  24. AzeoTech

    RS485 hyperterminal connection

    Why are you doing readUntil(35)? ASCII 35 is the # mark and I don't see a hash mark in your input stream. You should be doing ReadUntil(10) which is the last character in your input string, a line feed character. You are getting Timeouts because DAQFactory is waiting for the # which never comes.