All Activity

This stream auto-updates     

  1. Today
  2. The simplest way to log data is to use a logging set, but it will log all data, so you would have to set the Timing of your channels to 30 minutes (1800). If you would like to acquire data faster than every 30 minutes but only log every 30 minutes, you should probably try an Export set. Use [0] after each of the channels listed in the Export set, then trigger the export every 30 minutes using a sequence: while(1) delay(1800) beginexport(myExport) endwhile
  3. AzeoTech

    Completely stopping history.

    Your best bet is to capture the desired values and either put them in a different channel, or more likely into a variable. That way you have control over when it updates and can avoid the overwriting the history of the input channel issue you are seeing. How to do this depends a little on how you want to capture the data. You say every 3 hours, do you want the average of 3 hours data, or just a snapshot of the data? Is this an experiment or batch that runs for 12 hours that you want to start with a button press for example?
  4. I am monitoring 72 channels for 12 hours. I am trying to display a value from each channel every 3 hours in a table for each channel. This works in a way. Each cell in the table displays the history of the channel at 10800 sample intervals. But due to the way history updates, it only displays properly at the 12 hour mark. All 4 cells display the voltage at that point in history. But then the history continues to update and push the values out of sync. I'm okay with it being out of sync until hour 12. But I want the values to be left unchanged after that. So people can see the results at any time after the run. So. Is there a way to completely stop history from updating after 43200 samples? Limiting the history to 43200 does not work. It just starts overwriting the history.
  5. Yesterday
  6. AzeoTech

    Cannot access hardware key

    They all have a light, it is just a tiny light inside a hole on one side of the key.
  7. AzeoTech

    Pid And Pwm To Control Temperature

    It is supposed to do that because it is designed to pulse to give a partial output. If you just want it on or off then you really don't want PID, you just want to create a thermostat type control which is much simpler. Then the code is something like (assuming heating): global sp = 50 while(1) if (myvariable[0] < sp) output = 1 // turn on heater endif if (myvariable[0] > sp * 1.05) output = 0 // turn off heater endif delay(1) endwhile Note the * 1.05 is hysteresis, and keeps it from turning on and off rapidly when around the SP.
  8. The easiest way is to simply fire up two copies of DAQFactory on the same machine at the same time, probably with at least one in Safe mode. Then go to the desired page and do Edit - Select All, the Copy, then go to the other copy and do Paste.
  9. AzeoTech

    DAC Output with PID control

    I would first make sure you can manually control the SSR. Once you do that, then work in the PID. I'd need more detail on your hardware to address the first part. As to using a PID to control a digital, you need to actually have the PID output to a variable, then create a sequence to pulse the SSR based on the PID output, where, typically, -100 is all off, and 100 is all on. 0 would be 50% on, 50% off. You can determine the cycle time based on your process.
  10. AzeoTech

    Array Basics?

    Everything is done with [] bracket notation, so, for example to access element 3,62 you would do channels[3][62]. The array is created dynamically as you reference it. So to create a 4x72 array, you would just give element 3,71 a value and DAQFactory will fill in the rest with 0 or blanks: channels[3][71] = "abc". Note that indexing is all from 0, so [0][0] is the first element. This is all described in 4.5 and 4.6 of the user's guide.
  11. kedi

    Array Basics?

    First post. I find the Guide to be very sparse on array information. I need the basics. How to create a 4 x 72 array named channels. ( I think I know this much ) How to insert a value read from a channel into that array. ( channels(3,62)=channel62 for instance ?) How to reference a value in the array to display in a table. (Expression in the table component ( channel(3,62)?) Right now I don't know the different formats to access the array. Creating, inputting to it, reading from it.
  12. Last week
  13. I'm trying to use the PID to control a SSR. It needs to turn the SSR on and off based off of a Temp process variable. I have the PID Output Channel set to PIDOut. I then use sequence code to either send a 0 or 1 to the SSR channel based off of PIDOut. When I click on SSR channel and look at the values in the table, I can get it to alternate between 0 and 1, as it should by changing the set point in the PID. The SSR channel is in DAC0 and the corresponding Vs, but the SSR remains powered. It will not turn off with a value of 0. What am I doing wrong?
  14. Pioneer

    Pid And Pwm To Control Temperature

    When I use the above code my SSR channel alternates between 0 and 1. How do I get it to stay on the correct value? Edit: Added at the top of sequence code: global PIDOut PIDOut = 1
  15. prospective

    Cannot access hardware key

    Thank you - it worked perfectly!!!
  16. prospective

    Cannot access hardware key

    Thank you for the reply Guru - My hardware key do not have a light on the hardware key - its a short metal key. I will try the driver, thank you very much!
  17. Earlier
  18. Hello, I have a test file that I've been using to experiment with different UI components. For example, I use user interaction to show/hide various parts of the interface and display differently depending on the state of different variables. This has led to a large amount of named components along with a lot of buttons that have quick sequences as part of their actions. I'd like to incorporate this page into an existing DaqFactory file without having to redo either all of the existing pages on my new file or all of my UI work on the old file. Is there a way to copy the entire contents of a page between DaqFactory files.
  19. holstein

    Long serial string comma separated

    This was the solution, thanks a lot people of Azeotech! Best regards, Johan
  20. AzeoTech

    Cannot access hardware key

    Does the light on the hardware key illuminate when you plug it in? Is the key recognized by Windows? You may need to get the latest driver for the key. It is manufactured by Marx.com and the driver can be downloaded here: https://www.marx.com/en/support/downloads#driversanddiagnostic Click on Downloads then select CBUSetup.
  21. AzeoTech

    Long serial string comma separated

    You can use the parse() function to split that into an array of items. Pass -1 for index to split the entire string: global string mydata = parse(myInput, -1, ",")
  22. Hi group, I have a long string and is comma separated, I made one single channel and read the long string, now I like to put every value in a variable display. The string looks like this 3.34uW, 3.08nW,calibrate, COUPLER, etc. Thanks, Johan
  23. prospective

    Cannot access hardware key

    Good day I am not a experienced DAQFactory user - I wrote a monitoring / analyzing program for a client four years back (2017). I used a development package I bought, I think in 2013. (I also bough a hardware key in 2013) In 2017, I also bought a runtime license that was never activated because the client paused the project. They now want to proceed. (In Africa things move slow!!) I now want to transfer the development license onto my hardware key, and activate the runtime (for the first time) on the PC that will monitoring the process. When trying to do this, I get a message "Unknown error trying to access the hardware key" I realize that may be an error outside DAQFactory, but will appreciate that if you had this problem before, that you may be able to guide me. I deactivated all firewalls and security where possible, but the problem still exist. If needed, I don't mind posting this on your "Paid Support"
  24. AzeoTech

    Alarm on comm timeout/cable unplug

    Maybe. I can't say for sure. It wasn't really designed for that and the mechanism for getting data to the slave is different than other protocols.
  25. hello I want to record every 30 minutes and then if I can create a folder month by month where the data is on the hard disk as history
  26. AzeoTech

    Generate Alarms From Script

    No. I think that the assumption was made that if you are doing something advanced enough to need dynamically created alarms that you probably have spun your own alarm code.
  27. bms

    Generate Alarms From Script

    Is there a way to dynamically create alarms from sequences, or do they have to be manually added in the alarm summary view?
  28. bms

    Alarm on comm timeout/cable unplug

    That's great, thank you. Do these objects also support ModbusTCP Slave? Also, I'm confused with variable scope in a specific situation: class ModbusClass local string IPAddress = "192.168.1.1" local ModbusAddress = 1 local EthernetPort local ModbusDevice function Init() EthernetPort = new (CCommEthernet) EthernetPort.Address = IPAddress EthernetPort.Port = 502 EthernetPort.InitComm() EthernetPort.Purge() ModbusDevice = new (CCommDevice) ModbusDevice.PortObject = EthernetPort ModbusDevice.ProtocolName = "ModbusTCP" endfunction function Read(start, length, string type) ? format("IP Address: %s", ModbusDevice.IPAddress) return evaluate("ModbusDevice." + type + "(" + ModbusAddress + "," + start + "," + length + ")") endfunction endclass class DataManagerClass local Modbus function Init() Modbus = new (ModbusClass) endfunction endclass global DM = new (DataManagerClass) DM.Init() DM.Modbus.IPAddress = "10.0.0.19" DM.Modbus.Init() DM.Modbus.Read(0,125,"ReadInputU16") The output is: 192.168.1.1. The local variable IPAddress holds "10.0.0.19" as I would expect, but why does ModbusDevice.IPAddress print 192.168.1.1? Curiously, I do correctly poll the slave at 10.0.0.19
  29. AzeoTech

    Display UTC Time

    You would have to have the user specify their timezone offset and then apply that to the display using simple math. So, if their offset is +8, you'd just adjust your time stamps by 8*3600. Technically you probably could retrieve the local timezone setting from the OS using either shellExecute() or better, use extern() to load in the windows DLL that handles time. These, however, are a bit more complicated to achieve and would require some research into the workings of Windows. For example, I found that you can do this to get the time zone from the command prompt: systeminfo | findstr /C:”Time Zone” which you might then be able to pipe to a local file that you could then read into DAQFactory using the file. functions. It would take a little experimentation but should be workable.
  1. Load more activity