Skip to content

Commit 5ca5968

Browse files
restenbeidekrist
authored andcommitted
Feature/212 provide overview of modified variables (#94)
* #212 Initial commit for server branch * #212 Add manipulated variables to JsonResponse * #212 Fixed server duplication issue when appending to array * #212 Actually commit latest code for hungry reviewers * #212 C API change * Following up my own review comments
1 parent c27588f commit 5ca5968

File tree

2 files changed

+57
-14
lines changed

2 files changed

+57
-14
lines changed

cse/cse.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,41 @@ func addVariableMetadata(execution *C.cse_execution, fmu *structs.FMU) error {
364364
return nil
365365
}
366366

367+
func fetchManipulatedVariables(execution *C.cse_execution) []structs.ManipulatedVariable {
368+
nVars := int(C.cse_get_num_modified_variables(execution))
369+
if nVars <= 0 {
370+
return nil
371+
}
372+
373+
var variables = make([]C.cse_variable_id, nVars)
374+
numVars := int(C.cse_get_modified_variables(execution, &variables[0], C.size_t(nVars)))
375+
376+
if numVars < 0 {
377+
log.Println("Error while fetching modified variables: ", lastErrorMessage())
378+
return nil
379+
}
380+
381+
var varStructs = make([]structs.ManipulatedVariable, numVars)
382+
for n, variable := range variables[0:numVars] {
383+
slaveIndex := int(variable.slave_index)
384+
valueReference := int(variable.variable_index)
385+
variableType, err := parseType(variable._type)
386+
387+
if err != nil {
388+
log.Println("Problem parsing variable type: ", variable._type)
389+
return nil
390+
}
391+
392+
varStructs[n] = structs.ManipulatedVariable{
393+
slaveIndex,
394+
variableType,
395+
valueReference,
396+
}
397+
}
398+
399+
return varStructs
400+
}
401+
367402
func simulationTeardown(sim *Simulation) (bool, string) {
368403
executionDestroy(sim.Execution)
369404
observerDestroy(sim.Observer)
@@ -658,6 +693,7 @@ func GenerateJsonResponse(status *structs.SimulationStatus, sim *Simulation, fee
658693
response.Module = findModuleData(status, sim.MetaData, sim.Observer)
659694
response.ConfigDir = status.ConfigDir
660695
response.Trends = status.Trends
696+
response.ManipulatedVariables = fetchManipulatedVariables(sim.Execution)
661697
if sim.ScenarioManager != nil && isScenarioRunning(sim.ScenarioManager) {
662698
response.RunningScenario = status.CurrentScenario
663699
}

structs/structs.go

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,28 @@ type Module struct {
1212
Name string `json:"name,omitempty"`
1313
}
1414

15+
type ManipulatedVariable struct {
16+
SlaveIndex int `json:"slaveIndex"`
17+
Type string `json:"type"`
18+
ValueReference int `json:"valueReference"`
19+
}
20+
1521
type JsonResponse struct {
16-
Loaded bool `json:"loaded"`
17-
SimulationTime float64 `json:"time"`
18-
RealTimeFactor float64 `json:"realTimeFactor"`
19-
RealTimeFactorTarget float64 `json:"realTimeFactorTarget"`
20-
IsRealTimeSimulation bool `json:"isRealTime"`
21-
ConfigDir string `json:"configDir,omitempty"`
22-
Status string `json:"status,omitempty"`
23-
Module Module `json:"module,omitempty"`
24-
Trends []Trend `json:"trends"`
25-
ModuleData *MetaData `json:"module-data,omitempty"`
26-
Feedback *CommandFeedback `json:"feedback,omitempy"`
27-
Scenarios *[]string `json:"scenarios,omitempty"`
28-
Scenario *interface{} `json:"scenario,omitempty"`
29-
RunningScenario string `json:"running-scenario"`
22+
Loaded bool `json:"loaded"`
23+
SimulationTime float64 `json:"time"`
24+
RealTimeFactor float64 `json:"realTimeFactor"`
25+
RealTimeFactorTarget float64 `json:"realTimeFactorTarget"`
26+
IsRealTimeSimulation bool `json:"isRealTime"`
27+
ConfigDir string `json:"configDir,omitempty"`
28+
Status string `json:"status,omitempty"`
29+
Module Module `json:"module,omitempty"`
30+
Trends []Trend `json:"trends"`
31+
ModuleData *MetaData `json:"module-data,omitempty"`
32+
Feedback *CommandFeedback `json:"feedback,omitempy"`
33+
Scenarios *[]string `json:"scenarios,omitempty"`
34+
Scenario *interface{} `json:"scenario,omitempty"`
35+
RunningScenario string `json:"running-scenario"`
36+
ManipulatedVariables []ManipulatedVariable `json:"manipulatedVariables"`
3037
}
3138

3239
type TrendSignal struct {

0 commit comments

Comments
 (0)