Информация об объекте данных в model.rtw

Обзор объекта данных

Во время процесса сборки генератор кода пишет информацию о сигнале Simulink® и объектах данных параметра к файлу model.rtw. Запись Object с информацией о свойстве CoderInfo записана для каждого параметра, или сигнализируйте, что это соблюдает определенные условия. Эти условия описаны в Записях объекта для Параметров и Записях объекта для Сигналов.

Записи Object содержат информацию, соответствующую связанному объекту данных. Чтобы получить доступ к записям Object, необходимо записать код Компилятора Выходного языка (см. Информацию об объекте Доступа к данным через TLC).

Для некоторых данных, задавая пользовательские классы памяти может быть полезный подход. Для получения дополнительной информации смотрите Точно Представление данных Управления путем Записи Кода TLC для Пользовательского Класса памяти (Embedded Coder). Обратите внимание на то, что эта поддержка требует лицензии Embedded Coder®.

Примечание

Примеры записи Object в этом разделе сгенерированы из модели rtwdemo_advsc в качестве примера с образцовой кнопкой ExportedGlobal Storage Class дважды кликнутая и образцовая опция выбранный Retain .rtw file. (Не используйте кнопки модели в качестве примера, чтобы создать модель, когда они изменяют образцовые опции, включая Retain .rtw file.)

Записи объекта для параметров

Запись Object с информацией о свойстве CoderInfo включена в раздел ModelParameters файла model.rtw для каждого параметра, который отвечает следующим условиям:

  • Параметр решает к объекту данных Simulink.Parameter (или к объекту данных параметра, который прибывает из класса, выведенного от класса Simulink.Parameter).

  • Символ параметра сохраняется в сгенерированном коде. Символ сохраняется, когда свойство CoderInfo.StorageClass объекта данных не установлено в Auto или, если вы устанавливаете класс памяти по умолчанию для соответствующей категории данных к Default в Коде, Сопоставляющем Редактор, Model default.

Следующий пример показывает часть записи Object для параметра. Действительная запись содержит больше полей, чем появляются в примере.

ModelParameters {
  NumParameters     10
  ...
    Parameter {
      Identifier	      "K1"
      LogicalSrc	      P7
      WorkspaceVarName	      "K1"
      Protected		      no
      Tunable		      yes
      StorageClass	      "ExportedGlobal"
      Value		      [2]
      OriginalDataTypeIdx     2
      CGTypeIdx		      41
      ContainerCGTypeIdx      42
      ReferencedBy	      Matrix(1,4)
[[1, -1, 4, 5];]
      GraphicalRef	      Matrix(1,2)
[[0, 16];]
      GraphicalSource	      [-1, -1]
      OwnerSysIdx	      [1, -1]
      HasObject		      1
      Object {
	Package			Simulink
	Class			Parameter
	ObjectProperties {
	  Value			  2.0
	  CoderInfo {
	    Object {
	      Package		      Simulink
	      Class		      CoderInfo
	      ObjectProperties {
		StorageClass		"ExportedGlobal"
		TypeQualifier		""
		Alias			""
		Alignment		-1
		CSCPackageName		"Simulink"
		ParameterOrSignal	"Parameter"
		CustomStorageClass	"Default"
		CustomAttributes {
		  Object {
		    Package		    SimulinkCSC
		    Class		    AttribClass_Simulink_Default
		    ObjectProperties {
		    }
		  }
		}
	      }
	    }
	  }
  ...
}

Записи объекта для сигналов

Запись Object с информацией о свойстве CoderInfo включена или в ExternalOutputs, ExternalInputs или в раздел BlockOutputs файла model.rtw для каждого сигнала (включая корневой уровень Inport и блоки Outport), чей символ сохраняется в сгенерированном коде. Символ сохраняется, когда сигнал использует класс памяти кроме Auto. Если сигнал сконфигурирован, чтобы быть неструктурированной глобальной переменной в сгенерированном коде, его валидность и уникальность осуществляются, и его символ сохраняется.

Следующий пример показывает часть записи Object для блока Outport корневого уровня. Действительная запись содержит больше полей, чем появляются в примере.

ExternalOutputs {
  ...
  NumExternalOutputs	    1
  ...
    ExternalOutput {
      ArgSrc		      Y0
      Block		      [1,3]
      BlockName		      "<Root>/Out1"
      Identifier	      "output"
      OrigIdentifier	      "output"
      StorageClass	      "ExportedGlobal"
      ResolvedToSignalObject  embedded
      HasObject		      1
      Object {
	Package			Simulink
	Class			Signal
	ObjectProperties {
	  CoderInfo {
	    Object {
	      Package		      Simulink
	      Class		      CoderInfo
	      ObjectProperties {
		StorageClass		"ExportedGlobal"
		TypeQualifier		""
		Alias			""
		Alignment		-1
		CSCPackageName		"Simulink"
		ParameterOrSignal	"Signal"
		CustomStorageClass	"Default"
		CustomAttributes {
		  Object {
		    Package		    SimulinkCSC
		    Class		    AttribClass_Simulink_Default
		    ObjectProperties {
                  }
                }
              }
            }
          }
        }
  ...
}

Информация об объекте Доступа к данным через TLC

Этот раздел обеспечивает пример кода, чтобы проиллюстрировать, как получить доступ к информации об объекте данных из файла model.rtw с помощью кода TLC.

Доступ к записям объекта параметра

Следующий фрагмент кода выполняет итерации по структурам Parameter в разделе ModelParameters файла model.rtw и извлекает информацию от параметра записи Object, с которыми сталкиваются.

%with CompiledModel.ModelParameters
  %foreach modelParamIdx = NumParameters
    %assign thisModelParam = Parameter[modelParamIdx]
    %assign paramName = thisModelParam.Identifier
    %if EXISTS("thisModelParam.Object.ObjectProperties")
      %with thisModelParam.Object.ObjectProperties
        %assign valueInObject = Value
        %with CoderInfo.Object.ObjectProperties
          %assign storageClassInObject  = StorageClass
        %endwith
        %% ***********************************
        %% Access user-defined properties here
        %% ***********************************
        %if EXISTS("MY_PROPERTY_NAME")
          %assign userDefinedPropertyName = MY_PROPERTY_NAME
        %endif
        %% ***********************************
      %endwith
    %endif
  %endforeach
%endwith

Доступ к записям объекта сигнала

Следующий фрагмент кода выполняет итерации по структурам ExternalBlockOutput в разделе BlockOutputs файла model.rtw и извлекает информацию от записей Object сигнала, с которыми сталкиваются.

%with CompiledModel.BlockOutputs
  %foreach blockOutputIdx = NumExternalBlockOutputs
    %assign thisBlockOutput = ExternalBlockOutput[blockOutputIdx]
    %assign signalName = thisBlockOutput.Identifier
    %if EXISTS("thisBlockOutput.Object.ObjectProperties")
      %with thisBlockOutput.Object.ObjectProperties
        %with CoderInfo.Object.ObjectProperties
          %assign storageClassInObject  = StorageClass
        %endwith \
        %% ***********************************\
        %% Access user-defined properties here\
        %% ***********************************
        %if EXISTS("MY_PROPERTY_NAME")
          %assign userDefinedPropertyName = MY_PROPERTY_NAME
        %endif
        %% ***********************************
      %endwith
    %endif
  %endforeach
%endwith

Похожие темы