Skip to content

Commit

Permalink
Adapt to the changes of asynchronous simulate
Browse files Browse the repository at this point in the history
Added support for get start and stop time APIs.
  • Loading branch information
adeas31 committed May 28, 2018
1 parent f545a43 commit 14022bc
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 15 deletions.
37 changes: 35 additions & 2 deletions OMEdit/OMEditGUI/OMS/OMSProxy.cpp
Expand Up @@ -470,9 +470,16 @@ bool OMSProxy::initialize(QString ident)
return statusToBool(status);
}

bool OMSProxy::simulate_asynchronous(QString ident)
/*!
* \brief OMSProxy::simulate_asynchronous
* Starts the asynchronous simulation.
* \param ident
* \param terminate
* \return
*/
bool OMSProxy::simulate_asynchronous(QString ident/*, int *terminate*/)
{
oms_status_enu_t status = oms2_simulate_asynchronous(ident.toStdString().c_str(), simulateCallback);
oms_status_enu_t status = oms2_simulate_asynchronous(ident.toStdString().c_str(), /*terminate,*/ simulateCallback);
return statusToBool(status);
}

Expand Down Expand Up @@ -618,6 +625,19 @@ bool OMSProxy::setBooleanParameter(const char* signal, bool value)
return statusToBool(status);
}

/*!
* \brief OMSProxy::setStartTime
* Get the start time from the model.
* \param cref
* \param startTime
* \return
*/
bool OMSProxy::getStartTime(QString cref, double *startTime)
{
oms_status_enu_t status = oms2_getStartTime(cref.toStdString().c_str(), startTime);
return statusToBool(status);
}

/*!
* \brief OMSProxy::setStartTime
* Set the start time of the simulation.
Expand All @@ -631,6 +651,19 @@ bool OMSProxy::setStartTime(QString cref, double startTime)
return statusToBool(status);
}

/*!
* \brief OMSProxy::setStopTime
* Get the stop time from the model.
* \param cref
* \param stopTime
* \return
*/
bool OMSProxy::getStopTime(QString cref, double *stopTime)
{
oms_status_enu_t status = oms2_getStopTime(cref.toStdString().c_str(), stopTime);
return statusToBool(status);
}

/*!
* \brief OMSProxy::setStopTime
* Set the stop time of the simulation.
Expand Down
4 changes: 3 additions & 1 deletion OMEdit/OMEditGUI/OMS/OMSProxy.h
Expand Up @@ -78,7 +78,7 @@ class OMSProxy : public QObject
bool deleteConnection(QString cref, QString conA, QString conB);
bool updateConnection(QString cref, QString conA, QString conB, const oms_connection_t *pConnection);
bool initialize(QString ident);
bool simulate_asynchronous(QString ident);
bool simulate_asynchronous(QString ident/*, int *terminate*/);
bool reset(QString ident);
bool terminate(QString ident);
void setLoggingLevel(int logLevel);
Expand All @@ -91,7 +91,9 @@ class OMSProxy : public QObject
bool setIntegerParameter(const char* signal, int value);
bool getBooleanParameter(QString signal, bool *pValue);
bool setBooleanParameter(const char* signal, bool value);
bool getStartTime(QString cref, double *startTime);
bool setStartTime(QString cref, double startTime);
bool getStopTime(QString cref, double *stopTime);
bool setStopTime(QString cref, double stopTime);
bool setCommunicationInterval(QString cref, double communicationInterval);
bool setResultFile(QString cref, QString filename);
Expand Down
8 changes: 8 additions & 0 deletions OMEdit/OMEditGUI/OMS/OMSSimulationDialog.cpp
Expand Up @@ -217,6 +217,14 @@ void OMSSimulationDialog::initializeFields()
{
setWindowTitle(QString("%1 - %2 - %3").arg(Helper::applicationName, Helper::OMSSimulationSetup, mpLibraryTreeItem->getNameStructure()));
mpSimulationHeading->setText(QString("%1 - %2").arg(Helper::OMSSimulationSetup, mpLibraryTreeItem->getNameStructure()));
// read the simulation start and stop time
double startTime, stopTime;
if (OMSProxy::instance()->getStartTime(mpLibraryTreeItem->getNameStructure(), &startTime)) {
mpStartTimeTextBox->setText(QString::number(startTime));
}
if (OMSProxy::instance()->getStopTime(mpLibraryTreeItem->getNameStructure(), &stopTime)) {
mpStopTimeTextBox->setText(QString::number(stopTime));
}
// set the result file
mpResultFileTextBox->setText(QString("%1_res.mat").arg(mpLibraryTreeItem->getNameStructure()));
}
Expand Down
21 changes: 11 additions & 10 deletions OMEdit/OMEditGUI/OMS/OMSSimulationOutputWidget.cpp
Expand Up @@ -83,16 +83,17 @@ OMSSimulationOutputWidget::OMSSimulationOutputWidget(OMSSimulationOptions omsSim
} else {
mResultFileLastModifiedDateTime = QDateTime::currentDateTime();
}
mIsSimulationRunning = false;
mIsSimulationRunning = 0;
// initialize the composite model
if (OMSProxy::instance()->initialize(mOMSSimulationOptions.getCompositeModelName())) {
// start the asynchronous simulation
qRegisterMetaType<oms_status_enu_t>("oms_status_enu_t");
connect(this, SIGNAL(sendSimulationProgress(QString,double,oms_status_enu_t)), SLOT(simulationProgress(QString,double,oms_status_enu_t)));
if (OMSProxy::instance()->simulate_asynchronous(mOMSSimulationOptions.getCompositeModelName())) {
mIsSimulationRunning = 1;
if (OMSProxy::instance()->simulate_asynchronous(mOMSSimulationOptions.getCompositeModelName()/*, &mIsSimulationRunning*/)) {
mpCancelSimulationButton->setEnabled(true);
mIsSimulationRunning = true;
} else {
mIsSimulationRunning = 0;
mpProgressLabel->setText(tr("Simulation using the <b>%1</b> composite model is failed. %2")
.arg(mOMSSimulationOptions.getCompositeModelName())
.arg(GUIMessages::getMessage(GUIMessages::CHECK_MESSAGES_BROWSER)));
Expand Down Expand Up @@ -128,12 +129,12 @@ void OMSSimulationOutputWidget::simulateCallback(const char* ident, double time,
*/
void OMSSimulationOutputWidget::cancelSimulation()
{
if (OMSProxy::instance()->terminate(mOMSSimulationOptions.getCompositeModelName())) {
mpProgressLabel->setText(tr("Simulation using the <b>%1</b> composite model is cancelled.").arg(mOMSSimulationOptions.getCompositeModelName()));
mpProgressBar->setValue(mpProgressBar->maximum());
mpCancelSimulationButton->setEnabled(false);
mIsSimulationRunning = false;
}
mIsSimulationRunning = 0; // setting this to zero here will quit the simulation loop since this is passed to OMSProxy::simulate_asynchronous
// reset the composite model after the simulation is finished successfully.
OMSProxy::instance()->reset(mOMSSimulationOptions.getCompositeModelName());
mpProgressLabel->setText(tr("Simulation using the <b>%1</b> composite model is cancelled.").arg(mOMSSimulationOptions.getCompositeModelName()));
mpProgressBar->setValue(mpProgressBar->maximum());
mpCancelSimulationButton->setEnabled(false);
}

/*!
Expand All @@ -154,7 +155,7 @@ void OMSSimulationOutputWidget::simulationProgress(QString ident, double time, o
mpProgressBar->setValue(mpProgressBar->maximum());
mpCancelSimulationButton->setEnabled(false);
mpArchivedOMSSimulationItem->setStatus(Helper::finished);
mIsSimulationRunning = false;
mIsSimulationRunning = 0;
// reset the composite model after the simulation is finished successfully.
OMSProxy::instance()->reset(ident);
// simulation finished show the results
Expand Down
4 changes: 2 additions & 2 deletions OMEdit/OMEditGUI/OMS/OMSSimulationOutputWidget.h
Expand Up @@ -51,7 +51,7 @@ class OMSSimulationOutputWidget : public QWidget
OMSSimulationOutputWidget(OMSSimulationOptions omsSimulationOptions, QWidget *pParent = 0);
void simulateCallback(const char* ident, double time, oms_status_enu_t status);
OMSSimulationOptions getOMSSimulationOptions() {return mOMSSimulationOptions;}
bool isSimulationRunning() {return mIsSimulationRunning;}
int isSimulationRunning() {return mIsSimulationRunning;}
private:
OMSSimulationOptions mOMSSimulationOptions;
Label *mpSimulationHeading;
Expand All @@ -61,7 +61,7 @@ class OMSSimulationOutputWidget : public QWidget
QPushButton *mpCancelSimulationButton;
ArchivedOMSSimulationItem *mpArchivedOMSSimulationItem;
QDateTime mResultFileLastModifiedDateTime;
bool mIsSimulationRunning;
int mIsSimulationRunning;
signals:
void sendSimulationProgress(QString ident, double time, oms_status_enu_t status);
public slots:
Expand Down

0 comments on commit 14022bc

Please sign in to comment.