September 1, 2010

Preview of Deminar #9 - Process Control Improvement Primer

By Greg McMillan

Process control is so detailed, fragmented, and experience dependent, it is difficult to see the commonality of process control solutions. In Deminar #9 at 10:00 am CDT Wednesday Sept 8, I will detail 10 key concepts in a unified approach that will be useful for process control improvement in 90% or more of the applications. Demos will be offered of the more dynamic consequences. The deeper understanding gained should be useful in developing process control improvements, most of which can be demonstrated by free use of virtual plants on the process control lab website http://www.processcontrollab.com/ .

To attend the event, go to http://bit.ly/JC-LiveMeeting
Use the information below to connect (if you're not using the available computer audio):
• Toll-free: +1 (877) 771-7176
• Toll: +1 (225) 383-1099
• Participant code: 264679




April 13, 2010

Deminar #1 Review - PID Control of Sampled Measurements (How to Eliminate Oscillations from Analyzers and Wireless Measurements with a PID Enhancement)

By Greg McMillan

PID Control of Sampled Measurements - Greg McMillan Deminar Series

The first Deminar is history. The seminar-demo showed how an enhanced PID controller can reduce cycling caused by sampled measurements. The benefits are not only the obvious one of less process variability but includes extending valve packing life by reducing the accumulated valve travel and battery life of wireless measurements by reducing the number of communications. The name of this series of live meetings was the result of me mistakenly saying "Deminar" when I meant to say "Seminar-Demo."

To keep the demo fast enough the process dynamics were in seconds instead of minutes. In other words, the 1 second deadtime and 10 sec time constant of the primary process were chosen to be indicative of a well mixed vessel with a mixing delay of 1 minute and a residence time of 10 minutes. Setpoint changes were made to show the response of a standard PID and an enhanced PID (DeltaV PIDPLUS). In future labs, the testing and importance of dealing with load disturbances will be discussed and demoed. Even though the process dynamics were relatively fast, I did not want to waste precious viewer time or risk viewer boredom staring at a trend chart waiting for the response to develop. Consequently, I shuffled back and forth between the demo and the seminar presentation WebSeminarDemoLab01.pdf and user screens to discuss the concept of the enhanced PID and flexibility of the lab and virtual plant to explore, test, and quantify process control improvements. I could have presented comparison trend charts of a traditional versus enhanced PID as typically seen in most presentations but choose to make the demo more interactive and show the dynamic transition when the enhancement was turned on.

The demo started out with a controller tuned for composition control of a self-regulating process with an online analyzer providing a continuous measurement of vessel composition by means of a probe (e.g. NIR probe in a circulation line). The setpoint response of the standard PID for the continuous measurement was fast and non-oscillatory with almost no perceptible overshoot.

I then set the sample time to be twice the primary process time constant and made another setpoint change. If the time scale was minutes instead of seconds, the 20 minutes sample time would be typical for a chromatograph. Now the setpoint response exhibited a significant overshoot and oscillation. I then cut the reset time in half, a common scenario because of tuning misconceptions or change in process dynamics. The setpoint response developed severe and persistent oscillations . When I switched on the PID enhancement, the oscillations quickly died out. A subsequent setpoint change showed that the enhanced PID response had no overshoot or oscillation.

The last test involved the removal of the sample time and the addition of a 2% sensitivity limit to show the result of an analyzer or wireless measurement with a detection or reporting threshold (called deadband for wireless measurements). The sensitivity limit was purposely chosen to be larger than typically expected to show a clearly recognizable oscillation. I had intended to switch back right away to the traditional PID but instead made the setpoint change to the enhanced PID. I wondered why the response did not show the expected cycling until I realized I had forgotten to switch back to the traditional PID. When I did make the switch to the traditional PID, the cycling started but we ran out of time to show the subsequent limit cycle (perpetual constant amplitude square wave cycle in the process variable and saw tooth cycle in controller output).

For your viewing pleasure, checkout the ScreenCast courtesy of Jim Cahill.

We expect to have the audio glitches worked out for the next Deminar on "PID Control of Valve Sticktion and Backlash" set for April 21 at 1:00 Central Daylight Time - my personal apologies to Europe about the time.




April 2, 2010

Exceptional Opportunities in Process Control - Peak and Integrated Error - Part 4

By Greg McMillan

Let's pull together this series on errors and conclude with a check list. The idea was prompted by perusing a popular book written on just the value of check lists. I didn't think you could write a book on just one concept but the result of saving lives for surgical procedures is impressive. I know as I have gotten older, check lists are essential to just remember what I am suppose to be doing. I have found checklists to be helpful for me from both a practical and psychological viewpoint when rushed or overwhelmed with details, tasks, and objectives.

In the following list, increases in on-stream time can increase efficiency besides capacity by eliminating the time and off-spec and waste associated with abnormal operations, startup, and shutdown. An increase in yield or decrease in recycle can be taken as a decrease in raw material costs (same production rate for lower feed rate) or an increase in production rate (higher production rate for the same feed rate). The order of the list is in order of things to check and somewhat in the order of priorities.

Check List to Improve Process On-stream Time, Production Rate, and Efficiency
(composition measurements include conductivity, dissolved oxygen, pH, and turbidity)

1. Use smart transmitters with the best sensor technology and integration of process and ambient conditions compensation.

a. Avoid older technologies particularly ones with mechanical elements

b. Seek sensor and transmitter with the best sensitivity and repeatability

2. Pick sensor location and installation method to provide the most representative measurement in process with no stagnation, best velocity, fastest response, and least noise.

a. For DP and pressure transmitters, avoid impulse lines (sensing lines) by direct mounting transmitters or using diaphragm seals and filled systems

b. For DP and vortex flow meters insure uniform velocity profile

c. For thermowells and electrodes increase velocity to reduce response time and coatings but not so high to cause abrasion, static charge, or vibration

d. For thermowells and electrodes pick location with good mixing, minimal transportation delay, and least bubbles, slime, and solids

3. Use real throttle valves with smart positioners.

a. Avoid on-off and isolation valves posing as throttling valves. Go to a control valve manufacturer instead of a piping valve manufacturer

b. Seek actuator, positioner, and valve type with best sensitivity of installed flow characteristic and signal response with least stick-slip and backlash

c. Verify positioner feedback measurement is representative of internal closure member (e.g. ball, disk, or plug) and not just actuator position

4. Tune control loop with on-demand auto tuner or adaptive controller to meet loop objectives. Tuning speed is chosen to:

a. Insure an exceptionally smooth PV and output response by decreasing transfer of variability from PV to output (increasing Lambda) for:

i. level loops on surge tanks to minimize feed upsets
ii. deadtime dominant loops (deadtime >> process time constant)
iii. interacting loops (e.g. headers)
iv. loops on piping or equipment with no back mixing (e.g. blenders, heat exchangers, extruders, static mixers, sheets, webs, and yarns)

b. Provide good load rejection of moderately fast disturbances by increasing transfer of variability from PV to output (decreasing Lambda) for:

i. Fed-batch and continuous agitated vessel and column composition, level, pressure, and temperature loops

c. Provide good load rejection of extremely fast disturbances by setting the gain and reset as a factor of deadtime rather than the time constant for:

i. Continuous agitated vessel and column composition, pressure, level, and temperature loops

d. Provide minimal overshoot of setpoints of slow lag dominant loops (process time constant >> loop deadtime and slower than 10 minutes) by tuning the loops as near-integrating processes for:

i. Fed-batch and continuous agitated vessels and column composition, pressure, and temperature loops (setpoint changes occur at startup or for changes in batch phase and product grade)

e. Provide minimal peak error by maximizing controller gain even if it requires increasing reset time to maintain robustness for:

i. Prevention of SIS activation
ii. Prevention of pressure relief
iii. Prevention of environmental violation
iv. Prevention of equipment damage

5. Add DCS signal filter or damping adjustment to keep loop output fluctuations from noise less than the valve deadband to prevent excessive valve packing wear and inflicting disturbances on loop. For wireless transmitters use damping adjustment to reduce keep transmitter output fluctuations from noise less than wireless deadband to eliminate unnecessary communication and extend battery life.

6. Eliminate on-off actions

a. Replace on-off control by switches with loops.

b. Eliminate manual actions by adding loops, keeping loops in highest design mode, adding feedforward, and automating and tuning loops to handle startup and abnormal operating conditions

c. Replace pure batch with fed-batch automation by replacing discrete sequential actions (e.g. stepping feeds) with loops (e.g. throttling feeds)

7. Tune loops that create feed disturbances (e.g. surge level loops) to provide a smooth slow transition in feed rate.

8. Add cascade control to compensate for nonlinearities and pressure disturbances (e.g. secondary flow loop and secondary coolant temperature loop).

9. Add feedforward control of measurable fast disturbances not compensated by secondary loop.

10. Optimize setpoints by operating closer to constraints for production rate or product quality spec.

a. Eliminate operating margin imposed by shift's perceived sweet spot or operating margin caused by process variability from not doing check list items 1-9

b. Find more efficient operating points based on R&D reports and virtual plant exploration - confirm with process tests

b. Add model predictive control to optimize setpoints as process conditions and market requirements change.




March 29, 2010

Exceptional Opportunities in Process Control - Peak and Integrated Error - Part 3

By Greg McMillan

At my recent presentation to the ISA Saint Louis section meeting on "pH measurement", I had several people around my age say how nice it was to see me still involved in advancing our profession. Maybe it was the beer and the top ten lists but just maybe it was also that I represent a generation of expertise rapidly disappearing via retirement. The ability to still learn and share keeps me going but I realize time is running out so I intend to take this blog to the next level by coupling it with a web lab series to provide an interactive self-learning experience for exploring process control improvements (PCI). I intend to start the web lab series on April 7. Recordings of the PCI topics and demos along with instructions on using the associated labs will be viewable anywhere anytime.

In the meantime, we need to finish up this series so let's see what we can do as automation engineers to minimize loop errors.

The first thing is to make sure the measurement is fast and precise enough. So far as loop performance is concerned, precision is more critical than accuracy. The bias or offset in a measurement and control valve position can be corrected by feedback control. The offset in valve position is eliminated by the process loop. Similarly, the offset in a process loop is eliminated when the loop is in cascade or remote cascade modes. For loops operated in the auto mode, operations have often compensated for the measurement offset by tweaking the set point. This is not to say that measurement accuracy is not important.

Improving the loop's speed of response often comes down to keeping sensors clean (e.g. electrodes and thermowells), minimizing signal damping and filtering, selecting sensor locations that eliminate transportation and stagnation delays, using boosters for big valves, maximizing positioner sensitivity, minimizing deadband, and maximizing the controller gain (last week's blog).

Control loops have a difficult time dealing with the poor precision experienced as excessive stick-slip and backlash (deadband) in control valves and insufficient resolution, repeatability, and sensitivity in measurements (older measurements technologies, such as floats and rotameters can also exhibit stick-slip and backlash). Fortunately, an increase in A/D input card bits have greatly improved the resolution of transmitted signals so that sensitivity and repeatability is the remaining focus. This is unfortunately not the case for variable frequency drives manufacturers whose standard input cards have only 8 bits. A resolution limit is more degrading than a sensitivity limit. For example for a 1% resolution and 1% sensitivity and a change in the true process variable of 1.5%, the changes in measurement would be 1% and 1.5%, respectively. The deadband setting in wireless transmitters is really a sensitivity setting. When the change in a wireless transmitter measurement exceeds this setting regardless of the direction, the full change in the process variable is communicated.

Pages 12 through 15 of EffectsLoopTuning&Dynamics-KPI.pdf show the relative effect of measurement accuracy and resolution on variability. For control valves, process variability is introduced when excessive slip-stick and deadband causes an appreciable limit cycle in loops that have single and two or more integrators, respectively (pages 19 and 20).

The total loop deadtime can be approximated as the sum of all the delays and small lags in the loop whether they are in the DCS, valve, process, or measurement. For flow, pressure, level, and inline temperature and pH loops, most of the loop deadtime comes from the automation system. If you consider that the remaining loops that have significant process deadtime, such as vessel or column temperature, have seriously detuned controllers that create an effective deadtime per Advanced Application Note 5, you realize you have the opportunity as a process control engineer to make big reductions in loop deadtime that are also low cost and quick compared to changing process piping or equipment to reduce transportation or mixing delays.

Fast disturbance originate from manual operation, on-off actions, sequences, or setpoint changes. The elimination of operator actions, on-off control (e.g. level switches), and the use of set point rate of change limits and fed-batch rather than pure sequential batch, can dramatically slow down disturbances since throttling control by intention is smooth. If we keep all loops in their highest design mode and limit on-off valves to SIS actions and isolation, we could eliminate step disturbances. Page 22 shows how slowing down the disturbance dramatically reduces the peak and integrated errors for an integrating process. Not shown here is the fact that slowing down disturbances can also reduce interaction between loops. This phenomenon explains why it is difficult to get pharmaceutical companies excited about doing a better job of bioreactor control after reaching setpoint. The disturbances from cells are incredibly slow (e.g. process time constants of days).

Maybe we should not slow down disturbances because all of our control texts are based on step disturbances. Slowing down the upsets relegates us to improving the set point response in the startup of a continuous process or for changes in phase in a batch process. Whoops, even here we could use strategies such as "Full Throttle Batch and Setpoint Response" to eliminate most of the job of the loop.

There are always opportunities to make us more appreciated even when we are not improving loops. Since spouses were at the ISA Section Saint Louis Meeting, I interjected the following list. The spouses laughed although a second opinion was suggested for some of the items. See what your spouse or significant other thinks.

Top Ten Reasons Why an Automation Engineer Makes a Great Spouse or at Least a Wedding Gift

(10) Reliable from day one
(9) Always on the job
(8) Low maintenance - minimal grooming, clothing, and entertainment costs
(7) Many programmable features
(6) Stable
(5) Short settling time
(4) No frills or extraneous features
(3) Relies on feedback
(2) Good response to commands and amenable to real time optimization
(1) Readily tuned




March 22, 2010

Exceptional Opportunities in Process Control - Peak and Integrated Error - Part 2

By Greg McMillan

How does controller tuning affect on-stream time and environmental costs?

The basic process control system (BPCS) forms the inner protective layer for safety instrumentation systems (SIS) as shown on page 5 of EffectsLoopTuning&Dynamics-KPI.pdf. The performance of the BPCS loops must limit excursions to be well within the operating limits that correspond to the trip points of the SIS. Specifically, the peak error for the largest and fastest disturbance should not cause a trip. The SIS should only be activated for failures or extremely abnormal conditions. The trip of a process unit not only causes downtime but can cause off-spec and additional waste during the shutdown and startup of the unit. The start-up of the process unit is often the most operator intensive and hazardous time. The importance of minimizing peak errors to prevent shutdowns can involve all types of loops (e.g. flow, level, pressure, and temperature). We normally think this is important only for continuous loops but I have been able to increase a fed-batch reactor capacity by 25% by eliminating level, pressure, and temperature trips by a series of override controllers tuned to minimize peak errors.

The peak error from the closure of a downstream valves (e.g. trip of reactor feed valves) on the discharge of a compressor controller must not cause an excursion of the operating point of the compressor to the left of the surge curve. If the operating point reaches the negative slope of the characteristic curve, it is like the compressor is falling off a cliff. The operating point jumps to a negative flow operating point in 0.03 seconds. This precipitous drop rivals water hammer in disturbance speed (both phenomena involve momentum balances that are orders of magnitude faster than material balances). Once a compressor gets into surge, the feedback controller is helpless and needs an open loop back-up (e.g. kicker) to get out of trouble as detailed on pages 6 - 8. Surge cycles can cause a decrease in compressor efficiency and damage by excessive vibration. I have also seen where surge caused a runaway speed response.

RCRA environmental regulations may classify a pond as hazardous waste if the pH of an effluent stream going into the volume momentarily ventures outside the permissible 2 to 12 pH range. Even though a short term excursion can not possibly change the pH in the volume and is effectively filtered by the volume where the change in pH is not detectable, the volume may still be classified as hazardous. For these systems, peak errors are incredibly important and kickers are used as shown on page 10 to prevent RCRA violations that not only can cause excessive fines but necessitate the process unit to apply for a new permit that might not be approved. A violation could result in the permanent shutdown of a unit because operation is no longer economically feasible or even allowed under new permit requirements.

Many process units have relief devises (e.g. relief valves and rupture discs) to prevent the over pressurization of piping and equipment. Often, pressure letdown and vent loops are the first line of defense. The peak error for the largest and fastest disturbance should be sufficiently away from the relief device setting to prevent fatigue and activation of the relief device taking into account setting tolerances and fatigue that cause a premature relief. The activation of a relief device is hazardous and causes downtime and waste burned in a flare stack or at best in a waste heat boiler.

So how do we minimize peak error? Given a set of dynamics and disturbances, the solution is to maximize controller gain even if it means increasing the reset time. This is seen in the first equation on page 1 but also intuitively from the realization that gain provides an immediate response whereas reset provides a gradual response. In the fed-batch reactor example cited above, the override controllers were proportional-only with their gains set high enough to cut back the reactant feeds immediately when the reactor pressure and level from the gas released as a byproduct or the temperature from the exothermic reaction approached settings that would cause a trip and the associated delay and disruptive restart of the feeds.

We can reduce the peak error per the first equation on page 2 by increasing the process time constant and decreasing the loop deadtime which increases the maximum allowable controller gain. We can also decrease the open loop error in the time frame of the controller's response by increasing the disturbance time constant. The fastest possible tuning should be able to stop the excursion from a disturbance after the loop deadtime. Thus, slowing down the disturbance slows down the excursion and reduces the peak reached in one loop deadtime (more on this next week). The process time constant is typically set by process equipment size and design, but we as automation engineers can greatly affect the disturbance time constant and the loop deadtime and sensitivity. We can iimprove the degree of automation, interaction, speed, reliability, and precision in automation systems. The opportunity may be larger than we realize. Up to 50% of downtime is attributable to instrumentation problems as noted in the March 2010 Control magazine article "Look to Valves for More Uptime"

Next week we will look at how the dynamics and precision of measurements, valves, and disturbances affect peak and integrated errors. We conclude this series with a check list for improving loop performance (Part 4).





March 10, 2010

Exceptional Opportunities in Process Control - Peak and Integrated Errors - Part 1

By Greg McMillan

If you increase the controller gain by the same factor that you increase reset time (e.g. double the gain and the reset time), how does it affect key performance indicators such as quality, yield, on-stream time, and environmental costs? If you make the valve and measurement faster, how does it affect these same KPI? If you want to improve a KPI, what is the priority of solutions?

The equations for the peak (Ex) and integrated error (Ei) in terms of controller settings, shown on slide 1 of EffectsLoopTuning&Dynamics-KPI.pdf, provide an answer to many of these questions if you embrace your inner geekness as advocated in the Control Talk Jan 2010 issue "The Future is Now"

Both equations were derived in Appendix A and B of Tuning and Control Loop Performance (scheduled to be back in print by Momentum Press, 2010). The derivation of the equation for the integrated error was included in Appendix C of New Directions in Bioprocess Measurement and Control (ISA, 2007) along with a unification of controller tuning rules. This unification, which showed how all the major tuning rules give basically the same result for a controller gain to minimize peak error, was personally satisfying but possibly not for people who are adamant about the relative merits of personal favorite tuning rules.

Since the integrated error is inversely proportional to the controller gain and proportional to the reset time, doubling the controller gain and reset time cancel each other out. However, doubling the controller gain halves the peak error since reset time doesn't appear in the equation of the peak error. Reset time has an effect on peak error but it is negligible unless the reset time is decreased to the point where it approaches the loop deadtime. This can happen for deadtime dominant systems, but the peak error here is basically the open loop (error with the controller in manual) as evident from the equations on slide 2 of EffectsLoopTuning&Dynamics-KPI.pdf.

Nearly all the process control literature focuses on integrated absolute error (IAE) as the measure of loop performance. The IAE is a good measure of product that is off-spec that can lead to reduce yield and the raw material or recycle processing to product cost ratio (euros per kg and dollars per lb). If the off-spec cannot be recycled or the feed rate cannot not be increased to compensate, there is also a loss in production rate. If the off-spec is not recoverable, there is an additional waste treatment cost.

What we usually don't take into account is the filtering effect of back mixed volumes as indicated by the equation on slide 3 of EffectsLoopTuning&Dynamics-KPI.pdf. For chemical and pharmaceutical plants and refineries, there are large volumes that provide significant attenuation of oscillations. However, in other process industries, various pathways of variability do not have significant filtering and culminate in the final product. These processes are also more vulnerable to interactions because there is no smoothing of effect of one loop's control valve movement on another loop's process variable. This changes the whole view on how you tune controllers. For systems with little back-mixing, controllers are tuned to limit the transfer of variability from the controlled variable (controller PV) to the manipulated variable (controller output) to prevent interactions and to provide a smooth response. The controllers are also tuned for coordination by enforcing a closed loop time constant (Lambda). For pulp and paper plants, nearly all of the variability expressed by the IAE ends up in the sheet since most of the processing is done in pipes and inline or unagitated equipment. Lambda tuning has been exceptionally successful in optimizing the transfer of variability and the coordination of loops. The same requirements could occur for plastics and textiles, since the IAE in the polymer lines and extruders shows up in the yarns and webs. However, these plants may have extensive blend tanks that average out the plus and minus fluctuations in product quality.

I ran into a process control improvement (PCI) study, where after an hour of discussion and investigation it became obvious a reduction in the considerable variability observed in each textile line had no value because the product coming out of the huge blend tank was always in spec and the variable speed pumps were maxed out. My decision to move on to better opportunities was not well received, so we stayed for 2 days to confirm there were no PCI opportunities (reducing the size or inventory in the existing tank or replacing the pumps were considered accounting or process design improvements).

When loops are oscillating across the split range point (common case due to valve stick-slip and installed valve characteristics), there can be a cross neutralization of acids and bases or a cross compensation of hot and cold heat transfer fluids that increases reagent and energy costs. Here the IAE is important but an integration of individual reagent and heat transfer fluids is a better indication.

If there are appreciable back mixed volumes whose residence time is much larger than the control loop period, the integrated error (Ei) where the plus and minus errors cancel out for a disturbance can be a better indication of the effect on product quality. Taking into account that the integrated error is also the IAE for an over-damped or critically damped response, we realize the simplification of the relationship of off-spec to an integrated error offers considerable understanding as to the effect of tuning settings.

This topic will roam on for 4 parts. In part 2, I discuss the effect of the peak error on onstream time and environmental costs. In part 3, I cover how measurement and valve dynamics impacts both types of errors and hence KPI. In part 4, I conclude with some rules of thumb on the priority of PCI solutions for various scenarios.




February 22, 2010

Exceptional Opportunities in Process Control - Flow and Level Measurements

By Greg McMillan

Knowledge of the flows and the accumulation of material in a unit operation are fundamental to the understanding and analysis of process and equipment performance. Flows are the primary way of affecting the process. Root cause analysis requires sensitive and repeatable flow measurements. I have seen costly expert systems fail to deliver benefits because of missing or inaccurate flows ("Drowning in Data, Starving for Information - 1").

The process gains of the more important process variables (e.g. composition, pH, and temperature) are best quantified and visualized in a plot versus a ratio of flows (e.g. coolant/feed, reactant A/reactant B, reagent/feed, reflux/feed, and steam/feed). If you are still into differential equations, you can checkout my Advanced Application Note 4 to see how process gains are dependent upon the ratios of flows.

The importance of flow ratios for affecting the process is seen in the prevalence of flow ratio control as detailed in my entries "What Have I Learned? - Flow Ratio Control" on this website.

The amount of time material spends in a unit operation is critical for crystallization and reaction. For continuous operation of well mixed volumes, the amount of time is the residence that is the fluid volume divided by the total throughput flow. Conversion is maximized by increasing volume or decreasing feed flows. For batch processes, the amount of time is the cycle time. Conversion is maximized by charging the feeds as fast as possible (increasing feed flows), to leave more of the batch cycle time for conversion.

In the direct material balance control scheme where the distillate flow is manipulated for overhead receiver level control, the sensitivity of the temperature and hence the composition control requires an exceptionally sensitive level measurement, low noise, and a high controller gain. Changes in distillate flow do not affect the column until there is a corresponding change in the reflux flow that maintains the material balance.

Then of course, there is the need to minimize the amount of storage of materials in the process. Ideally, storage tanks would be almost empty with just enough raw materials and intermediates to continually meet the flow demand of downstream operations and just enough products to continually meet the flow demand of customers.

For more information on how advances in flow and level measurements can improve material balance control, residence time control, inventory control, and process analysis and modeling, checkout "Advances in Flow and Level Measurements Enhance Process Knowledge, Control"




Subscribe

Subscribe to site RSS Feed


Or, subscribe by email:

Archives

The opinions expressed here are the personal opinions of Greg McMillan and Terry Blevins. Content published here is not read or approved by Emerson before it is posted and does not necessarily represent the views and opinions of Emerson. © 2006-2010 Greg McMillan and Terry Blevins. All rights reserved.