top of page
  • Writer's pictureDavid Peterson

The Basics of Programming HMIs

Ever since touch-screen applications first appeared, the devices (notably phones and tablets) using this technology have gotten faster and smarter with clearer images.

Inside an industrial facility, the technology certainly advances, but the emphasis is not on sleek elegance and HD displays. Rather the focus is on reliability, robust construction, and an immunity to the natural hazards of debris and humidity present around production machines.

Touch-screen technology gives a number of advantages over typical manual controls, and here are a few of them:

- Easy to change (add or remove buttons and text) without shutting down

- Lack of moving parts means fewer failure points

- Entering variable values and text is just as simple as digital controls

Obviously, adding a new networked device filled with circuit boards does add a bit of fragility into the scenario, but again, these devices are built to withstand a limited amount of abuse.

But What About Programming?

Does it take a college degree in computer science to program a touch-screen Human-machine Interface (HMI)?

If you were to explore the world of programming Android of iPhone apps using touch screen controls, it would be quite intimidating, and yes - that might require some advanced schooling.

But good news - HMIs are quite simple for anyone with a little bit of general computer savvy to program in just a few minutes.

There are three distinct parts of HMI programming, and they will be discussed in the order that they usually happen in the design process:

  1. Choosing the correct partner CPU (usually a PLC)

  2. Filling out a database of Tags to store all the values

  3. Creating the actual pictures and controls on the screen

Choosing a Network CPU

The HMI is simply a display to temporarily store information and share it with a logic controller. The HMI doesn't actually read sensors or control coils itself. Therefore, the first step is choosing - with whom do I wish to share this information?

Most modern HMIs will be connected to one or more PLCs using an Ethernet cable or something similar. This means that the IP address and subnet information of the PLC should be entered into the HMI program.

The IP address and subnet information of the HMI should be right in line with the PLC (different IP, but the same subnet - this can be a complicated subject for another time).

This is important - EVEN if the entire network is nothing more than just a single HMI networked to a single PLC.

A slightly older, yet still common connection method is a direct serial communication with a PLC. The cable is likely to be more like a 9- or 25-pin serial interface. The benefit is that you don't need to worry about an address, but the downside is because your network is just limited to that one PLC nearby.

The Tag Database

Tags store information in a couple of different ways. They can be a single discrete Boolean (BOOL) value with just 0 and 1 options. They can be larger integer or decimal numbers of various lengths, and finally they can be strings of text or numeric integers, perhaps for entering user names and passwords.

In order to know which tags are correct to use, the partner PLC must be examined. Usually, the tag names will match in both the PLC and HMI. Those tag names will be shared between both devices. They will not relate to actual real-world signals, only memory names and locations.

If you go into the PLC tag database and see a tag with the name "HMI_Input_1" and it's a BOOL data type, you can expect to see a similar "HMI_Input_1" BOOL inside the HMI itself.

It's really not the tag name that's being shared. It's actually the memory location of the HMI mapped to the corresponding memory location of the PLC. But the software designers usually match those with the tag names so it makes a lot more sense to the user. It's much easier to remember the name "Furnace_1_Temp" rather than a giant hexadecimal memory location 0x1A73F001D or something like that. You get the idea...

This process itself is really quite simple, it just requires attention to detail when typing the tag names.

Even better, in some cases, the HMI programming software allows you to import a spreadsheet of tag names - this is awesome if you need to make hundreds of tags!

The Graphical User Interface

The acronym GUI is used meaning the actual images and pictures on the screen. I've always wondered about the sense of this - I have never wanted any screen I'm touching to be 'gooey'... But I don't get to choose the terms.

Programming this user interface is surprisingly easy - if you have ever used a 'Shape' in Microsoft Word, you can probably program an HMI.

There are 3 main categories of objects used for control and display on a screen.

  1. Dynamic outputs, like indicator lights, graphs and charts, or moving images from bitmaps. If you just want a light to turn on when a limit switch is tripped, this is a perfect use for a dynamic object. You drag an element onto the screen of the programming computer, then you select the tag that indicates ON or OFF, and choose some colors to light up depending on the state.

  2. Static objects, such as text or a company logo. Select whether you want a text box or an image and drag it onto the workspace.

  3. Inputs like buttons and switches. These inputs are really versatile - they can also be number entry with 10-key pads or a text box with a full keyboard that pops onto the screen. You can't do that with a metal control cabinet! Just like with outputs, every input control must be linked with an appropriate tag - buttons need BOOLs, variable numbers need INTs or FLOATs, and text needs STRINGs.

Once you have the objects in place you can drag them to exactly where you want, change the sizes, colors, fonts, and everything else just like in a word processing program.

As long as the communication with the PLC is intact, you should be able to transfer the project into the HMI panel, and you can click away!

When you are done, save the program and give yourself a 'Certified HMI Programmer' badge!

175 views0 comments

Recent Posts

See All


bottom of page