LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

Watlow F4 Profile Programmer

So I am currently trying to use LabVIEW to control a Watlow F4 temperature controller. We want to be able to allow operators to easily configure temperature profiles for things like thermal cycling, etc. The attached F4 driver is basically the control that I want the program to be able to have. The problem I am running into, is how to create simple controls for setting a series of setpoints/soaks. There are times when a single setpoint and soak will be sufficient and there are times when there may be 4 or 5 setpoints and soaks. I'm not sure how best to modify this example VI to accommodate that kind of control. I imagine using some sort of array or something that they can enter a setpoint and a dwell but I'm not sure exactly how to implement that. Any help would be appreciated. Thanks. 

0 Kudos
Message 1 of 33
(2,753 Views)

I'd probably scrap the example and make a QMH.  The steps look pretty straightforward.  I'd have a button to add a profile, which pops up a control panel that has "Add a step", "Execute" and "Cancel".  The main window has a progress indicator (charts(s), indicators, something like that). As well as an "Abort" button and a way to directly manipulate the controller.  Other stuff as well.  That's just to give you ideas.

Bill
CLD
(Mid-Level minion.)
My support system ensures that I don't look totally incompetent.
Proud to say that I've progressed beyond knowing just enough to be dangerous. I now know enough to know that I have no clue about anything at all.
Humble author of the CLAD Nugget.
0 Kudos
Message 2 of 33
(2,724 Views)

I did think about using a QMH to make the program. I just wasn't sure exactly how to implement that. I guess if you were to choose the "add a step" button on the control panel, how would you then program that in your controller loop? For example, the operator would need to be able to choose either ramp time, ramp rate, soak, or end and then select set-points/durations. I think I know how to do it if every profile always used the same steps in the same order but as that could change between each profile, how would you implement that? I apologize if I'm missing something obvious.

0 Kudos
Message 3 of 33
(2,709 Views)

@Cannon_Controls wrote:

I did think about using a QMH to make the program. I just wasn't sure exactly how to implement that. I guess if you were to choose the "add a step" button on the control panel, how would you then program that in your controller loop? For example, the operator would need to be able to choose either ramp time, ramp rate, soak, or end and then select set-points/durations. I think I know how to do it if every profile always used the same steps in the same order but as that could change between each profile, how would you implement that? I apologize if I'm missing something obvious.


Maybe you can refine it as an enum labeled "Add a Step" and the selections would be Ramp Time", Ramp Rate", etc.  Each would display an appropriate, and confirming the step would add that command to the "command queue" that will be sent and executed with the "Execute" button.

 

Does that sound right?

Bill
CLD
(Mid-Level minion.)
My support system ensures that I don't look totally incompetent.
Proud to say that I've progressed beyond knowing just enough to be dangerous. I now know enough to know that I have no clue about anything at all.
Humble author of the CLAD Nugget.
0 Kudos
Message 4 of 33
(2,688 Views)

That's a great idea. I couldn't figure out how to allow the user to set commands in different orders but a command queue would be great that runs each VI in turn in a separate loop. I'm pretty confident that I can make that work. My last question would be, we also want the ability to save profiles so that they can be re-run. What would be the best way to do that with this format? Is it possible to create a command queue from a text file or something similar?

0 Kudos
Message 5 of 33
(2,664 Views)

Probably simplest to flatten the controls to xml file using the LV Schema palette.

 

I was thinking that each command would be distilled into something you could send from a generic "Send" VI that just sent whatever command you told it to.  That way, you queue up the command queue with the array of "distilled" commands (by this time, they should all be of one data type, like a string, so you should be able to make an array), then just put the Send VI into a FOR loop and there you go.

 

Sorry for the delay.  I had this Friday off, so I just dropped by from home.

Bill
CLD
(Mid-Level minion.)
My support system ensures that I don't look totally incompetent.
Proud to say that I've progressed beyond knowing just enough to be dangerous. I now know enough to know that I have no clue about anything at all.
Humble author of the CLAD Nugget.
0 Kudos
Message 6 of 33
(2,657 Views)

Ok, that's helpful. I have never really done anything like this before though. So, this is what I am imagining. I think for simplicity sake, I would make a separate program for creating the profiles (in an xml format like you suggested). Then the main program would be responsible for reading the xml file to queue up the commands. Is that a good idea? Then there would just be a place that would allow you to select the XML file for the profile that you want to run. I have never really used flatten to xml or vice versa. I've been looking at the "Read from XML and Unflatten Data" example. So for this case, I would have to save to file which subVI to use (soak, ramp rate, ramp time, etc.) for the command queue and then the associated values (setpoint, ramp rate, time, etc). Do you maybe have a similar example that I could look at? It doesn't seem like it should be too complicated but I seem to have a bit of a disconnect on how that'll work. I imagine the profile configuration program having an enum for selecting the appropriate subVI and then numeric controls for the appropriate ramp rates, setpoints, etc. I'm just a little worried about getting that to log to a file. Reading the file seems more straightforward and I think I can figure it out. Any help is greatly appreciated. Thank you.

0 Kudos
Message 7 of 33
(2,627 Views)

"Flatten to Schema" is used when you want to easily save the contents of control, especially a complicated control like a cluster.  This is how you would save your presets.  Save this flattened data.  When you want to recall this data, you can recall it straight into the cluster and go.

 

When I meant that all your commands will be "distilled" into some string that you send, I meant that eventually all your parameters and stuff that the user entered has to get translated into a series of commands that the controller understands.  I imagine this would be in the controller manual somewhere.  (I've never programmed one of these before.)

 

I have to wait until I get home to see the VI.

 

Edit:

Oops, I see that what I was describing in the first paragraph is what you described as well.  You're right about that.

 

Let me just re-respond.

Bill
CLD
(Mid-Level minion.)
My support system ensures that I don't look totally incompetent.
Proud to say that I've progressed beyond knowing just enough to be dangerous. I now know enough to know that I have no clue about anything at all.
Humble author of the CLAD Nugget.
0 Kudos
Message 8 of 33
(2,619 Views)

I got stuck on the commands to send part.  I forgot you already have subVIs that take care of that stuff.  Yes, your plan sounds like it will work!

Bill
CLD
(Mid-Level minion.)
My support system ensures that I don't look totally incompetent.
Proud to say that I've progressed beyond knowing just enough to be dangerous. I now know enough to know that I have no clue about anything at all.
Humble author of the CLAD Nugget.
0 Kudos
Message 9 of 33
(2,614 Views)

So this is what I am envisioning for the main program. So it can queue up any subVI for different actions. So on startup it will initialize the oven and start creating a profile. From there, it will have messages that say things like "soak" or "ramp rate" and it will configure all of those as specified by the user until the "end" phase happens. Then when the user clicks a run button, it will run the profile. That all seems fairly straighforward to me. The part I'm still confused about is the XML file. So in this case, would I be saving a cluster with the message for the subVI to use, the parameters for that step, and the step number in the profile? Then just unbundling that for each step? Or is there a better way for that? Attached is how I think that this would work.

0 Kudos
Message 10 of 33
(2,605 Views)