Coding Bootcamp for Ignition / Automation?

Hi,

I’m looking at coding bootcamps to dive more into the computer science side of things (for a variety of reasons).

Currently looking at some standard software engineering / full stack developer programs but wanted to see if there are some that are more suited for the industrial automation side of things. What languages or programs would be good to support an automation career in 2021 and beyond?

I imagine a Data Science course would be helpful with machine learning / robotics, but maybe Java/Python would be helpful for more complex Ignition programming.

Thanks!

Industrial automation can cover a wide are of concepts and functionality, and as a result a wide variety of languages and systems can be used.

On Ignition HMI side Python (v2.7 not v3, and really Jython as well) would be the best place to start as that is the native scripting language of the HMI. I wouldn’t really bother with Java, as in the Ignition world that is used more for the construction of modules that will be loaded into Ignition, and building such modules is something only a small percentage of automation professionals will ever have a need to build their own custom modules. However if you have students who a very familiar with Java then building a module is more of a standard software development process than an industrial automation one.

Other HMIs that I have used have been scripted with C# and even their own crazy versions of visual basic (I’m looking at you CIMPLICITY!)

On the actual moving equipment side of things, if you are using PLCs (which form the backbone of the majority of industrial automation) then knowledge of the IEC-6113-3 languages and how the whole PLC system works is a necessity. In theory these are standard languages that all PLC manufactures adhere to, however each manufacturer implements these standard languages in their own way and initially you are learning one particular manufactures environment. However once you have mastered one brand, picking up another is fairly easy. In my case the predominant language I work with is Ladder Logic, with a scattering of Structured Text, and even a a bit of Instruction List every now and again.

You also mentioned robotics (which I take to mean Industrial Robotics). I have no real experience in this field but from what I have seen each robot manufacturer seems to implement their own language for programming their own systems. However the languages are fairly simplistic, very similar and and in general have a history related to CNC programing (which is whole other area of industrial programming). However a lot of programming is done by teaching the robot what to do with pendants directly attached to the robot.

And over my career I have also built or interfaced to automation products using C, C++, C#, VB (not VB.net), VBScript, JScript (not JavaScript), Fortran, SQL and HTML/CSS. And made use of multiple brands of database and webservers.

Right now I am slowly building up experience programming in C++11 on an Arduino with the aim of implementing the MQTT protocol on it in order to communicate with Ignition. It’s been a while since I actually used C++ so it’s been interesting!

So there are multiple areas of expertise and languages that you can use. In fact I’d say that every language/system has been used for industrial automation. In my opinion the key thing is keeping an open mind and being flexible in how you approach your solution, as what works for one project won’t work for another.

1 Like

Strongly disagree. The java runtime environment and a bunch of extra libraries are exposed in jython in Ignition. These classes and methods are an order of magnitude more efficient in jython than jython’s standard library. Also, all of the data that moves around in Ignition are java objects, like java.util.Date. Using these types directly avoids numerous sources of error and is often really important when feeding data to JDBC drivers.

1 Like

That’s a fair point about the RTE and objects. I hadn’t considered that.

1 Like

So full dislcosure I’m the HMI/Server tech side of Ignition in my company more than PLC. What I would say you should try to get proficient at:

  1. Writing GOOD python code. By good I mean readable and self-documenting (though don’t take this to mean you don’t have to document functions or modules which you should still be doing). As a rule, code will be read much more than it is written, so learning to write code that you can just look at and get the general idea of what its doing with variable names, function names, is majorly helpful with maintenance and upgrading.

  2. Learn some of the basic doing principles, the biggest ones I try to force on my coworkers are DRY, YANGNI, and avoiding the Magic Push Button Anti-Pattern. DRY - Don’t repeat yourself. If you find you have written the same 2-3 lines of code more than a few times, it should be in a function. YANGNI- You are not going to need it - code for the specs you have smartly, you don’t have to make every function cover every generalized case from jump. And avoiding the Magic Push Button Anti-Pattern - this one kills me as I see it almost every day. Put business logic in functions and call those functions from your GUI Buttons, do not put business logic into components themselves. Say you need the business logic in another part of the application, or that you need to read a .csv file and run the business logic on each line - if that was all in a button you’d have a big headache on your hands.

  3. Learn your database and about schemas. Honestly this is pretty invaluable no matter what sort of programming you end up doing as databases are everywhere, and for many companies data is now one of their major assets. Good database design can save you from coding/help you write more pythonic code. Learn about good schema design, how to use foreign keys, what the types of relationships between tables are, what normalization is when it comes to a database, how to enforce data integrity using UNIQUE indexes, learn how to interpret the EXPLAIN of a query and how to optimize from there, how to create indexes that help with slow queries, and using appropriate datatypes for table columns. Learn about the intricacies of your specific database of choice whether it’s MySQL, SQL Server or what have you.

  4. Get good at planning out your code and features before coding, I cannot stress this enough. 15 minutes of psuedocode/flow charting is worth an hour of coding. Personally for a new feature that requires interaction with the PLC, I have template with 5 rows - Real World, PLC, Client, Gateway, and Database. And then I would semantically write what happens - in the real world, some action X happens, this triggers routine Y in the PLC which sends data Z to the Gateway, which is displayed on the Vision client where a user can press a button that saves the current value the database as a trivial example.

This is partially just about good coding practices in general but trust me that good coding practices will serve you well no matter what language you choose or what platform you use.

Also, check out to the https://www.inductiveuniversity.com/ which will show you how to use Ignition very well.

4 Likes

Meh. Maybe for mortals. :innocent:

3 Likes

I agree Phil, it’s worth 2 hours to the rest of us, 4 if Carl is in front of the whiteboard. :laughing:

5 Likes

Thanks for the replies everyone. This gives me somethings to think about!

At the avoidance of a full CS/EE degree, and to learn some web development too, I think I’ll look for some programs which work with Python on the backend. Seems very relevant for both Ignition development, API communication, and web development.