Можно создать представление архитектуры программно. Эта тема представляет два примера создания представлений архитектуры программно и показывает вам, как использовать запросы, чтобы найти элементы в модели System Composer™.
query является спецификацией, которая описывает определенные ограничения или критерии, которым удовлетворят элементы модели. Используйте запросы, чтобы искать элементы с ограничительными критериями и отфильтровать представления.
В этом примере показано, как использовать систему записи без ключа, чтобы программно создать представления архитектуры с помощью API.
1. Импортируйте пакет с запросами.
import systemcomposer.query.*;
2. Откройте файл проекта Simulink® для Системы Записи Без ключа.
scKeylessEntrySystem
3. Загрузите модель в качестве примера в System Composer™.
zcModel = systemcomposer.loadModel('KeylessEntryArchitecture');
Пример 1: представление состояния анализа аппаратного компонента
Создайте отфильтрованное представление, которое выбирает все аппаратные компоненты в модели архитектуры и группирует их использующий ReviewStatus
свойство.
1. Создайте запрос, чтобы выбрать все аппаратные компоненты.
hwCompQuery = HasStereotype(IsStereotypeDerivedFrom('AutoProfile.HardwareComponent'))
hwCompQuery = HasStereotype with properties: AllowedParentConstraints: {1x3 cell} SubConstraint: [1x1 systemcomposer.query.IsStereotypeDerivedFrom] SkipValidation: 0
2. Используйте запрос, чтобы создать представление.
zcModel.createView('Hardware Component Review Status',... 'Select',hwCompQuery,... % Query to use for the selection 'GroupBy',{'AutoProfile.BaseComponent.ReviewStatus'},... % Stereotype property to qualify by 'IncludeReferenceModels',true,... % Include components in referenced models 'Color','purple');
3. Откройте галерею Architecture Views.
zcModel.openViews
Пример 2: системное представление поставщика локатора FOB
В этом примере показано, как создать представление свободной формы, которое вручную вытягивает компоненты от Системы Локатора FOB и затем группирует их использующий существующие и новые компоненты представления для поставщиков. В этом примере вы будете использовать группы элемента, группировки компонентов в представлении, чтобы программно заполнить представление.
1. Создайте архитектуру представления.
fobSupplierView = zcModel.createView('FOB Locator System Supplier Breakdown',... 'Color','lightblue');
2. Добавьте подгруппу под названием 'Supplier D'
. Добавьте FOB Locator Module
к подгруппе элемента представления.
supplierD = fobSupplierView.Root.createSubGroup('Supplier D'); supplierD.addElement('KeylessEntryArchitecture/FOB Locator System/FOB Locator Module');
3. Создайте новую подгруппу для 'Supplier A'
.
supplierA = fobSupplierView.Root.createSubGroup('Supplier A');
4. Добавьте каждый из Приемников FOB, чтобы просмотреть подгруппу элемента.
FOBLocatorSystem = zcModel.lookup('Path','KeylessEntryArchitecture/FOB Locator System'); % Find all the components which contain the name "Receiver" receiverCompPaths = zcModel.find(... contains(systemcomposer.query.Property('Name'),'Receiver'),... FOBLocatorSystem.Architecture); supplierA.addElement(receiverCompPaths)
В этом примере показано, как найти компоненты в модели System Composer с помощью запросов.
Откройте модель.
import systemcomposer.query.*; scKeylessEntrySystem zcModel = systemcomposer.loadModel('KeylessEntryArchitecture');
Найдите все компоненты программного обеспечения в системе.
con1 = HasStereotype(Property("Name") == "SoftwareComponent"); [compPaths, compObjs] = zcModel.find(con1)
compPaths = 5x1 cell
{'KeylessEntryArchitecture/Sound System/Sound Controller' }
{'KeylessEntryArchitecture/Lighting System/Lighting Controller' }
{'KeylessEntryArchitecture/Engine Control System/Keyless Start Controller'}
{'KeylessEntryArchitecture/Door Lock//Unlock System/Door Lock Controller' }
{'KeylessEntryArchitecture/FOB Locator System/FOB Locator Module' }
compObjs=1×5 object
1x5 Component array with properties:
IsAdapterComponent
Architecture
ReferenceName
Name
Parent
Ports
OwnedPorts
OwnedArchitecture
Position
Model
SimulinkHandle
SimulinkModelHandle
UUID
ExternalUID
% Include reference models in the search softwareComps = zcModel.find(con1, 'IncludeReferenceModels', true)
softwareComps = 9x1 cell
{'KeylessEntryArchitecture/Sound System/Sound Controller' }
{'KeylessEntryArchitecture/Lighting System/Lighting Controller' }
{'KeylessEntryArchitecture/Engine Control System/Keyless Start Controller' }
{'KeylessEntryArchitecture/Door Lock//Unlock System/Door Lock Controller' }
{'KeylessEntryArchitecture/FOB Locator System/FOB Locator Module' }
{'KeylessEntryArchitecture/Door Lock//Unlock System/Rear Pass Door Lock Sensor/Detect Door Lock Status' }
{'KeylessEntryArchitecture/Door Lock//Unlock System/Rear Driver Door Lock Sensor/Detect Door Lock Status' }
{'KeylessEntryArchitecture/Door Lock//Unlock System/Front Pass Door Lock Sensor/Detect Door Lock Status' }
{'KeylessEntryArchitecture/Door Lock//Unlock System/Front Driver Door Lock Sensor/Detect Door Lock Status'}
Найдите все основные компоненты в системе.
con2 = HasStereotype(IsStereotypeDerivedFrom("AutoProfile.BaseComponent"));
baseComps = zcModel.find(con2)
baseComps = 18x1 cell
{'KeylessEntryArchitecture/Sound System/Dashboard Speaker' }
{'KeylessEntryArchitecture/Engine Control System/Start//Stop Button' }
{'KeylessEntryArchitecture/Sound System/Sound Controller' }
{'KeylessEntryArchitecture/Lighting System/Lighting Controller' }
{'KeylessEntryArchitecture/Engine Control System/Keyless Start Controller' }
{'KeylessEntryArchitecture/Door Lock//Unlock System/Door Lock Controller' }
{'KeylessEntryArchitecture/FOB Locator System/FOB Locator Module' }
{'KeylessEntryArchitecture/FOB Locator System/Center Receiver' }
{'KeylessEntryArchitecture/FOB Locator System/Front Receiver' }
{'KeylessEntryArchitecture/FOB Locator System/Rear Receiver' }
{'KeylessEntryArchitecture/Door Lock//Unlock System/Front Driver Door Lock Sensor' }
{'KeylessEntryArchitecture/Door Lock//Unlock System/Front Pass Door Lock Sensor' }
{'KeylessEntryArchitecture/Door Lock//Unlock System/Rear Driver Door Lock Sensor' }
{'KeylessEntryArchitecture/Door Lock//Unlock System/Rear Pass Door Lock Sensor' }
{'KeylessEntryArchitecture/Door Lock//Unlock System/Front Driver Door Lock Actuator'}
{'KeylessEntryArchitecture/Door Lock//Unlock System/Front Pass Door Lock Actuator' }
{'KeylessEntryArchitecture/Door Lock//Unlock System/Rear Driver Door Lock Actuator' }
{'KeylessEntryArchitecture/Door Lock//Unlock System/Rear Pass Door Lock Actuator' }
Найдите все компоненты с помощью интерфейса KeyFOBPosition
.
con3 = HasPort(HasInterface(Property("Name") == "KeyFOBPosition")); con3_a = HasPort(Property("InterfaceName") == "KeyFOBPosition"); keyFOBPosComps = zcModel.find(con3)
keyFOBPosComps = 10x1 cell
{'KeylessEntryArchitecture/Door Lock//Unlock System' }
{'KeylessEntryArchitecture/Door Lock//Unlock System/Door Lock Controller' }
{'KeylessEntryArchitecture/Engine Control System' }
{'KeylessEntryArchitecture/Engine Control System/Keyless Start Controller'}
{'KeylessEntryArchitecture/FOB Locator System' }
{'KeylessEntryArchitecture/FOB Locator System/FOB Locator Module' }
{'KeylessEntryArchitecture/Lighting System' }
{'KeylessEntryArchitecture/Lighting System/Lighting Controller' }
{'KeylessEntryArchitecture/Sound System' }
{'KeylessEntryArchitecture/Sound System/Sound Controller' }
Найдите все компоненты, WCET которых меньше чем или равен 5 мс.
con4 = PropertyValue("AutoProfile.SoftwareComponent.WCET") <= 5;
zcModel.find(con4)
ans = 1x1 cell array
{'KeylessEntryArchitecture/Sound System/Sound Controller'}
% You can specify units and it will do the conversions for you con5 = PropertyValue("AutoProfile.SoftwareComponent.WCET") <= Value(5, 'ms'); query1Comps = zcModel.find(con5)
query1Comps = 3x1 cell
{'KeylessEntryArchitecture/Sound System/Sound Controller' }
{'KeylessEntryArchitecture/Lighting System/Lighting Controller' }
{'KeylessEntryArchitecture/FOB Locator System/FOB Locator Module'}
Найдите все компоненты, WCET которых больше OR, на 1 мс имеет стоимость, больше, чем 10 долларов США.
con6 = PropertyValue("AutoProfile.SoftwareComponent.WCET") > Value(1, 'ms') | PropertyValue("AutoProfile.Base.Cost") > Value(10, 'USD'); query2Comps = zcModel.find(con6)
query2Comps = 2x1 cell
{'KeylessEntryArchitecture/Door Lock//Unlock System/Door Lock Controller' }
{'KeylessEntryArchitecture/Engine Control System/Keyless Start Controller'}
Закройте модель.
zcModel.close;
createView
| deleteView
| find
| getView
| lookup
| openViews
| systemcomposer.query.Constraint
| systemcomposer.view.ElementGroup
| systemcomposer.view.View