Help with Button Control on HMI Using FactoryTalk


Thread Starter

Michael O.

I am working on designing a user interface for an HMI and need help with programming. I am stronger on the design and layout side than the programming side. Most of the tags for the HMI are created by our Electrical Engineer, who is not an interface designer.

FactoryTalk VS uses buttons with presets (i.e. Interlocked Push Buttons, Goto Display Buttons, Multistate Push Buttons, etc). There is not a selection for a Interlocked-Multistate-Goto Display button.

I need to add behavior to a custom graphic button (jpeg) group that creates ALL of the following display conditions:

-When a button is pressed, the button changes states from depressed to pressed. (multi-state)

-Selecting a button 'deselects' all others (interlocking)

-Selecting a button takes the user to the corresponding screen (navigation - Goto Menu command).

I don't know how to tell a multi-state, interlocking button to go to a specific screen. I have no problem making a group of multi-state buttons that are's just the navigation part I can't get around.

Does anybody know how I can use tags, xml or some other kind of programming to make this work? Feel free to ask clarifying questions or ask for a screen shot of the display.
Can you run some script that takes the value emerging from the multi-state group and use that number in a case-type structure to switch to the corresponding screen?

Also don't forget that sometimes code has to be written in the PLC to support doing something you want to do in the MMI, so you may have to throw it back to him (in conjunction with giving him a tag to select screens).

James Ingraham

The big question: Are the displays that you need to call Replace type or Overlay type?

If the screens are Replace type this is fairly easy. First, make sure that each screen has a unique Display Number. Then there are two ways to do it:

(1) Set up a tag for the "Replace Display Number" in the Global Connections. (Note that this is NOT the "Remote Display Number." We'll cover that in option 2.) Your buttons are then regular Goto Display type that have animation that looks at the Remote Display Number tag. This is usually done with a Visibility attribute. This is exactly the method I normally use.

(2) Rather than simply examining which screen you are on, go the other way and have the buttons be regular Interlocked buttons. They are set to a tag that is mapped in Global Connections to Remote Display Number. When you change the value of the tag, FTView automatically calls the screen with that Display Number. This tag can even be in the PLC, so that the PLC can cause the system to jump to various screens. I personally HATE this method, but others swear by it.

If the displays are Replace type things are a little different. There is no automatic way to track that a given Replace display is open, since several Replace types can be open at once. So for each screen you create a Startup and Shutdown macro that sets a tag, probably an integer. Yes, this annoyingly means a macro file for each screen, but such is life. Again, once the tag is set you can make your buttons visible / invisible based on the tag value. This can get tricky if somehow multiple screens are open at once. You can deal with this either by making sure that doesn't happen, or by using a bit for each screen rather than one tag. (Or a bit-field in one integer tag, though I don't see much point in that.)

Hope that helps. Feel free to contact me off list if you need more help. My company's contact info can be found at

-James Ingraham
Sage Automation, Inc.