Nick Mudge Ignition Software Consulting & Development

I don't use client tags in Ignition much. Not because they are bad or something like that, but because there is something better: module level Python variables.

Python module level variables and client tags are both ways to store and use global data in an Ignition client.

Python module level variables don't have the following limitation: Client tags can only use a few Java data types.

Client tags have one data type for holding aggregate values, the dataset. Datasets are terrible for accessing, setting and manipulating data compared to Python dictionaries and lists. In addition datasets enforce a structure -- rows of the same kind of data. Python dictionaries allow you to structure and organize data in a way that is best suited to the data and how you use it. That makes short, easy to read and write maintainable code.

Python module level variables can hold data of any data type. In my experience Python dictionaries and lists are the most useful data types for storing and using global data in Ignition clients.

It is also nice that Python module variables can be defined in the same place as the functions and code that manipulate them.

Client tags have useful scalar data types like Integer, Float, String and so is most useful for holding single value data.

What About Tag Change Scripts and Other Client Tag Features?

Some client tag features are easily implemented in simple Python code. Here is a simple example that implements value change script functionality:

#project.machines Python module
#create module level variable
_machineConfig = {}
#create functions for setting and getting machines that can be used anywhere in the project
def addMachineConfig(machineID, config):
    _machineConfig[machineID] = config
    print "new machine config added:", config

def setMachineConfig(machineID,config):
    if machineID in _machineConfig:
        oldConfig = _machineConfig[machineID]
        _machineConfig[machineID] = config
        #value change script
        print "oldValue:",oldConfig, "newValue:",config
    else:
        addMachineConfig(machineID,config)

def getMachine(machineID)
    return _machineConfig[machineID]

Noticed that "value change script" code is executed any time a machine's configuration is changed by using the setMachineConfig function.

Here's a great comment from Alasdair Barclay (AlThePal) about this blog post:

As we got to know Ignition better we moved from the pointy-clicky interface to doing more things in code. It is more flexible but it's harder to get started - most beginners will need the pointy-clicky interface until they understand the concepts, then they can move to coding directly and enjoying more power.

Comments

Name: (required)
Email: (required)
Website:
What has four legs, rhymes with bat and says, "Meow?" (One word answer.)
Spam Filter: