Contents
Strategic Partner Links
Sepasoft - MES Modules
Cirrus Link - MQTT Modules
Resources
Knowledge Base Articles
Inductive University
Forum
IA Support
SDK Documentation
SDK Examples
If you're unsure of when to put scripts in a script module vs. writing the script directly in an event handler, follow this simple rule: If you ever find yourself copying a script from one event handler to another, stop and refactor the script into a global script module! Then simply call your new module from the event handler. This rule will help prevent code duplication across your project, a major maintenance liability.
To add a script module, simply right click the Script Library [project] package and click the New Script option. Each module is a python script that may define many functions. You may also organize modules in subpackages if you'd like. Lets suppose you added a script module named myfuncs
, whose body was:
Code Block | ||
---|---|---|
| ||
def callMe(message): system.gui.messageBox(message) |
Now, anywhere in your project you can call this function:
Code Block | ||
---|---|---|
| ||
project.myfuncsmyFuncs.callMe('Hello World') |
Because each module can hold many functions, I can add any functions I may need to this Script Module:
Just like before, this function would be called using:
Code Block |
---|
project.myFuncs.addNumbers(14, 87) |
Note that the addNumbers function also has a return value. This will be returned to the script that called the function, allowing you to use it within that script.
Frequently in Ignition, your scripts get system
library (the built-in library package in Ignition) and shared and project libraries imported for you automatically. However,
Subsequent versions of Ignition beyond version 7 no longer need import system every time you create a new scope. However versions prior to version 7 still require an import system every time a system associated function is called inside a function. Ignition versions prior to version 7 still need the import system when system functions are called inside functions. Regardless, typing import system
in any version of Ignition will result in the system library being available for use inside the function.
******************Maria, I don't like the way this sounds. Hopefully you get what I am trying to convey, and can organize it much better.**********************
There are only a few differences between Project and Shared Script Modules. The first is in the way they are each called, with shared scripts being called with "shared.*" while project scripts are called with "project.*" The other difference is where each can be used. The Project
Iulink | ||||
---|---|---|---|---|
| ||||
|
Iulink | ||||
---|---|---|---|---|
| ||||
|
Consider the following function that would calculate OEEScript Modules are limited to the Project Scope and only within the project that they are located in. This is useful when you are using a script many times within a project, but do not want it to be used elsewhere in your Gateway. The Shared Script Modules are not limited by scope and can be used anywhere within any project or the Gateway. However, this means the scripts can be used by projects that possibly shouldn't have access to them. They are also stored within the Gateway, and are not a part of a normal project export, so moving a project to a new Gateway will require that the shared script also be transferred.
In our projects, we are using a fairly simple script that calculates OEE, and writes it to a tag:
Code Block | ||
---|---|---|
| ||
def caclulateOEE(lineNum): #Build the Tagpaths with the dynamic line numbers. paths = ["[default]Metrics/Line_%f/Quality" % lineNum, "[default]Metrics/Line_%f/Availability" % lineNum, "[default]Metrics/Line_%f/Performance" % lineNum] #Read the values from the Tags. values = system.tag.readAll(paths) #Get your QQuality, AAvailability, and PPerformance. quality = values[0].valuegetValue() availability = values[1].valuegetValue() performance = values[2].valuegetValue() #calculate OEE oee = quality * availability * performance #Write back to our OEE tag. system.tag.write("[default]Metrics/Line_%f/OEE" % lineNum, oee) |
This could be defined as a Shared ScriptInstead of copying this script between projects and throughout all of the windows that need it, we can instead create a Shared Script Module and put our script within. Here we have created a shared script and named it "metrics", and then copied our script into the script area:
This could then be called from a script in any project by calling shared.LibraryNamemetrics.FuncitonNamecalculateOEE():
Next_link |
---|