How do I list values of the Simulink Enumeration definitions ?

62 visualizaciones (últimos 30 días)
So I am trying to write a script to parse the .sldd format of simulink data dictionary.
I need to get all the possible values of an enumeration type as string.
I can list enum type definitions by:
enumTypeDefs = find(sectionObj, '-value','-class','Simulink.data.dictionary.EnumTypeDefinition')
This returns an array of Entry ebjects.
After this command when I run
getValue(enumTypeDefs(1))
It returns and displays values as part of Simulink.data.dictionary.EnumTypeDefinition class object.
I took a look at the documentation and saw that there isn't a property or method that returns all the values, you can return default value etc. but not all of them. https://nl.mathworks.com/help/simulink/slref/simulink.data.dictionary.enumtypedefinition-class.html
Also there isn't a method to return the number of elements in the enumeration type, this makes me unable to iterate over and return values one by one since I don't know the boundry of the iteration index.
I'd be glad If someone helped.
Thanks.

Respuesta aceptada

riccardo
riccardo el 8 de Oct. de 2020
Editada: riccardo el 8 de Oct. de 2020
I don't know if it's still an open Q, but since i found it while looking for the same thing, here's how I did it.
Once you have the Entry objects, get their Value with getValue, this/these will be EnumTypedefinition object(s).
Then one of the properties of an EnumTypeDefinition object is "Enumerals", hence:
enumDefList = <enumTypeDefObject>.Enumerals
will return a structure array holding Name, Value and Description of the enumerated type.
I'm using 2020a at the moment.
  5 comentarios
Eric Bender
Eric Bender el 13 de Oct. de 2020
Editada: Eric Bender el 13 de Oct. de 2020
@Riccardo
Thanks for the feedback. I was already familiar with the enumeration tryEnum01 command but I'm still unclear as to how to get the numerical representations of enum names from definition you've given above. Specifically I'd love to be able to get the full range of numerical values without having to cycle through each enum name (e.g. commandXYZ for tryEnum01 would yield : [0, 2 , 4, 6].
Thanks,
Eric
riccardo
riccardo el 14 de Oct. de 2020
@Eric
using enumeration you extract the arrays of enumerated objects and labels :
>> [ gg, hh ] = enumeration( 'tryEnum01' )
gg =
4×1 tryEnum01 enumeration array
AA
BB
CC
KK
hh =
4×1 cell array
{'AA'}
{'BB'}
{'CC'}
{'KK'}
<<
now gg is an array of enumerated objects including their numerical values
scalar-expanding the array within a "double" call:
>> indexes = double( gg(:) )
indexes =
0
2
4
6
<<
and you can make use of "methods" and "properties" on members of gg: only the list of methods is populated and useful

Iniciar sesión para comentar.

Más respuestas (1)

Amjad Elshenawy
Amjad Elshenawy el 23 de Mayo de 2019
Hello Ozan
Although it is not a direct answer to your question, I see that the following post may be helpful
  1 comentario
Eric Bender
Eric Bender el 10 de Jul. de 2020
I have the same question as Ozan. I have Simulink enumerations loaded in my workspace using the command:
Simulink.defineIntEnumType('epb_parkbrakeswitch_SL_T',{'PB_SWITCH_NEUTRAL','PB_SWITCH_UP','PB_SWITCH_DOWN'},[2,4,6]);
I have other scripts that run which are able to get the names of the loaded enumeration classes and even the enumeration members for the class. However how can I programatically access the values [2,4,6]? I need this for other purposes and I can't seem to figure out how to have those returned to me upon inspection.
Thank you.

Iniciar sesión para comentar.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by