Skip to content
This repository was archived by the owner on May 18, 2019. It is now read-only.

Commit 36778dd

Browse files
lochelOpenModelica-Hudson
authored andcommitted
Add unit information to mat files
Belonging to [master]: - #1952
1 parent a981b37 commit 36778dd

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

SimulationRuntime/c/simulation/results/simulation_result_mat4.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,9 +112,12 @@ void mat4_init4(simulation_result *self, DATA *data, threadData_t *threadData)
112112

113113
for (int i=0; i < mData->nVariablesReal; i++)
114114
if (!mData->realVarsData[i].filterOutput) {
115+
const char *unitStr = MMC_STRINGDATA(mData->realVarsData[i].attribute.unit);
116+
size_t unitLength = unitStr ? strlen(unitStr) + 3 : 0;
117+
115118
len = strlen(mData->realVarsData[i].info.name) + 1;
116119
if (len > maxLengthName) maxLengthName = len;
117-
len = strlen(mData->realVarsData[i].info.comment) + 1;
120+
len = strlen(mData->realVarsData[i].info.comment) + 1 + unitLength;
118121
if (len > maxLengthDesc) maxLengthDesc = len;
119122
matData->nSignals++;
120123
}
@@ -222,8 +225,19 @@ void mat4_init4(simulation_result *self, DATA *data, threadData_t *threadData)
222225

223226
for (int i=0; i < mData->nVariablesReal; i++)
224227
if (!mData->realVarsData[i].filterOutput) {
228+
const char *unitStr = MMC_STRINGDATA(mData->realVarsData[i].attribute.unit);
229+
size_t unitLength = unitStr ? strlen(unitStr) : 0;
230+
225231
memcpy((uint8_t*)name + maxLengthName * cur, mData->realVarsData[i].info.name, strlen(mData->realVarsData[i].info.name));
226232
memcpy((uint8_t*)description + maxLengthDesc * cur, mData->realVarsData[i].info.comment, strlen(mData->realVarsData[i].info.comment));
233+
// unit information
234+
if (unitLength > 0)
235+
{
236+
memcpy((uint8_t*)description + maxLengthDesc * cur + strlen(mData->realVarsData[i].info.comment) + 2, unitStr, unitLength);
237+
((uint8_t*)description)[maxLengthDesc * cur + strlen(mData->realVarsData[i].info.comment) + 0] = ' ';
238+
((uint8_t*)description)[maxLengthDesc * cur + strlen(mData->realVarsData[i].info.comment) + 1] = '[';
239+
((uint8_t*)description)[maxLengthDesc * cur + strlen(mData->realVarsData[i].info.comment) + 2 + unitLength] = ']';
240+
}
227241
cur++;
228242
}
229243

SimulationRuntime/c/simulation/simulation_input_xml.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,12 +374,15 @@ static void read_var_info(omc_ScalarVariable *v, VAR_INFO *info)
374374

375375
static void read_var_attribute_real(omc_ScalarVariable *v, REAL_ATTRIBUTE *attribute)
376376
{
377+
const char *unit = NULL;
377378
read_value_real(findHashStringStringEmpty(v,"start"), &(attribute->start), 0.0);
378379
read_value_bool(findHashStringString(v,"fixed"), (modelica_boolean*)&(attribute->fixed));
379380
read_value_bool(findHashStringString(v,"useNominal"), (modelica_boolean*)&(attribute->useNominal));
380381
read_value_real(findHashStringStringEmpty(v,"nominal"), &(attribute->nominal), 1.0);
381382
read_value_real(findHashStringStringEmpty(v,"min"), &(attribute->min), REAL_MIN);
382383
read_value_real(findHashStringStringEmpty(v,"max"), &(attribute->max), REAL_MAX);
384+
read_value_string(findHashStringStringEmpty(v,"unit"), &unit);
385+
attribute->unit = mmc_mk_scon_persist(unit);
383386

384387
infoStreamPrint(LOG_DEBUG, 0, "Real %s(start=%g, fixed=%s, %snominal=%g%s, min=%g, max=%g)", findHashStringString(v,"name"), attribute->start, (attribute->fixed)?"true":"false", (attribute->useNominal)?"":"{", attribute->nominal, attribute->useNominal?"":"}", attribute->min, attribute->max);
385388
}

0 commit comments

Comments
 (0)