How to use Script Modules
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 can define many functions. You can also keep your scripting modules organized in Packages (i.e., folders) by creating additional nested subpackages. To create a Package, click on the Script Library [project] and click the New Package option.
For example, let's suppose you added the following script module named
myFuncs, whose body is shown below.
def callMe(message): system.gui.messageBox(message)
Now, anywhere in your project you can call this function.
Because each module can hold many functions, you can add any functions you need to this Script Module.
Just like before, you can call this function using:
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.To import System or not to import System
When to Import the System Library
In current versions of Ignition (version 7 and later), the System Library, Shared and Project Script Libaries are imported for you automatically when creating a new project. Subsequent versions of Ignition beyond version 7 no longer require you to import system every time you create a new scope.
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.
May want to inlcude a line to Gateway vs. Project Backups or page that contains content on the System Libary. Importing..... when to import shared or project script.
Scripts vs. Shared Scripts******************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 a few differences between Project and Shared Script Modules. The first difference is in the way they are eached each script type is called. Shared Scripts are called with "shared.*" preceeding the event handler function, while Project Scripts are called with "project.*." The " preceeding the scripting function. The other difference is where each can be used. The Project Script Modules are limited to the Project Scope and only be accessed within the project that they are located in. Shared Script Modules are not limited by scope and can be used anywhere within any project or the Gateway.
create a link to scoping (scripting in Ignition)
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 Script Modules are limited to the Project Scope, and can only be used within the project that they are located in. This 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, on the other hand, are not limited by scope and can be used anywhere within any project or the Gateway. However However, this means the Shared scripts can be used by projects that possibly shouldn't have access to them. They Since Shared Script Modules are also stored within on the Gateway, and they are not a part of a normal project export, so . So moving a project to a new Gateway will require that the shared script Shared scripts also be transferredincluded in the transfer.
A Simple Example
In our projects, we are using use a fairly simple script that calculates OEE, and writes it to a tag:Tag as shown below.
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 Quality, Availability, and Performance. quality = values.getValue() availability = values.getValue() performance = values.getValue() #calculate OEE oee = quality * availability * performance #Write back to our OEE tag. system.tag.write("[default]Metrics/Line_%f/OEE" % lineNum, oee)
Instead 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:was created in the Shared Script Library and called "Metrics." The code was copied and pasted into the scripting area in the Shared Script Library.
This could then be called from a script in any project by calling shared.metrics.calculateOEE():