How functional block scripts work
The primary working unit of SystemLab|Design is the functional block (fb) script. Written
in Python, these scripts can be used to emulate a wide variety of virtual system functions.
All fb scripts must be written using the same input and output rules as defined through
a generic run method (called during the simulation routine).
Fig 1: The fb script run method
The fb script first retrieves the input_signals_data list (from the fb input port(s) - when available),
the parameters_input list and the settings dictionary for the simulation.
Calculations are then performed on the data set and are formatted to be returned to the
simulation routine in the form of output signal data array lists (signals_data - to be allocated to
output ports, when needed), results and an updated parameters list (if needed).
Within the fb script, external modules can also be imported (project modules) to allow for
sharing and updating of data between functional blocks or to populate data panels and/or
build customized graphs & viewers.
Fig 2: How functional block scripts work
Linking functional blocks to a script module
It is important to ensure that every block in the design is linked to a valid script name
and location (the simulator performs checks for this and will stop the simulation and
issue an error message when a script name and path cannot be found).
The script name can be defined and edited by double left-clicking on the functional block
to access its properties menu.
Also, to quickly confirm which script is being used, hover your mouse over any functional
block and a pop-up menu will display the script name associated with the fb.
To find the script during a simulation, the run_fb_script method first searches in the
folders syslab_fb_scripts/digital, syslab_fb_scripts/electrical and syslab_fb_scripts/optical.
These folders house all the default (baseline) scripts and are linked to the Functional
block library on the left menu panel (this is where you can drag and drop pre-defined
If the script cannot be found in these folders, then the run_fb_script method will check
the file paths that are defined in the Project settings for the design. These can be
accessed by selecting the Settings icon on the Tool bar. The dot (.) before
the first back slash references the current root directory where the application is running.
The second field can be used to specify another search folder location but can be left blank.
If a design file/folder is created or moved outside of the main root folder (systemlab_design),
the full path directory must be specified (C:\user\folder1\).
Script files can be accessed, viewed and edited through SciTE (included by default with SystemLab|Design),
IDLE (Python’s Integrated Development and Learning Environment), or any other compatible
code reader (such as Notepad++). The editor can be launched directly from the
SystemLab|Design GUI (either from Open code/script editor in the Menu bar),
or from any of the Functional block properties dialogs (located next to the
Script module name field).
Each script is structured as follows:
The “PROJECT SETTINGS” section is where the global simulation settings are accessed
(the settings input list is the source)
The “INPUT PARAMETERS” section is where the parameters_input list is accessed (when
parameters are defined in the properties panel) or where additional local parameters
can be defined.
The “INPUT SIGNALS” section is where the “input_signals_data” list of data arrays
information is accessed (this applies only to components with input ports).
Data manipulation and other calculations/algorithms are performed within the
Once calculations are complete, we prepare the data to be returned to the main
simulation routine. The “RESULTS” section is where locally calculated results are
exported to the Output data panel of the functional block and the “RETURN” section is
where output signals are formatted, along with the results list and the output
parameters (if being overwritten), to be returned to the run_fb_script routine
Fig 3: Example fb_script viewed within Python IDLE