Of late I’ve been reflecting on the fact that I’m about to celebrate my 25th year as a machine-logic programmer and systems integrator, twenty of those years spent as a weights and measures geek. Needless to say, it’s been quite a journey. The things I’ve discovered and the valuable lessons that I learned along the way stay glued to my DNA to this very day. Those lessons, in fact, strongly influence the approach I take to every project in which I become involved.
Pursue in-depth application knowledge
This is perhaps the single most important—and the most frequently overlooked—factor that will determine one’s success as a programmer and systems integration specialist.
There are few things that you’ll find more frustrating (and costly) than writing code for an application that you later find doesn’t mesh particularly well with the customer’s needs or operational style. That’s why it’s extremely important that two things are accomplished before you even begin to contemplate an implementation strategy or write a single line of code to support that strategy:
• Gain as thorough an understanding as you possibly can of precisely what your customer wants to accomplish and in the process gain a solid understanding of what operational procedures may currently be favored (or in place, if you’re working on a system retrofit) to accomplish those objectives. Ask questions. Make notes. If you can, strive to gain plant-level exposure. Seek plant-level, operational input. Communicate with the likely users of your application.
• Once you believe that you have gained as much understanding about the nature of the application and your customer’s operational style, create a detailed written specifications document that can be reviewed by everyone directly involved in your project. Ask for feedback. Insist that the system design specification be read and approved before proceeding with your programming/integration efforts.
The need to be humble in the face of one’s mission is quite often an extremely difficult task. Our egos typically want to play a dominant role during these periods. Recognition of the fact that the development of efficient machine control logic is a lot more complicated than it may sometimes appear will help one take a quantum leap in their career as a systems designer, programmer and systems integration professional.
Mastering the art and science of machine control logic and keeping current with the constantly changing implementation techniques that manufacturers continually offer presents one with a life-long learning experience. Opportunities for learning new ways to accomplish a specific machine control objective never cease. Just when you think that you may have developed the most ingenious method of accomplishing something programmatically, another candidate for even greater efficiency presents itself for further investigation.
In the end, however, you’ll find that machine control mastery is only part of the overall success equation; a considerable amount rests with understanding the nuances and peculiarities of the actual components that you will attempt to control. They sometimes find ingenious ways to baffle even your most well-thought-out and ingeniously devised plans.
I’ll never forget an experience I had with a NTEP certified draft weighing system that I personally designed, coded, helped install, tested, debugged and certified as 100 percent effective and efficient only to receive a call from the client a few weeks later to report that the controller would unexpectedly terminate the draft weighing routine and return to an idle state. I was never able to determine why or how (from a code writing perspective) the system would possibly fail as it did. My only solution was to design a “work-around patch” that would automatically re-start the draft weighing algorithm if the controller found itself in that condition. Then one day, by pure coincidence, I happened to be standing near the controller when I observed an unexpected termination (and system restart). It was at that moment that I also simultaneously heard a high-pitched “wind-up” sound behind me. That helped me to immediately identify the source of the problem: a variable frequency motor started its ramp-up sequence and generated a radio frequency that, for just a nanosecond, wreaked havoc on the controller’s main processor.
A career as a systems designer/machine control specialist presents abundant opportunities to challenge yourself to find new and more effective methods of accomplishing a machine control task. If you love a continual learning experience—one that frequently challenges you to carefully examine even your own conceptual and logical framework—you’ve chosen an excellent field of study and work.
Gain at least a nominal understanding of your users
A considerable amount of my work as a systems designer, programmer and integration specialist has been focused in designing systems for use in the California agricultural industry. I was very fortunate to have had the opportunity to install and then actually train system operators in the use of the software systems that I designed for their specific application(s). I say fortunate because this level of face-to-face interaction with the customer and the operators taught me several extremely important lessons that would otherwise have taken me many more years to learn. The most important of those lessons? It’s this: create HMIs and cyclical algorithms that:
• require minimal operator input or intervention
• anticipate operator error (and “error trap” them)
• to the maximum extent possible, are self-correcting.
Perhaps the fastest growing trend in the processing industry today is towards the creation of intelligent, self-running and self-correcting systems, systems that require the barest amount of operator training, attention or intervention.
The more you learn about your customer’s operational procedures and the operators who will use your systems the brighter your code will shine and the more successfully your applications will perform.
Always be mindful of your responsibility to adhere to industry “best practices”
• Triple check your work. You’ll be astounded at how many small errors you’ve made or discover how you may have been more logical or parsimonious in your code writing and general programming approach.
• Error trap until the cows come home. Try your best to fully anticipate the bad choices (or simple mistakes) an operator is likely to make when using your application. Get and stay in the habit of walking in the operator’s shoes.
• Annotate all of your code. Few things are more wasteful of your time and frustrating than spending an exorbitant amount of time and effort examining your code for a clear understanding of what you did at an earlier time.
• Create a master programmer’s guide that outlines your work in as much detail as possible. Invariably you’ll be asked to add some feature or enhance your application in some manner weeks, months or even years after it was placed in use. Having the ability to quickly review your work will save enormous time and personal frustration trying to determine how and where you need to inject the code for your enhancements without disturbing what you have already done.
• Create an operator’s system “Handy Guide” that explains, in a clear and concise manner, how to use the system. Handy Guides make operator training easier and much more effective. Handy Guides provide a convenient means of keeping system operators up-to-date about your system’s capabilities, the changes or enhancements you may have made and how to access the system’s most important features.
Keeping these tips in mind will go a long in the development of one’s career as a machine programmer and systems integration specialist.
About the Author
Al Blazo is an independent consultant with more twenty years of experience in the weighing, measurement and process control industry. Al specializes in applications development for the GSE® line of process control instrumentation. He can be reached at firstname.lastname@example.org and welcomes readers’ comments.