Skip to content

Commit b938646

Browse files
arun3688lochel
andauthored
export signalFilter to ssp (#985)
Co-authored-by: Lennart Ochel <lennart.ochel@ri.se>
1 parent 03ab7bc commit b938646

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+1406
-483
lines changed

doc/UsersGuide/source/api/addSignalsToResults.rst

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
addSignalsToResults
33
-------------------
44

5-
[deprecated: `setSignalFilter` is the recommended API]
6-
75
Add all variables that match the given regex to the result file.
86
#END#
97

doc/UsersGuide/source/api/getSignalFilter.rst

Lines changed: 0 additions & 37 deletions
This file was deleted.

doc/UsersGuide/source/api/removeSignalsFromResults.rst

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
removeSignalsFromResults
33
------------------------
44

5-
[deprecated: `setSignalFilter` is the recommended API]
6-
75
Removes all variables that match the given regex to the result file.
86
#END#
97

doc/UsersGuide/source/api/setSignalFilter.rst

Lines changed: 0 additions & 40 deletions
This file was deleted.

src/OMSimulatorLib/Component.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434

3535
#include "Clock.h"
3636
#include "ComRef.h"
37+
#include "Connector.h"
3738
#include "DirectedGraph.h"
3839
#include "Element.h"
3940
#include "FMUInfo.h"
@@ -119,6 +120,8 @@ namespace oms
119120

120121
oms_status_enu_t rename(const ComRef& newCref); ///< rename submodules, e.g., fmu:s
121122

123+
virtual void getFilteredSignals(std::vector<Connector>& filteredSignals) const = 0;
124+
122125
protected:
123126
Component(const ComRef& cref, oms_component_enu_t type, System* parentSystem, const std::string& path);
124127

src/OMSimulatorLib/ComponentFMUCS.cpp

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -200,15 +200,15 @@ oms::Component* oms::ComponentFMUCS::NewComponent(const oms::ComRef& cref, oms::
200200
else if (v.isOutput())
201201
{
202202
component->outputs.push_back(v);
203-
component->outputsGraph.addNode(Connector(oms_causality_output, v.getType(), v.getCref()));
203+
component->outputsGraph.addNode(Connector(oms_causality_output, v.getType(), v.getCref(), component->getFullCref()));
204204
}
205205
else if (v.isParameter())
206206
component->parameters.push_back(v);
207207
else if (v.isCalculatedParameter())
208208
component->calculatedParameters.push_back(v);
209209

210210
if (v.isInitialUnknown())
211-
component->initialUnknownsGraph.addNode(Connector(v.getCausality(), v.getType(), v.getCref()));
211+
component->initialUnknownsGraph.addNode(Connector(v.getCausality(), v.getType(), v.getCref(), component->getFullCref()));
212212

213213
component->exportVariables.push_back(v.isInput() || v.isOutput());
214214
}
@@ -220,15 +220,15 @@ oms::Component* oms::ComponentFMUCS::NewComponent(const oms::ComRef& cref, oms::
220220
int i = 1;
221221
int size = 1 + component->inputs.size();
222222
for (const auto& v : component->inputs)
223-
component->connectors.push_back(new Connector(oms_causality_input, v.getType(), v.getCref(), i++/(double)size));
223+
component->connectors.push_back(new Connector(oms_causality_input, v.getType(), v.getCref(), component->getFullCref(), i++/(double)size));
224224
i = 1;
225225
size = 1 + component->outputs.size();
226226
for (const auto& v : component->outputs)
227-
component->connectors.push_back(new Connector(oms_causality_output, v.getType(), v.getCref(), i++/(double)size));
227+
component->connectors.push_back(new Connector(oms_causality_output, v.getType(), v.getCref(), component->getFullCref(), i++/(double)size));
228228
for (const auto& v : component->parameters)
229-
component->connectors.push_back(new Connector(oms_causality_parameter, v.getType(), v.getCref()));
229+
component->connectors.push_back(new Connector(oms_causality_parameter, v.getType(), v.getCref(), component->getFullCref()));
230230
for (const auto& v : component->calculatedParameters)
231-
component->connectors.push_back(new Connector(oms_causality_calculatedParameter, v.getType(), v.getCref()));
231+
component->connectors.push_back(new Connector(oms_causality_calculatedParameter, v.getType(), v.getCref(), component->getFullCref()));
232232
component->connectors.push_back(NULL);
233233
component->element.setConnectors(&component->connectors[0]);
234234

@@ -279,7 +279,7 @@ oms::Component* oms::ComponentFMUCS::NewComponent(const pugi::xml_node& node, om
279279
// import connectors
280280
for(pugi::xml_node_iterator itConnectors = (*it).begin(); itConnectors != (*it).end(); ++itConnectors)
281281
{
282-
component->connectors.push_back(oms::Connector::NewConnector(*itConnectors, sspVersion));
282+
component->connectors.push_back(oms::Connector::NewConnector(*itConnectors, sspVersion, component->getFullCref()));
283283
}
284284
}
285285
else if(name == oms::ssp::Draft20180219::ssd::element_geometry)
@@ -376,7 +376,7 @@ oms_status_enu_t oms::ComponentFMUCS::initializeDependencyGraph_initialUnknowns(
376376
{
377377
logDebug(std::string(getCref()) + ": " + getPath() + " initial unknown " + std::string(initialUnknownsGraph.getNodes()[i]) + " depends on all");
378378
for (int j = 0; j < inputs.size(); j++)
379-
initialUnknownsGraph.addEdge(inputs[j].makeConnector(), initialUnknownsGraph.getNodes()[i]);
379+
initialUnknownsGraph.addEdge(inputs[j].makeConnector(this->getFullCref()), initialUnknownsGraph.getNodes()[i]);
380380
}
381381
return oms_status_ok;
382382
}
@@ -431,7 +431,7 @@ oms_status_enu_t oms::ComponentFMUCS::initializeDependencyGraph_initialUnknowns(
431431
{
432432
logDebug(std::string(getCref()) + ": " + getPath() + " initial unknown " + std::string(initialUnknownsGraph.getNodes()[i]) + " depends on all");
433433
for (int j = 0; j < inputs.size(); j++)
434-
initialUnknownsGraph.addEdge(inputs[j].makeConnector(), initialUnknownsGraph.getNodes()[i]);
434+
initialUnknownsGraph.addEdge(inputs[j].makeConnector(this->getFullCref()), initialUnknownsGraph.getNodes()[i]);
435435
}
436436
else
437437
{
@@ -445,7 +445,7 @@ oms_status_enu_t oms::ComponentFMUCS::initializeDependencyGraph_initialUnknowns(
445445
return oms_status_error;
446446
}
447447
logDebug(std::string(getCref()) + ": " + getPath() + " initial unknown " + std::string(initialUnknownsGraph.getNodes()[i]) + " depends on " + std::string(allVariables[dependency[j] - 1]));
448-
initialUnknownsGraph.addEdge(allVariables[dependency[j] - 1].makeConnector(), initialUnknownsGraph.getNodes()[i]);
448+
initialUnknownsGraph.addEdge(allVariables[dependency[j] - 1].makeConnector(this->getFullCref()), initialUnknownsGraph.getNodes()[i]);
449449
}
450450
}
451451
}
@@ -482,7 +482,7 @@ oms_status_enu_t oms::ComponentFMUCS::initializeDependencyGraph_outputs()
482482
{
483483
logDebug(std::string(getCref()) + ": " + getPath() + " output " + std::string(outputs[i]) + " depends on all");
484484
for (int j = 0; j < inputs.size(); j++)
485-
outputsGraph.addEdge(inputs[j].makeConnector(), outputs[i].makeConnector());
485+
outputsGraph.addEdge(inputs[j].makeConnector(this->getFullCref()), outputs[i].makeConnector(this->getFullCref()));
486486
}
487487
else
488488
{
@@ -494,7 +494,7 @@ oms_status_enu_t oms::ComponentFMUCS::initializeDependencyGraph_outputs()
494494
return logError(std::string(getCref()) + ": erroneous dependencies detected in modelDescription.xml");
495495
}
496496
logDebug(std::string(getCref()) + ": " + getPath() + " output " + std::string(outputs[i]) + " depends on " + std::string(allVariables[dependency[j] - 1]));
497-
outputsGraph.addEdge(allVariables[dependency[j] - 1].makeConnector(), outputs[i].makeConnector());
497+
outputsGraph.addEdge(allVariables[dependency[j] - 1].makeConnector(this->getFullCref()), outputs[i].makeConnector(this->getFullCref()));
498498
}
499499
}
500500
}
@@ -1222,3 +1222,12 @@ oms_status_enu_t oms::ComponentFMUCS::setFaultInjection(const oms::ComRef& signa
12221222
}
12231223
return oms_status_ok;
12241224
}
1225+
1226+
void oms::ComponentFMUCS::getFilteredSignals(std::vector<Connector>& filteredSignals) const
1227+
{
1228+
for (unsigned int i = 0; i < allVariables.size(); ++i)
1229+
{
1230+
if (exportVariables[i])
1231+
filteredSignals.push_back(allVariables[i].makeConnector(this->getFullCref()));
1232+
}
1233+
}

src/OMSimulatorLib/ComponentFMUCS.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,8 @@ namespace oms
107107

108108
oms_status_enu_t setFaultInjection(const ComRef& signal, oms_fault_type_enu_t faultType, double faultValue);
109109

110+
void getFilteredSignals(std::vector<Connector>& filteredSignals) const;
111+
110112
protected:
111113
ComponentFMUCS(const ComRef& cref, System* parentSystem, const std::string& fmuPath);
112114

src/OMSimulatorLib/ComponentFMUME.cpp

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -202,15 +202,15 @@ oms::Component* oms::ComponentFMUME::NewComponent(const oms::ComRef& cref, oms::
202202
else if (v.isOutput())
203203
{
204204
component->outputs.push_back(v);
205-
component->outputsGraph.addNode(Connector(oms_causality_output, v.getType(), v.getCref()));
205+
component->outputsGraph.addNode(Connector(oms_causality_output, v.getType(), v.getCref(), component->getFullCref()));
206206
}
207207
else if (v.isParameter())
208208
component->parameters.push_back(v);
209209
else if (v.isCalculatedParameter())
210210
component->calculatedParameters.push_back(v);
211211

212212
if (v.isInitialUnknown())
213-
component->initialUnknownsGraph.addNode(Connector(v.getCausality(), v.getType(), v.getCref()));
213+
component->initialUnknownsGraph.addNode(Connector(v.getCausality(), v.getType(), v.getCref(), component->getFullCref()));
214214

215215
component->exportVariables.push_back(v.isInput() || v.isOutput());
216216
}
@@ -222,15 +222,15 @@ oms::Component* oms::ComponentFMUME::NewComponent(const oms::ComRef& cref, oms::
222222
int i = 1;
223223
int size = 1 + component->inputs.size();
224224
for (const auto& v : component->inputs)
225-
component->connectors.push_back(new Connector(oms_causality_input, v.getType(), v.getCref(), i++/(double)size));
225+
component->connectors.push_back(new Connector(oms_causality_input, v.getType(), v.getCref(), component->getFullCref(), i++/(double)size));
226226
i = 1;
227227
size = 1 + component->outputs.size();
228228
for (const auto& v : component->outputs)
229-
component->connectors.push_back(new Connector(oms_causality_output, v.getType(), v.getCref(), i++/(double)size));
229+
component->connectors.push_back(new Connector(oms_causality_output, v.getType(), v.getCref(), component->getFullCref(), i++/(double)size));
230230
for (const auto& v : component->parameters)
231-
component->connectors.push_back(new Connector(oms_causality_parameter, v.getType(), v.getCref()));
231+
component->connectors.push_back(new Connector(oms_causality_parameter, v.getType(), v.getCref(), component->getFullCref()));
232232
for (const auto& v : component->calculatedParameters)
233-
component->connectors.push_back(new Connector(oms_causality_calculatedParameter, v.getType(), v.getCref()));
233+
component->connectors.push_back(new Connector(oms_causality_calculatedParameter, v.getType(), v.getCref(), component->getFullCref()));
234234
component->connectors.push_back(NULL);
235235
component->element.setConnectors(&component->connectors[0]);
236236

@@ -281,7 +281,7 @@ oms::Component* oms::ComponentFMUME::NewComponent(const pugi::xml_node& node, om
281281
// import connectors
282282
for(pugi::xml_node_iterator itConnectors = (*it).begin(); itConnectors != (*it).end(); ++itConnectors)
283283
{
284-
component->connectors.push_back(oms::Connector::NewConnector(*itConnectors, sspVersion));
284+
component->connectors.push_back(oms::Connector::NewConnector(*itConnectors, sspVersion, component->getFullCref()));
285285
}
286286
}
287287
else if(name == oms::ssp::Draft20180219::ssd::element_geometry)
@@ -378,7 +378,7 @@ oms_status_enu_t oms::ComponentFMUME::initializeDependencyGraph_initialUnknowns(
378378
{
379379
logDebug(std::string(getCref()) + ": " + getPath() + " initial unknown " + std::string(initialUnknownsGraph.getNodes()[i]) + " depends on all");
380380
for (int j = 0; j < inputs.size(); j++)
381-
initialUnknownsGraph.addEdge(inputs[j].makeConnector(), initialUnknownsGraph.getNodes()[i]);
381+
initialUnknownsGraph.addEdge(inputs[j].makeConnector(this->getFullCref()), initialUnknownsGraph.getNodes()[i]);
382382
}
383383
return oms_status_ok;
384384
}
@@ -432,7 +432,7 @@ oms_status_enu_t oms::ComponentFMUME::initializeDependencyGraph_initialUnknowns(
432432
{
433433
logDebug(std::string(getCref()) + ": " + getPath() + " initial unknown " + std::string(initialUnknownsGraph.getNodes()[i]) + " depends on all");
434434
for (int j = 0; j < inputs.size(); j++)
435-
initialUnknownsGraph.addEdge(inputs[j].makeConnector(), initialUnknownsGraph.getNodes()[i]);
435+
initialUnknownsGraph.addEdge(inputs[j].makeConnector(this->getFullCref()), initialUnknownsGraph.getNodes()[i]);
436436
}
437437
else
438438
{
@@ -446,7 +446,7 @@ oms_status_enu_t oms::ComponentFMUME::initializeDependencyGraph_initialUnknowns(
446446
return oms_status_error;
447447
}
448448
logDebug(std::string(getCref()) + ": " + getPath() + " initial unknown " + std::string(initialUnknownsGraph.getNodes()[i]) + " depends on " + std::string(allVariables[dependency[j] - 1]));
449-
initialUnknownsGraph.addEdge(allVariables[dependency[j] - 1].makeConnector(), initialUnknownsGraph.getNodes()[i]);
449+
initialUnknownsGraph.addEdge(allVariables[dependency[j] - 1].makeConnector(this->getFullCref()), initialUnknownsGraph.getNodes()[i]);
450450
}
451451
}
452452
}
@@ -483,7 +483,7 @@ oms_status_enu_t oms::ComponentFMUME::initializeDependencyGraph_outputs()
483483
{
484484
logDebug(std::string(getCref()) + ": " + getPath() + " output " + std::string(outputs[i]) + " depends on all");
485485
for (int j = 0; j < inputs.size(); j++)
486-
outputsGraph.addEdge(inputs[j].makeConnector(), outputs[i].makeConnector());
486+
outputsGraph.addEdge(inputs[j].makeConnector(this->getFullCref()), outputs[i].makeConnector(this->getFullCref()));
487487
}
488488
else
489489
{
@@ -495,7 +495,7 @@ oms_status_enu_t oms::ComponentFMUME::initializeDependencyGraph_outputs()
495495
return logError(std::string(getCref()) + ": erroneous dependencies detected in modelDescription.xml");
496496
}
497497
logDebug(std::string(getCref()) + ": " + getPath() + " output " + std::string(outputs[i]) + " depends on " + std::string(allVariables[dependency[j] - 1]));
498-
outputsGraph.addEdge(allVariables[dependency[j] - 1].makeConnector(), outputs[i].makeConnector());
498+
outputsGraph.addEdge(allVariables[dependency[j] - 1].makeConnector(this->getFullCref()), outputs[i].makeConnector(this->getFullCref()));
499499
}
500500
}
501501
}
@@ -1183,3 +1183,12 @@ oms_status_enu_t oms::ComponentFMUME::setFaultInjection(const oms::ComRef& signa
11831183
}
11841184
return oms_status_ok;
11851185
}
1186+
1187+
void oms::ComponentFMUME::getFilteredSignals(std::vector<Connector>& filteredSignals) const
1188+
{
1189+
for (unsigned int i = 0; i < allVariables.size(); ++i)
1190+
{
1191+
if (exportVariables[i])
1192+
filteredSignals.push_back(allVariables[i].makeConnector(this->getFullCref()));
1193+
}
1194+
}

src/OMSimulatorLib/ComponentFMUME.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ namespace oms
104104

105105
oms_status_enu_t setFaultInjection(const ComRef& signal, oms_fault_type_enu_t faultType, double faultValue);
106106

107+
void getFilteredSignals(std::vector<Connector>& filteredSignals) const;
108+
107109
protected:
108110
ComponentFMUME(const ComRef& cref, System* parentSystem, const std::string& fmuPath);
109111

src/OMSimulatorLib/ComponentTable.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ oms::Component* oms::ComponentTable::NewComponent(const oms::ComRef& cref, oms::
9696
for (auto const &signal : component->resultReader->getAllSignals())
9797
{
9898
component->exportSeries[ComRef(signal)] = true;
99-
component->connectors.back() = new Connector(oms_causality_output, oms_signal_type_real, ComRef(signal), i++/(double)size);
99+
component->connectors.back() = new Connector(oms_causality_output, oms_signal_type_real, ComRef(signal), component->getFullCref(), i++/(double)size);
100100
component->connectors.push_back(NULL);
101101
}
102102
component->element.setConnectors(&component->connectors[0]);
@@ -137,7 +137,7 @@ oms::Component* oms::ComponentTable::NewComponent(const pugi::xml_node& node, om
137137
// import connectors
138138
for(pugi::xml_node_iterator itConnectors = (*it).begin(); itConnectors != (*it).end(); ++itConnectors)
139139
{
140-
component->connectors.push_back(oms::Connector::NewConnector(*itConnectors, sspVersion));
140+
component->connectors.push_back(oms::Connector::NewConnector(*itConnectors, sspVersion, component->getFullCref()));
141141
component->exportSeries[component->connectors.back()->getName()] = true;
142142
}
143143
}
@@ -381,3 +381,12 @@ oms_status_enu_t oms::ComponentTable::restoreState()
381381
time = storedTime;
382382
return oms_status_ok;
383383
}
384+
385+
void oms::ComponentTable::getFilteredSignals(std::vector<Connector>& filteredSignals) const
386+
{
387+
for (auto& x: exportSeries)
388+
{
389+
if (x.second)
390+
filteredSignals.push_back(Connector(oms_causality_output, oms_signal_type_real, x.first, this->getFullCref()));
391+
}
392+
}

0 commit comments

Comments
 (0)