Projects¶
- class mhi.pscad.Project¶
PSCAD Project
In PSCAD, a Project may refer to a Library (.pslx) or a Case (.pscx). A Library will contain component definitions and/or code which may be used in other libraries and cases. A Case is a runnable simulation that may reference other libraries.
The Master Library is a library which is automatically loaded into every workspace.
Properties¶
- Project.name¶
The name of the project (read-only)
New in version 2.0.
- Project.filename¶
The project’s file name (read-only)
New in version 2.0.
- Project.temp_folder¶
The project’s compiler-dependent temporary folder (read-only).
New in version 2.1.
- Project.parameters(parameters: Dict[str, Any] = None, **kwargs) Optional[Dict[str, Any]] ¶
Get or set project parameters
- Parameters:
parameters (dict) – A dictionary of name=value parameters
**kwargs – Zero or more name=value keyword parameters
- Returns:
A dictionary of current parameters, if no parameters were given.
Project Parameters¶ Param Name
Type
Description
description
str
Description
time_step
float
Solution time step
time_duration
float
Duration of run
sample_step
float
Channel plot step
PlotType
choice
Save to: “NONE”, “OUT”, “PSOUT”
output_filename
str
Name of data file, with .out extension
StartType
int
Start simulation: 0=Standard, 1=From Snapshot File
startup_filename
str
Start up snapshot file name
SnapType
int
Timed Snapshot: 0=None, 1=Single, 2=Incremental (same file), 3=Incremental (multiple file)
SnapTime
float
Snapshot time as a real number
snapshot_filename
str
Save snapshot as text
MrunType
int
Run config 0=Standalone, 1=Master, 2=Slave
Mruns
int
Number of multiple runs
- Project.parameter_range(parameter: str)¶
Get legal values for a parameter
Example:
>>> vdiv.parameter_range('SnapType') frozenset({'ONLY_ONCE', 'NONE', 'INCREMENTAL_SAME_FILE', 'INCREMENTAL_MANY_FILES'})
New in version 2.0.
Management¶
Load & Save¶
- Project.save() None ¶
Save changes made to this project
- Project.save_as(filename: str, ver46: bool = False, folder: str = None) Project ¶
Save this project under a new name.
The project will be saved using the appropriate extension depending on whether the project is a case (
.pscx
) or library (.pslx
).The filename must conform to PSCAD naming convensions:
it must start with a letter,
remaining characters must be alphanumeric or the underscore
_
,cannot exceed 30 characters.
- Parameters:
filename (str) – The name or filename to store project to.
ver46 (bool) – Set to true to store as a version 4.6 file. (optional)
folder (str) – If provided, the path to the filename is resolved relative to this folder. (optional)
Notes
When the project name is changed, all existing Python handles to the project and anything within it become invalid and must not be used.
Changed in version 2.0: Added
ver46
parameter.Changed in version 2.7.2: Added
folder
parameter; returns the new project object.
- Project.is_dirty() bool ¶
Check if the project contains unsaved changes
- Returns:
True, if unsaved changes exist, False otherwise.
- Project.reload() None ¶
Reload this project.
The project is unloaded, without saving any unsaved modifications, and then immediately reloaded. This returns the project to the state it was in when it was last saved.
New in version 2.0.
- Project.unload() None ¶
Unload this project.
The project is unloaded. All unsaved changes are lost.
New in version 2.0.
Scenarios¶
- Project.scenarios() List[str] ¶
List the scenarios which exist in the project.
- Returns:
List of scenario names.
- Return type:
List[str]
Changed in version 2.0: Was
ProjectCommands.list_scenarios()
- Project.scenario(name: str = None) str ¶
Get or set the current scenario.
- Parameters:
name (str) – Name of scenario to switch to (optional).
- Returns:
The name of the (now) current scenario.
- Return type:
str
- Project.save_scenario() None ¶
Save the current scenario.
New in version 2.0.
- Project.save_as_scenario(name: str) None ¶
Save the current configuration under the given scenario name.
- Parameters:
name (str) – Name of scenario to create or overwrite.
- Project.delete_scenario(name: str) None ¶
Delete the named scenario.
- Parameters:
name (str) – Name of scenario to delete.
Build & Run¶
- Project.build() None ¶
Clean & Build this project, and any dependencies
- Project.run(consumer=None) None ¶
Build and run this project.
- Parameters:
consumer – handler for events generated by the build/run (optional).
Note
A library cannot be run; only a case can be run.
- Project.run_status() Tuple[Optional[str], Optional[int]] ¶
Get the run status of the project
- Returns:
Returns (“Build”, None) if building, (“Run”, percent) if running, or (None, None) otherwise.
Changed in version 2.0: Was
ProjectCommands.get_run_status()
- Project.pause() None ¶
Pause the currently running projects.
Note
All projects being run will be paused, not just this project.
- Project.stop() None ¶
Terminate a running execution of this project.
- Project.messages() List[Message] ¶
Retrieve the load/build messages
- Returns:
A list of messages associated with the project.
- Return type:
List[Message]
Each message is a named tuple composed of:
text
The message text
label
Kind of message, such as build or load
status
Type of messages, such as normal, warning, or error.
scope
Project to which the message applies
name
Component which caused the message
link
Id of the component which caused the message
group
Group id of the message
Example:
pscad.load('tutorial/vdiv.pscx', folder=pscad.examples_folder) vdiv = pscad.project('vdiv') vdiv.build() for msg in vdiv.messages(): print(msg.text)
- Project.output() str ¶
Retrieve the output (run messages) for the project
- Returns:
The output messages
- Return type:
str
Example:
pscad.load('tutorial/vdiv.pscx', folder=pscad.examples_folder) vdiv = pscad.project('vdiv') vdiv.run() print(vdiv.output())
Changed in version 2.0: Was
ProjectCommands.get_output_text()
- Project.clean() None ¶
Clean the project
- Project.compile_library()¶
Compile all resources linked in this library into a single compiled
*.lib
file.New in version 2.8.
Definitions¶
- Project.definitions() List[str] ¶
Retrieve a list of all definitions contained in the project.
- Returns:
A list of all of the
Definition
names.- Return type:
List[str]
Changed in version 2.0: Was
ProjectCommands.list_definitions()
- Project.definition(name: str) Definition ¶
Retrieve the given named definition from the project.
- Parameters:
name (str) – The name of the definition.
- Returns:
The named
Definition
.
Changed in version 2.0: Was
ProjectCommands.get_definition()
- Project.create_definition(xml: Union[str, Element]) Definition ¶
Add a new definition to the project
- Parameters:
xml (Union[str, ET.Element]) – The definition XML
- Returns:
The newly created
Definition
- Project.delete_definition(name: str) None ¶
Delete the given named
Definition
.- Parameters:
name (str) – The name of the definition to delete.
- Project.delete_definition_instances(name: str) None ¶
Delete the given named
Definition
, along with all instances of the that definition.- Parameters:
name (str) – The name of the
Definition
whose definition and instances are to be deleted.
Components¶
Finding¶
- Project.find([[definition,] name,] [layer=name,] [key=value, ...])¶
Find the (singular) component that matches the given criteria, or
None
if no matching component can be found. Raises an exception if more than one component matches the given criteria.New in version 2.0.
- Project.find_first([[definition,] name,] [layer=name,] [key=value, ...])¶
Find the first component that matches the given criteria, or
None
if no matching component can be found.New in version 2.0.
- Project.find_all([[definition,] name,] [layer=name,] [key=value, ...])¶
Find all components that match the given criteria.
- Parameters:
definition (str) – One of “Bus”, “TLine”, “Cable”, “GraphFrame”, “Sticky”, or a colon-seperated definition name, such as “master:source3” (optional)
name (str) – the component’s name, as given by a parameter called “name”, “Name”, or “NAME”. If no definition was given, and if the provided name is “Bus”, “TLine”, “Cable”, “GraphFrame”, “Sticky”, or contains a colon, it is treated as the definition name. (optional)
layer (str) – only return components on the given layer (optional)
key=value – A keyword list specifying additional parameters which must be matched. Parameter names and values must match exactly. For example, Voltage=”230 [kV]” will not match components with a Voltage parameter value of “230.0 [kV]”. (optional)
- Returns:
The list of matching components, or an empty list if no matching components are found.
- Return type:
List[ZComponent]
Examples:
c = find_all('Bus' # all Bus components c = find_all('Bus10') # all components named "Bus10" c = find_all('Bus', 'Bus10') # all Bus component named "Bus10" c = find_all('Bus', BaseKV='138') # all Buses with BaseKV="138" c = find_all(BaseKV='138') # all components with BaseKV="138"
New in version 2.0.
Finding By Id¶
- Project.component(iid: int) Component ¶
Retrieve a component by ID.
- Parameters:
iid (int) – The ID attribute of the component.
New in version 2.0: This command replaces all of the type specific versions.
Note
It is often easier to use Project.find()
, Project.find_first()
or Project.find_all()
methods (or the Canvas variants Canvas.find()
,
Canvas.find_first()
or Canvas.find_all()
) to find a component of
interest, rather than using a component Id for locating the component.
For example, in pm_machine.pscx
case:
# Compare finding a component by name ...
pm = prj.canvas('main').find('PMMachine')
# with finding a component by ID.
pm = prj.component(1551087554)
Parameter Grid¶
- Project.export_parameter_grid(filename: str, folder: str = None) None ¶
Export parameters to a CSV file.
- Parameters:
filename (str) – Filename of the CSV file to write.
folder (str) – Directory where the CSV file will be stored (optional)
- Project.import_parameter_grid(filename: str, folder: str = None) None ¶
Import parameters from a CSV file.
- Parameters:
filename (str) – Filename of the CSV file to read.
folder (str) – Directory to read the CSV file from (optional)
Global Substitutions¶
New in version 2.0.
- Project.global_substitution¶
The global substitution container for the project. Can be referenced as a dictionary of dictionaries.
Dict[SetName, Dict[VariableName, Value]]
Examples:
prj.global_substitution.create_sets('Set1', 'Set2') prj.global_substitution.create('freq', 'VBase') prj.global_substitution['']['freq'] = "60.0 [Hz]" # Default set prj.global_substitution['Set1']['freq'] = "50.0 [Hz]" prj.global_substitution['Set2'] = { 'freq': "60.0 [Hz]", 'VBase': '13.8 [kV]' } prj.global_substitution.active_set = "Set1" # List all global substitution sets >>> list(prj.global_substitution)) ['', 'S1', 'S2'] # Print active global substitutions: >>> gs = prj.global_substitution >>> for name, value in gs[gs.active_set].items(): print(name, "=", value) freq = 50.0 [Hz] VBase =
Sets¶
- GlobalSubstitution.active_set¶
The currently active global substitution set.
Returns the name of the currently active substitution set, or None for the default set
Set to the desired global substitution set name to change the active global substitution set. Setting this to
""
orNone
reverts to the default set.
- GlobalSubstitution.create_sets(*set_names: str) None ¶
Creates 1 or more named global substitution sets
- Parameters:
*set_names (str) – One or more names for the new sets
- GlobalSubstitution.remove_sets(*set_names: str) None ¶
Removes 1 or more named global substitution sets
- Parameters:
*set_names (str) – One or more names of sets to be deleted
- GlobalSubstitution.rename_set(old_name: str, new_name: str) bool ¶
Rename a global substitution set
- Parameters:
old_name (str) – Current name of the substitution set
new_name (str) – Desired name of the substitution set
Variables¶
- GlobalSubstitution.create(*val_names: str) None ¶
Creates 1 or more named global substitution variables.
- Parameters:
*val_names (str) – One or more new variable names
- GlobalSubstitution.remove(*val_names: str) None ¶
Removes 1 or more named global substitution variables
- Parameters:
*val_names (str) – One or more names of variables to be deleted
- GlobalSubstitution.rename(old_name: str, new_name: str) bool ¶
Rename a global substitution variable
- Parameters:
old_name (str) – Current name of the substitution variable
new_name (str) – Desired name of the substitution variable
Load / Save¶
- GlobalSubstitution.save_set(filename: str, set_name: str = None) None ¶
Save global substitution set to a CSV file.
- Parameters:
filename (str) – Filename for the CSV file
set_name (str) – Set name to save (default is currently active set)
New in version 2.8.1.
- GlobalSubstitution.load_set(filename: str, set_name: str = None) None ¶
Load global substitution set from a CSV file, replacing current values
- Parameters:
filename (str) – Filename of the CSV file
set_name (str) – Set name to load (default is currently active set)
New in version 2.8.1.
- GlobalSubstitution.append_set(filename: str, set_name: str = None) None ¶
Load global substitution set from a CSV file, without clear old values
- Parameters:
filename (str) – Filename of the CSV file
set_name (str) – Set name to load (default is currently active set)
New in version 2.8.1.
- GlobalSubstitution.save_all_sets(filename: str) None ¶
Save all global substitution sets to a CSV file.
- Parameters:
filename (str) – Filename for the CSV file
New in version 2.8.1.
- GlobalSubstitution.load_all_sets(filename: str) None ¶
Load all global substitution sets from a CSV file, replacing all current values.
- Parameters:
filename (str) – Filename of the CSV file
New in version 2.8.1.
- GlobalSubstitution.append_all_sets(filename: str) None ¶
Load global substitution sets from a CSV file, creating new sets when a set name already exists.
- Parameters:
filename (str) – Filename of the CSV file
New in version 2.8.1.
Layers¶
- Project.layers() Dict[str, str] ¶
Fetch the state of all of the layers
New in version 2.0.
- Project.create_layer(name: str, state: str = 'Enabled') Layer ¶
Create a new layer
- Parameters:
name (str) – Name of the layer to create.
state (str) – Initial state of layer (optional, default=’Enabled’)
- Project.set_layer_state(name: str, state: str) None ¶
Set the state of a layer
- Parameters:
name (str) – Name of the layer to alter.
state (str) – “Enabled”, “Disabled”, “Invisible” or a custom state.
Changed in version 2.0: Renamed from
.set_layer(state)
- Project.delete_layer(name: str) None ¶
Delete an existing layer
- Parameters:
name (str) – Name of the layer to delete.
- Project.layer(name: str) Layer ¶
Fetch the given layer
New in version 2.0.
- Project.layer_states(name: str) List[str] ¶
Fetch all valid states for the given layer
New in version 2.0.
Properties¶
New in version 2.0.
After a layer has been retrieved with Project.layer()
,
the following attributes and methods may be accessed:
- Layer.project¶
The project this layer belongs to (read-only)
- Layer.id¶
The ID of this layer (read-only)
- Layer.name¶
The name of this layer
- Layer.state¶
The current state of this layer
- Layer.parameters(parameters: Dict[str, Any] = None, **kwargs) Optional[Dict[str, Any]] ¶
Get or set layer parameters
- Parameters:
parameters (dict) – A dictionary of name=value parameters
**kwargs – Zero or more name=value keyword parameters
- Returns:
A dictionary of current parameters, if no parameters were given.
Layer Properties¶ Param Name
Type
Description
disabled_color
Color
Disabled Colour
disabled_opacity
int
Diabled Opacity
highlight_color
Color
Highlight Colour
highlight_opacity
int
Highlight Opacity
- Layer.add_state(new_name: str) None ¶
Create a new custom configuration name for list layer
- Parameters:
new_name (str) – Name of the new configuration to create.
- Layer.remove_state(state_name: str) None ¶
Remove an existing custom state from this layer
- Parameters:
state_name (str) – The name of the custom configuration state to remove.
- Layer.rename_state(old_name: str, new_name: str) None ¶
Rename an existing custom state in this layer
- Parameters:
old_name (str) – The name of the custom configuration state to rename.
new_name (str) – The new name to rename the custom configuration state to.
- Layer.set_custom_state(state_name: str, component: Component, component_state: str) None ¶
Set the state of a component when the layer is set to the state name provided.
- Parameters:
state_name (str) – The name of the custom configuration state to configure.
component (Component) – The component to set the state to
component_state (str) – One of the strings (‘Enabled’, ‘Disabled’, ‘Invisible’) for the state of the provided component when the provided state is set.
- Layer.move_up(delta: int = 1) None ¶
Move the layer up the list by 1
- Layer.move_down(delta: int = 1) None ¶
Move the layer down the list by 1
- Layer.to_top() None ¶
Move the layer to top of list
- Layer.to_bottom() None ¶
Move the layer to bottom of list
Resources¶
New in version 2.0.
Resources are additional files
- Project.resources() List[Resource] ¶
Fetch list of all resources in project
- Project.create_resource(name: str) Resource ¶
Add a new resource to the Project’s resource folder
- Parameter:
name (str): Filename of the resource
- Project.remove_resource(resource: Resource)¶
Remove a resource
- Project.resource(name: str) Resource ¶
Find a resource by name
Properties¶
After a resource has been retrieved with Project.resource()
,
the following attributes and methods may be accessed:
- Resource.project¶
The project this resource belongs to (read-only)
- Resource.id¶
The ID of this resource (read-only)
- Resource.name¶
The name of the this resource
- Resource.path¶
The name of the this resource
- Resource.abspath¶
The name of the this resource
- Resource.parameters(parameters: Dict[str, Any] = None, **kwargs) Optional[Dict[str, Any]] ¶
Get/Set Resource parameters