When you create a custom block library, you might define data objects — such as bus and enumeration types — to be used on block interfaces. You can make these data types available to library users by storing them in a Simulink® data dictionary that is attached to the library. Library users automatically gain access to the data types contained in the dictionary when they drag a block from the library into their model.
To define data and types for your library blocks in a data dictionary:
Create a new data dictionary or open an existing dictionary. To create a new dictionary, in the Model Explorer, select File > New > Data Dictionary. To open an existing dictionary, select File > Open and browse for your dictionary.
Add data and types, such as bus objects, to the data dictionary.
Save the data dictionary.
You can attach the data dictionary to your library by using the UI or
programmatically by using the
To attach the data dictionary by using the UI:
Unlock your library (see Lock and Unlock Libraries).
In the Simulink Editor, on the Modeling tab, click Library Properties.
In the Library Properties dialog box, on the External Data tab, click Browse to locate and open your data dictionary.
Click OK to attach the dictionary.
To attach the data dictionary by using the
function, use this
After you have attached the dictionary and saved your library, the dictionary and its content appears in the Model Explorer as an external data source for the library.
As you develop blocks for your library, you can select the types contained in the library dictionary from the Data type list.
When you drag a block from a library into your model, the model automatically gains access to data objects contained in the dictionary attached to that library. To see the dictionary in the Model Explorer, in the Simulink Editor, click the model data badge in the bottom left corner, then click External Data. The dictionary appears as an external data source to your model under the From Libraries node.
The data objects defined in the library are now available to the model for simulation and code generation without the need to bring those data objects into either the base workspace or another data dictionary.
When you update or save your model, if the model no longer contains a block from the library, the library dictionary is no longer available to your model and the dictionary is removed from the From Libraries node.
There are several considerations when authoring or using a library with a linked data dictionary.
In most cases, you will define bus or enumeration types in a library dictionary, but library authors can share any type of object with library users by adding objects to the dictionary.
Items in the library dictionary are global in scope, and symbol resolution occurs as if the library dictionary is directly connected to the model.
If a library link is broken, the data associated with the library is no longer available. To regain access to the data, you must manually link your model to the library dictionary.
In a model hierarchy, a model must directly or indirectly reference a library dictionary to use the data objects that the dictionary contains.
Like a data dictionary hierarchy or model reference hierarchy, a
Simulink library can also form a hierarchy by using blocks from
another library. A user model can automatically access a library
dictionary through a library hierarchy. To ensure that dictionary
dependencies are up to date, at the command line, use the
Simulink.LibraryDictionary.refresh function to perform a
dependency analysis on the libraries in the current directory, in
another specified directory, or used by a specified model. Because this
library dependency analysis can be expensive, call the refresh function
only if you have a missing dependency. Once the analysis is complete,
the information is persistent across MATLAB® sessions. To clear the previous dependency analysis, use
When you drag a block from a library into your model, the model gains access to the data dictionary attached to that library. However, if the block is from a sublibrary, access is only to the data dictionary attached to that sublibrary. In this case, to provide a model with access to both library and sublibrary dictionaries when it uses the block, the library author must contain the sublibrary block in a new subsystem.
If you store your library under the MATLAB root folder, you can attach a dictionary to the library, but a model does not have automatic access to the dictionary when you add a block from the library.
Simulink does not support finding unused variables for a library-linked data dictionary.