Skip to content

Commit

Permalink
Simulate OMSimulator models
Browse files Browse the repository at this point in the history
  • Loading branch information
adeas31 committed Nov 7, 2018
1 parent 4c9b181 commit 8f7c38a
Show file tree
Hide file tree
Showing 23 changed files with 823 additions and 266 deletions.
125 changes: 104 additions & 21 deletions OMEdit/OMEditGUI/MainWindow.cpp
Expand Up @@ -64,6 +64,7 @@
#include "Simulation/SimulationDialog.h"
#include "TLM/TLMCoSimulationDialog.h"
#include "FMI/ImportFMUDialog.h"
#include "OMS/InstantiateDialog.h"
#include "FMI/ImportFMUModelDescriptionDialog.h"
#include "Git/CommitChangesDialog.h"
#include "Git/RevertCommitsDialog.h"
Expand Down Expand Up @@ -734,16 +735,42 @@ void MainWindow::simulationSetup(LibraryTreeItem *pLibraryTreeItem)
}

/*!
* \brief MainWindow::OMSSimulationSetup
* Opens the OMSimulator simulation setup
* \brief MainWindow::instantiateOMSModel
* Instantiates the OMSimulator model.
* \param pLibraryTreeItem
* \param checked
*/
void MainWindow::OMSSimulationSetup(LibraryTreeItem *pLibraryTreeItem)
void MainWindow::instantiateOMSModel(LibraryTreeItem *pLibraryTreeItem, bool checked)
{
if (checked) {
InstantiateDialog *pInstantiateDialog = new InstantiateDialog(pLibraryTreeItem);
// if user cancels the instantiation
if (!pInstantiateDialog->exec()) {
mpOMSInstantiateModelAction->setChecked(false);
}
} else {
if (!OMSProxy::instance()->terminate(pLibraryTreeItem->getNameStructure())) {
mpOMSInstantiateModelAction->setChecked(true);
} else {
mpOMSInstantiateModelAction->setText(Helper::instantiateModel);
mpOMSInstantiateModelAction->setText(Helper::instantiateOMSModelTip);
mpOMSSimulateAction->setEnabled(false);
pLibraryTreeItem->setModelState(oms_modelState_terminated);
}
}
}

/*!
* \brief MainWindow::simulateOMSModel
* Simulates the OMSimulator model.
* \param pLibraryTreeItem
*/
void MainWindow::simulateOMSModel(LibraryTreeItem *pLibraryTreeItem)
{
if (!mpOMSSimulationDialog) {
mpOMSSimulationDialog = new OMSSimulationDialog(this);
}
mpOMSSimulationDialog->show(pLibraryTreeItem);
mpOMSSimulationDialog->simulate(pLibraryTreeItem);
}

void MainWindow::instantiateModel(LibraryTreeItem *pLibraryTreeItem)
Expand Down Expand Up @@ -2334,18 +2361,44 @@ void MainWindow::TLMSimulate()
}

/*!
* \brief MainWindow::openOMSSimulationDialog
* \brief MainWindow::instantiateOMSModel
* Slot activated when mpOMSInstantiateModelAction triggered signal is raised.
* Calls MainWindow::instantiateOMSModel(LibraryTreeItem*)
* \param checked
*/
void MainWindow::instantiateOMSModel(bool checked)
{
ModelWidget *pModelWidget = mpModelWidgetContainer->getCurrentModelWidget();
if (pModelWidget) {
instantiateOMSModel(pModelWidget->getLibraryTreeItem(), checked);
}
}

/*!
* \brief MainWindow::simulateOMSModel
* Slot activated when mpOMSSimulationSetupAction triggered signal is raised.
* Opens the OMSimulator Simulation Dialog
* Calls MainWindow::simulateOMSModel(LibraryTreeItem*)
*/
void MainWindow::openOMSSimulationDialog()
void MainWindow::simulateOMSModel()
{
ModelWidget *pModelWidget = mpModelWidgetContainer->getCurrentModelWidget();
if (pModelWidget) {
OMSSimulationSetup(pModelWidget->getLibraryTreeItem());
simulateOMSModel(pModelWidget->getLibraryTreeItem());
}
}

/*!
* \brief MainWindow::showOMSArchivedSimulations
* Shows the archived simulations.
*/
void MainWindow::showOMSArchivedSimulations()
{
if (!mpOMSSimulationDialog) {
mpOMSSimulationDialog = new OMSSimulationDialog(this);
}
mpOMSSimulationDialog->show();
}

/*!
* \brief MainWindow::openWorkingDirectory
* Opens the current working directory.
Expand Down Expand Up @@ -3469,6 +3522,12 @@ void MainWindow::createActions()
// Add System Action
mpAddSystemAction = new QAction(QIcon(":/Resources/icons/add-system.svg"), Helper::addSystem, this);
mpAddSystemAction->setStatusTip(Helper::addSystemTip);
// Add or Edit icon Action
mpAddOrEditIconAction = new QAction(QIcon(":/Resources/icons/bitmap-shape.svg"), tr("Add/Edit Icon"), this);
mpAddOrEditIconAction->setStatusTip(tr("Adds/Edits an icon"));
// delete icon action
mpDeleteIconAction = new QAction(QIcon(":/Resources/icons/bitmap-delete.svg"), tr("Delete Icon"), this);
mpDeleteIconAction->setStatusTip(tr("Deletes an icon"));
// Add connector action
mpAddConnectorAction = new QAction(QIcon(":/Resources/icons/add-connector.svg"), Helper::addConnector, this);
mpAddConnectorAction->setStatusTip(Helper::addConnectorTip);
Expand All @@ -3481,16 +3540,19 @@ void MainWindow::createActions()
// Add SubModel Action
mpAddSubModelAction = new QAction(QIcon(":/Resources/icons/import-fmu.svg"), Helper::addSubModel, this);
mpAddSubModelAction->setStatusTip(Helper::addSubModelTip);
// Add or Edit icon Action
mpAddOrEditIconAction = new QAction(QIcon(":/Resources/icons/bitmap-shape.svg"), tr("Add/Edit Icon"), this);
mpAddOrEditIconAction->setStatusTip(tr("Adds/Edits an icon"));
// delete icon action
mpDeleteIconAction = new QAction(QIcon(":/Resources/icons/bitmap-delete.svg"), tr("Delete Icon"), this);
mpDeleteIconAction->setStatusTip(tr("Deletes an icon"));
// OMSimulator simulation setup action
mpOMSSimulationSetupAction = new QAction(QIcon(":/Resources/icons/tlm-simulate.svg"), Helper::OMSSimulationSetup, this);
mpOMSSimulationSetupAction->setStatusTip(Helper::OMSSimulationSetupTip);
connect(mpOMSSimulationSetupAction, SIGNAL(triggered()), SLOT(openOMSSimulationDialog()));
mpOMSInstantiateModelAction = new QAction(QIcon(":/Resources/icons/instantiate.svg"), Helper::instantiateModel, this);
mpOMSInstantiateModelAction->setStatusTip(Helper::instantiateOMSModelTip);
mpOMSInstantiateModelAction->setCheckable(true);
connect(mpOMSInstantiateModelAction, SIGNAL(triggered(bool)), SLOT(instantiateOMSModel(bool)));
// OMSimulator simulation setup action
mpOMSSimulateAction = new QAction(QIcon(":/Resources/icons/tlm-simulate.svg"), Helper::simulate, this);
mpOMSSimulateAction->setStatusTip(Helper::OMSSimulateTip);
connect(mpOMSSimulateAction, SIGNAL(triggered()), SLOT(simulateOMSModel()));
// Archived simulations
mpOMSArchivedSimulationsAction = new QAction(Helper::archivedSimulations, this);
mpOMSArchivedSimulationsAction->setStatusTip(Helper::archivedSimulations);
connect(mpOMSArchivedSimulationsAction, SIGNAL(triggered()), SLOT(showOMSArchivedSimulations()));
}

//! Creates the menus
Expand All @@ -3515,9 +3577,6 @@ void MainWindow::createMenus()
pFileMenu->addAction(mpOpenCompositeModelFileAction);
pFileMenu->addAction(mpLoadExternModelAction);
pFileMenu->addSeparator();
pFileMenu->addAction(mpNewOMSimulatorModelAction);
pFileMenu->addAction(mpOpenOMSModelFileAction);
pFileMenu->addSeparator();
pFileMenu->addAction(mpOpenDirectoryAction);
pFileMenu->addSeparator();
pFileMenu->addAction(mpSaveAction);
Expand Down Expand Up @@ -3669,6 +3728,29 @@ void MainWindow::createMenus()
pDebugMenu->addAction(mpAttachDebuggerToRunningProcessAction);
// add Debug menu to menu bar
menuBar()->addAction(pDebugMenu->menuAction());
// OMSimulator menu
QMenu *pOMSimulatorMenu = new QMenu(menuBar());
pOMSimulatorMenu->setTitle(tr("&OMSimulator"));
// add actions to OMSimulator menu
pOMSimulatorMenu->addAction(mpNewOMSimulatorModelAction);
pOMSimulatorMenu->addAction(mpOpenOMSModelFileAction);
pOMSimulatorMenu->addSeparator();
pOMSimulatorMenu->addAction(mpAddSystemAction);
pOMSimulatorMenu->addSeparator();
pOMSimulatorMenu->addAction(mpAddOrEditIconAction);
pOMSimulatorMenu->addAction(mpDeleteIconAction);
pOMSimulatorMenu->addSeparator();
pOMSimulatorMenu->addAction(mpAddConnectorAction);
pOMSimulatorMenu->addAction(mpAddBusAction);
pOMSimulatorMenu->addAction(mpAddTLMBusAction);
pOMSimulatorMenu->addSeparator();
pOMSimulatorMenu->addAction(mpAddSubModelAction);
pOMSimulatorMenu->addSeparator();
pOMSimulatorMenu->addAction(mpOMSInstantiateModelAction);
pOMSimulatorMenu->addAction(mpOMSSimulateAction);
pOMSimulatorMenu->addAction(mpOMSArchivedSimulationsAction);
// add OMSimulator menu to menu bar
menuBar()->addAction(pOMSimulatorMenu->menuAction());
// Git menu
QMenu *pGitMenu = new QMenu(menuBar());
pGitMenu->setTitle(tr("&Git"));
Expand Down Expand Up @@ -4146,7 +4228,8 @@ void MainWindow::createToolbars()
mpOMSimulatorToobar->addSeparator();
mpOMSimulatorToobar->addAction(mpAddSubModelAction);
mpOMSimulatorToobar->addSeparator();
mpOMSimulatorToobar->addAction(mpOMSSimulationSetupAction);
mpOMSimulatorToobar->addAction(mpOMSInstantiateModelAction);
mpOMSimulatorToobar->addAction(mpOMSSimulateAction);
}

//! when the dragged object enters the main window
Expand Down
14 changes: 10 additions & 4 deletions OMEdit/OMEditGUI/MainWindow.h
Expand Up @@ -193,7 +193,8 @@ class MainWindow : public QMainWindow
QAction* getAddBusAction() {return mpAddBusAction;}
QAction* getAddTLMBusAction() {return mpAddTLMBusAction;}
QAction* getAddSubModelAction() {return mpAddSubModelAction;}
QAction* getOMSSimulationSetupAction() {return mpOMSSimulationSetupAction;}
QAction* getOMSInstantiateModelAction() {return mpOMSInstantiateModelAction;}
QAction* getOMSSimulationSetupAction() {return mpOMSSimulateAction;}
QAction* getLogCurrentFileAction() {return mpLogCurrentFileAction;}
QAction* getStageCurrentFileForCommitAction() {return mpStageCurrentFileForCommitAction;}
QAction* getUnstageCurrentFileFromCommitAction() {return mpUnstageCurrentFileFromCommitAction;}
Expand All @@ -214,7 +215,8 @@ class MainWindow : public QMainWindow
void simulateWithAnimation(LibraryTreeItem *pLibraryTreeItem);
#endif
void simulationSetup(LibraryTreeItem *pLibraryTreeItem);
void OMSSimulationSetup(LibraryTreeItem *pLibraryTreeItem);
void instantiateOMSModel(LibraryTreeItem *pLibraryTreeItem, bool checked);
void simulateOMSModel(LibraryTreeItem *pLibraryTreeItem);
void instantiateModel(LibraryTreeItem *pLibraryTreeItem);
void checkModel(LibraryTreeItem *pLibraryTreeItem);
void checkAllModels(LibraryTreeItem *pLibraryTreeItem);
Expand Down Expand Up @@ -419,7 +421,9 @@ class MainWindow : public QMainWindow
QAction *mpAddBusAction;
QAction *mpAddTLMBusAction;
QAction *mpAddSubModelAction;
QAction *mpOMSSimulationSetupAction;
QAction *mpOMSInstantiateModelAction;
QAction *mpOMSSimulateAction;
QAction *mpOMSArchivedSimulationsAction;
// Toolbars
QMenu *mpRecentFilesMenu;
QMenu *mpLibrariesMenu;
Expand Down Expand Up @@ -497,7 +501,9 @@ public slots:
void exportToClipboard();
void fetchInterfaceData();
void TLMSimulate();
void openOMSSimulationDialog();
void instantiateOMSModel(bool checked);
void simulateOMSModel();
void showOMSArchivedSimulations();
void openWorkingDirectory();
void openTerminal();
void openConfigurationOptions();
Expand Down
31 changes: 31 additions & 0 deletions OMEdit/OMEditGUI/Modeling/Commands.cpp
Expand Up @@ -2909,3 +2909,34 @@ void UpdateTLMParametersCommand::undo()
mpConnectionLineAnnotation->setZf(QString::number(mOldTLMParameters.linearimpedance));
mpConnectionLineAnnotation->setZfr(QString::number(mOldTLMParameters.angularimpedance));
}


SystemSimulationInformationCommand::SystemSimulationInformationCommand(QString fixedStepSize,
LibraryTreeItem *pLibraryTreeItem, UndoCommand *pParent)
: UndoCommand(pParent)
{
mFixedStepSize = fixedStepSize;
mpLibraryTreeItem = pLibraryTreeItem;
setText(QString("System %1 simulation information").arg(mpLibraryTreeItem->getNameStructure()));
}

/*!
* \brief SystemSimulationInformationCommand::redoInternal
* redoInternal the SystemSimulationInformationCommand.
*/
void SystemSimulationInformationCommand::redoInternal()
{
if (!OMSProxy::instance()->setFixedStepSize(mpLibraryTreeItem->getNameStructure(), mFixedStepSize.toDouble())) {
setFailed(true);
return;
}
}

/*!
* \brief SystemSimulationInformationCommand::undo
* Undo the SystemSimulationInformationCommand.
*/
void SystemSimulationInformationCommand::undo()
{

}
11 changes: 11 additions & 0 deletions OMEdit/OMEditGUI/Modeling/Commands.h
Expand Up @@ -639,4 +639,15 @@ class UpdateTLMParametersCommand : public UndoCommand
oms3_tlm_connection_parameters_t mNewTLMParameters;
};

class SystemSimulationInformationCommand : public UndoCommand
{
public:
SystemSimulationInformationCommand(QString fixedStepSize, LibraryTreeItem *pLibraryTreeItem, UndoCommand *pParent = 0);
void redoInternal();
void undo();
private:
QString mFixedStepSize;
LibraryTreeItem *mpLibraryTreeItem;
};

#endif // COMMANDS_H
19 changes: 16 additions & 3 deletions OMEdit/OMEditGUI/Modeling/LibraryTreeWidget.cpp
Expand Up @@ -84,6 +84,7 @@ LibraryTreeItem::LibraryTreeItem()
setOMSTLMBusConnector(0);
setFMUInfo(0);
setSubModelPath("");
setModelState(oms_modelState_terminated);
}

/*!
Expand Down Expand Up @@ -145,6 +146,7 @@ LibraryTreeItem::LibraryTreeItem(LibraryType type, QString text, QString nameStr
setOMSTLMBusConnector(0);
setFMUInfo(0);
setSubModelPath("");
setModelState(oms_modelState_terminated);
}

/*!
Expand Down Expand Up @@ -762,6 +764,16 @@ void LibraryTreeItem::updateChildrenNameStructure()
}
}

/*!
* \brief LibraryTreeItem::canInstantiate
* Returns true if OMSimulator model can be instantiated.
* \return
*/
bool LibraryTreeItem::isInstantiated()
{
return mModelState == oms_modelState_instantiated;
}

/*!
* \brief LibraryTreeItem::handleLoaded
* Handles the case when an undefined inherited class is loaded.
Expand Down Expand Up @@ -3030,8 +3042,8 @@ void LibraryTreeView::createActions()
mpOMSRenameAction->setStatusTip(Helper::OMSRenameTip);
connect(mpOMSRenameAction, SIGNAL(triggered()), SLOT(OMSRename()));
// OMSimulator simulation setup action
mpOMSSimulationSetupAction = new QAction(QIcon(":/Resources/icons/tlm-simulate.svg"), Helper::OMSSimulationSetup, this);
mpOMSSimulationSetupAction->setStatusTip(Helper::OMSSimulationSetupTip);
mpOMSSimulationSetupAction = new QAction(QIcon(":/Resources/icons/tlm-simulate.svg"), Helper::simulate, this);
mpOMSSimulationSetupAction->setStatusTip(Helper::OMSSimulateTip);
connect(mpOMSSimulationSetupAction, SIGNAL(triggered(bool)), SLOT(openOMSSimulationDialog()));
// unload OMSimulator model Action
mpUnloadOMSModelAction = new QAction(QIcon(":/Resources/icons/delete.svg"), Helper::unloadClass, this);
Expand Down Expand Up @@ -3234,6 +3246,7 @@ void LibraryTreeView::showContextMenu(QPoint point)
menu.addAction(mpSaveAction);
menu.addAction(mpSaveAsAction);
menu.addSeparator();
mpOMSSimulationSetupAction->setEnabled(pLibraryTreeItem->isInstantiated());
menu.addAction(mpOMSSimulationSetupAction);
menu.addSeparator();
menu.addAction(mpUnloadOMSModelAction);
Expand Down Expand Up @@ -3785,7 +3798,7 @@ void LibraryTreeView::openOMSSimulationDialog()
{
LibraryTreeItem *pLibraryTreeItem = getSelectedLibraryTreeItem();
if (pLibraryTreeItem) {
MainWindow::instance()->OMSSimulationSetup(pLibraryTreeItem);
MainWindow::instance()->simulateOMSModel(pLibraryTreeItem);
}
}

Expand Down
6 changes: 6 additions & 0 deletions OMEdit/OMEditGUI/Modeling/LibraryTreeWidget.h
Expand Up @@ -39,6 +39,7 @@
#include "Util/StringHandler.h"
#include "Simulation/SimulationOptions.h"
#include "OMS/OMSProxy.h"
#include "OMS/OMSSimulationOptions.h"

#include <QTreeView>
#include <QSortFilterProxyModel>
Expand Down Expand Up @@ -144,6 +145,8 @@ class LibraryTreeItem : public QObject
const oms_fmu_info_t* getFMUInfo() const {return mpFMUInfo;}
void setSubModelPath(QString subModelPath) {mSubModelPath = subModelPath;}
QString getSubModelPath() const {return mSubModelPath;}
oms_modelState_enu_t getModelState() const {return mModelState;}
void setModelState(const oms_modelState_enu_t &modelState) {mModelState = modelState;}
QString getTooltip() const;
QIcon getLibraryTreeItemIcon() const;
bool inRange(int lineNumber);
Expand All @@ -170,9 +173,11 @@ class LibraryTreeItem : public QObject
void updateChildrenNameStructure();
void emitConnectionAdded(LineAnnotation *pConnectionLineAnnotation) {emit connectionAdded(pConnectionLineAnnotation);}
void emitCoOrdinateSystemUpdated(GraphicsView *pGraphicsView) {emit coOrdinateSystemUpdated(pGraphicsView);}
bool isInstantiated();

OMCInterface::getClassInformation_res mClassInformation;
SimulationOptions mSimulationOptions;
OMSSimulationOptions mOMSSimulationOptions;
private:
bool mIsRootItem;
LibraryTreeItem *mpParentLibraryTreeItem;
Expand Down Expand Up @@ -203,6 +208,7 @@ class LibraryTreeItem : public QObject
oms3_tlmbusconnector_t *mpOMSTLMBusConnector;
const oms_fmu_info_t *mpFMUInfo;
QString mSubModelPath;
oms_modelState_enu_t mModelState;
signals:
void loaded(LibraryTreeItem *pLibraryTreeItem);
void loadedForComponent();
Expand Down

0 comments on commit 8f7c38a

Please sign in to comment.