void TLMCoSimulationDialog::simulationProcessFinished(TLMCoSimulationOptions tlmCoSimulationOptions, QDateTime resultFileLastModifiedDateTime) { mpTLMCoSimulationOutputWidget->clear(); // read the result file QFileInfo fileInfo(tlmCoSimulationOptions.getFileName()); QFileInfo resultFileInfo(fileInfo.absoluteDir().absolutePath() + "/" + fileInfo.completeBaseName() + ".csv"); if (resultFileInfo.exists() && resultFileLastModifiedDateTime <= resultFileInfo.lastModified()) { VariablesWidget *pVariablesWidget = mpMainWindow->getVariablesWidget(); OMCProxy *pOMCProxy = mpMainWindow->getOMCProxy(); QStringList list = pOMCProxy->readSimulationResultVars(resultFileInfo.absoluteFilePath()); // close the simulation result file. pOMCProxy->closeSimulationResultFile(); if (list.size() > 0) { #if !defined(WITHOUT_OSG) // only show the AnimationWindow if we have a visual xml file. QFileInfo visualFileInfo(fileInfo.absoluteDir().absolutePath() + "/" + fileInfo.completeBaseName() + "_visual.xml"); if (visualFileInfo.exists()) { mpMainWindow->getPlotWindowContainer()->addAnimationWindow(mpMainWindow->getPlotWindowContainer()->subWindowList().isEmpty()); AnimationWindow *pAnimationWindow = mpMainWindow->getPlotWindowContainer()->getCurrentAnimationWindow(); if (pAnimationWindow) { pAnimationWindow->openAnimationFile(resultFileInfo.absoluteFilePath()); } } #endif mpMainWindow->getPerspectiveTabBar()->setCurrentIndex(2); pVariablesWidget->insertVariablesItemsToTree(resultFileInfo.fileName(), fileInfo.absoluteDir().absolutePath(), list, SimulationOptions()); mpMainWindow->getVariablesDockWidget()->show(); } } }
/*! * \brief TLMCoSimulationDialog::simulate * Starts the TLM co-simulation */ void TLMCoSimulationDialog::runTLMCoSimulation() { if (isTLMCoSimulationRunning()) { QMessageBox::information(this, QString(Helper::applicationName).append(" - ").append(Helper::information), GUIMessages::getMessage(GUIMessages::TLMCOSIMULATION_ALREADY_RUNNING), Helper::ok); return; } if (validate()) { TLMCoSimulationOptions tlmCoSimulationOptions = createTLMCoSimulationOptions(); if (tlmCoSimulationOptions.isValid()) { setIsTLMCoSimulationRunning(true); mpTLMCoSimulationOutputWidget->showTLMCoSimulationOutputWidget(tlmCoSimulationOptions); showTLMCoSimulationOutputWindow(); accept(); } } }
void TLMCoSimulationDialog::simulationProcessFinished(TLMCoSimulationOptions tlmCoSimulationOptions, QDateTime resultFileLastModifiedDateTime) { mpTLMCoSimulationOutputWidget->clear(); // read the result file QFileInfo fileInfo(tlmCoSimulationOptions.getFileName()); QFileInfo resultFileInfo(fileInfo.absoluteDir().absolutePath() + "/" + fileInfo.completeBaseName() + ".csv"); if (resultFileInfo.exists() && resultFileLastModifiedDateTime <= resultFileInfo.lastModified()) { VariablesWidget *pVariablesWidget = mpMainWindow->getVariablesWidget(); OMCProxy *pOMCProxy = mpMainWindow->getOMCProxy(); QStringList list = pOMCProxy->readSimulationResultVars(resultFileInfo.absoluteFilePath()); // close the simulation result file. pOMCProxy->closeSimulationResultFile(); if (list.size() > 0) { mpMainWindow->getPerspectiveTabBar()->setCurrentIndex(2); pVariablesWidget->insertVariablesItemsToTree(resultFileInfo.fileName(), fileInfo.absoluteDir().absolutePath(), list, SimulationOptions()); mpMainWindow->getVariablesDockWidget()->show(); } } }
/*! * \brief TLMCoSimulationDialog::createTLMCoSimulationOptions * \return */ TLMCoSimulationOptions TLMCoSimulationDialog::createTLMCoSimulationOptions() { TLMCoSimulationOptions tlmCoSimulationOptions; tlmCoSimulationOptions.setClassName(mpLibraryTreeItem->getName()); tlmCoSimulationOptions.setFileName(mpLibraryTreeItem->getFileName()); tlmCoSimulationOptions.setTLMPluginPath(mpTLMPluginPathTextBox->text()); tlmCoSimulationOptions.setManagerProcess(mpManagerProcessTextBox->text()); tlmCoSimulationOptions.setServerPort(mpServerPortTextBox->text()); tlmCoSimulationOptions.setMonitorPort(mpMonitorPortTextBox->text()); tlmCoSimulationOptions.setManagerDebugMode(mpManagerDebugModeCheckBox->isChecked()); tlmCoSimulationOptions.setMonitorProcess(mpMonitorProcessTextBox->text()); tlmCoSimulationOptions.setNumberOfSteps(mpNumberOfStepsTextBox->text().toInt()); tlmCoSimulationOptions.setTimeStepSize(mpTimeStepSizeTextBox->text().toDouble()); tlmCoSimulationOptions.setMonitorDebugMode(mpMonitorDebugModeCheckBox->isChecked()); // manager args QStringList managerArgs; if (mpManagerDebugModeCheckBox->isChecked()) { managerArgs.append("-d"); } if (!mpServerPortTextBox->text().isEmpty()) { managerArgs.append("-p"); managerArgs.append(mpServerPortTextBox->text()); } // monitor args QStringList monitorArgs; if (mpMonitorDebugModeCheckBox->isChecked()) { monitorArgs.append("-d"); } if (!mpNumberOfStepsTextBox->text().isEmpty()) { monitorArgs.append("-n"); monitorArgs.append(mpNumberOfStepsTextBox->text()); } if (!mpTimeStepSizeTextBox->text().isEmpty()) { monitorArgs.append("-t"); monitorArgs.append(mpTimeStepSizeTextBox->text()); } if (!mpMonitorPortTextBox->text().isEmpty()) { // set monitor port for manager process managerArgs.append("-m"); managerArgs.append(mpMonitorPortTextBox->text()); // set monitor server:port for monitor process #define MAXHOSTNAME 1024 char myname[MAXHOSTNAME+1]; struct hostent *hp; #ifdef WIN32 WSADATA ws; int d; d = WSAStartup(0x0101,&ws); Q_UNUSED(d); #endif gethostname(myname, MAXHOSTNAME); hp = gethostbyname((const char*) myname); if (hp == NULL) { MessageItem messageItem(MessageItem::MetaModel, "", false, 0, 0, 0, 0, tr("Failed to get my hostname, check that name resolves, e.g. /etc/hosts has %1") .arg(QString(myname)), Helper::scriptingKind, Helper::errorLevel); mpMainWindow->getMessagesWidget()->addGUIMessage(messageItem); tlmCoSimulationOptions.setIsValid(false); return tlmCoSimulationOptions; } char* localIP = inet_ntoa (*(struct in_addr *)*hp->h_addr_list); QString monitorPort = QString(localIP) + ":" + mpMonitorPortTextBox->text(); monitorArgs.append(monitorPort); } tlmCoSimulationOptions.setManagerArgs(managerArgs); tlmCoSimulationOptions.setMonitorArgs(monitorArgs); return tlmCoSimulationOptions; }