Создайте архитектурные представления программно

Можно создать представление архитектуры программно. Эта тема представляет два примера создания представлений архитектуры программно и показывает вам, как использовать запросы, чтобы найти элементы в модели System Composer™.

query является спецификацией, которая описывает определенные ограничения или критерии, которым удовлетворят элементы модели. Используйте запросы, чтобы искать элементы с ограничительными критериями и отфильтровать представления.

Представления архитектуры в System Composer с системой записи без ключа

В этом примере показано, как использовать систему записи без ключа, чтобы программно создать представления архитектуры с помощью 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;

Смотрите также

| | | | | | | |

Похожие темы