Changeset 1d1e10b in OpenModelica
- Timestamp:
- 2015-02-24T12:25:03+01:00 (9 years ago)
- Branches:
- Added-citation-metadata, maintenance/v1.14, maintenance/v1.15, maintenance/v1.16, maintenance/v1.17, maintenance/v1.18, maintenance/v1.19, maintenance/v1.20, maintenance/v1.21, maintenance/v1.22, maintenance/v1.23, master, omlib-staging
- Children:
- 6f47d5a0
- Parents:
- e39faa2
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Compiler/BackEnd/StateMachineFeatures.mo
r5c429bd r1d1e10b 362 362 // Boolean preRef.init(start=true) = false 363 363 initRef := qCref("init", DAE.T_BOOL_DEFAULT, {}, preRef); 364 initVar := createVarWithDefaults(initRef, BackendDAE. VARIABLE(), DAE.T_BOOL_DEFAULT);364 initVar := createVarWithDefaults(initRef, BackendDAE.DISCRETE(), DAE.T_BOOL_DEFAULT); 365 365 initVar := BackendVariable.setVarStartValue(initVar, DAE.BCONST(true)); 366 366 initVar := BackendVariable.setVarFixed(initVar, true); … … 835 835 // FIXME Use name that cannot possible conflict with user variable (or is .active reserved for state machines?) 836 836 activePlotIndicatorRef := qCref("active", DAE.T_BOOL_DEFAULT, {}, stateRef); 837 activePlotIndicatorVar := createVarWithDefaults(activePlotIndicatorRef, BackendDAE. VARIABLE(), DAE.T_BOOL_DEFAULT);837 activePlotIndicatorVar := createVarWithDefaults(activePlotIndicatorRef, BackendDAE.DISCRETE(), DAE.T_BOOL_DEFAULT); 838 838 839 839 // stateRef.active := SMS_PRE.initialState.active and (SMS_PRE.initialState.activeState==i) … … 1008 1008 //List.map_0(c,ExpressionDump.dumpExp); 1009 1009 1010 defaultIntVar := createVarWithDefaults(ComponentReference.makeDummyCref(), BackendDAE. VARIABLE(), DAE.T_INTEGER_DEFAULT);1011 defaultBoolVar := createVarWithDefaults(ComponentReference.makeDummyCref(), BackendDAE. VARIABLE(), DAE.T_BOOL_DEFAULT);1010 defaultIntVar := createVarWithDefaults(ComponentReference.makeDummyCref(), BackendDAE.DISCRETE(), DAE.T_INTEGER_DEFAULT); 1011 defaultBoolVar := createVarWithDefaults(ComponentReference.makeDummyCref(), BackendDAE.DISCRETE(), DAE.T_BOOL_DEFAULT); 1012 1012 knowns := {}; 1013 1013 vars := {}; … … 1089 1089 cRefs := arrayUpdate(cRefs, i, qCref("c", tArrayBool, {DAE.INDEX(DAE.ICONST(i))}, preRef)); 1090 1090 cImmediateRefs := arrayUpdate(cImmediateRefs, i, qCref("cImmediate", tArrayBool, {DAE.INDEX(DAE.ICONST(i))}, preRef)); 1091 cVars := arrayUpdate(cVars, i, createVarWithDefaults(arrayGet(cRefs,i), BackendDAE. VARIABLE(), DAE.T_BOOL_DEFAULT));1092 cImmediateVars := arrayUpdate(cImmediateVars, i, createVarWithDefaults(arrayGet(cImmediateRefs,i), BackendDAE. VARIABLE(), DAE.T_BOOL_DEFAULT));1091 cVars := arrayUpdate(cVars, i, createVarWithDefaults(arrayGet(cRefs,i), BackendDAE.DISCRETE(), DAE.T_BOOL_DEFAULT)); 1092 cImmediateVars := arrayUpdate(cImmediateVars, i, createVarWithDefaults(arrayGet(cImmediateRefs,i), BackendDAE.DISCRETE(), DAE.T_BOOL_DEFAULT)); 1093 1093 // TODO Binding probably needs to be turned into a proper equation. Done below 1094 1094 // cVars := arrayUpdate(cVars, i, BackendVariable.setBindExp(arrayGet(cVars,i), SOME(exp))); … … 1098 1098 //input Boolean active "true if the state machine is active"; 1099 1099 activeRef := qCref("active", DAE.T_BOOL_DEFAULT, {}, preRef); 1100 activeVar := createVarWithDefaults(activeRef, BackendDAE. VARIABLE(), DAE.T_BOOL_DEFAULT);1100 activeVar := createVarWithDefaults(activeRef, BackendDAE.DISCRETE(), DAE.T_BOOL_DEFAULT); 1101 1101 vars := activeVar :: vars; 1102 1102 //input Boolean reset "true when the state machine should be reset"; 1103 1103 resetRef := qCref("reset", DAE.T_BOOL_DEFAULT, {}, preRef); 1104 resetVar := createVarWithDefaults(resetRef, BackendDAE. VARIABLE(), DAE.T_BOOL_DEFAULT);1104 resetVar := createVarWithDefaults(resetRef, BackendDAE.DISCRETE(), DAE.T_BOOL_DEFAULT); 1105 1105 vars := resetVar :: vars; 1106 1106 //Integer selectedState 1107 1107 selectedStateRef := qCref("selectedState", DAE.T_INTEGER_DEFAULT, {}, preRef); 1108 selectedStateVar := createVarWithDefaults(selectedStateRef, BackendDAE. VARIABLE(), DAE.T_INTEGER_DEFAULT);1108 selectedStateVar := createVarWithDefaults(selectedStateRef, BackendDAE.DISCRETE(), DAE.T_INTEGER_DEFAULT); 1109 1109 vars := selectedStateVar :: vars; 1110 1110 //Boolean selectedReset 1111 1111 selectedResetRef := qCref("selectedReset", DAE.T_BOOL_DEFAULT, {}, preRef); 1112 selectedResetVar := createVarWithDefaults(selectedResetRef, BackendDAE. VARIABLE(), DAE.T_BOOL_DEFAULT);1112 selectedResetVar := createVarWithDefaults(selectedResetRef, BackendDAE.DISCRETE(), DAE.T_BOOL_DEFAULT); 1113 1113 vars := selectedResetVar :: vars; 1114 1114 // Integer fired 1115 1115 firedRef := qCref("fired", DAE.T_INTEGER_DEFAULT, {}, preRef); 1116 firedVar := createVarWithDefaults(firedRef, BackendDAE. VARIABLE(), DAE.T_INTEGER_DEFAULT);1116 firedVar := createVarWithDefaults(firedRef, BackendDAE.DISCRETE(), DAE.T_INTEGER_DEFAULT); 1117 1117 vars := firedVar :: vars; 1118 1118 // output Integer activeState 1119 1119 activeStateRef := qCref("activeState", DAE.T_INTEGER_DEFAULT, {}, preRef); 1120 activeStateVar := createVarWithDefaults(activeStateRef, BackendDAE. VARIABLE(), DAE.T_INTEGER_DEFAULT);1120 activeStateVar := createVarWithDefaults(activeStateRef, BackendDAE.DISCRETE(), DAE.T_INTEGER_DEFAULT); 1121 1121 vars := activeStateVar :: vars; 1122 1122 // output Boolean activeReset 1123 1123 activeResetRef := qCref("activeReset", DAE.T_BOOL_DEFAULT, {}, preRef); 1124 activeResetVar := createVarWithDefaults(activeResetRef, BackendDAE. VARIABLE(), DAE.T_BOOL_DEFAULT);1124 activeResetVar := createVarWithDefaults(activeResetRef, BackendDAE.DISCRETE(), DAE.T_BOOL_DEFAULT); 1125 1125 vars := activeResetVar :: vars; 1126 1126 // Integer nextState 1127 1127 nextStateRef := qCref("nextState", DAE.T_INTEGER_DEFAULT, {}, preRef); 1128 nextStateVar := createVarWithDefaults(nextStateRef, BackendDAE. VARIABLE(), DAE.T_INTEGER_DEFAULT);1128 nextStateVar := createVarWithDefaults(nextStateRef, BackendDAE.DISCRETE(), DAE.T_INTEGER_DEFAULT); 1129 1129 vars := nextStateVar :: vars; 1130 1130 // Boolean nextReset 1131 1131 nextResetRef := qCref("nextReset", DAE.T_BOOL_DEFAULT, {}, preRef); 1132 nextResetVar := createVarWithDefaults(nextResetRef, BackendDAE. VARIABLE(), DAE.T_BOOL_DEFAULT);1132 nextResetVar := createVarWithDefaults(nextResetRef, BackendDAE.DISCRETE(), DAE.T_BOOL_DEFAULT); 1133 1133 vars := nextResetVar :: vars; 1134 1134 //output Boolean activeResetStates[nStates] … … 1137 1137 for i in 1:nStates loop 1138 1138 activeResetStatesRefs := arrayUpdate(activeResetStatesRefs, i, qCref("activeResetStates", tArrayBool, {DAE.INDEX(DAE.ICONST(i))}, preRef)); 1139 activeResetStatesVars := arrayUpdate(activeResetStatesVars, i, createVarWithDefaults(arrayGet(activeResetStatesRefs,i), BackendDAE. VARIABLE(), DAE.T_BOOL_DEFAULT));1139 activeResetStatesVars := arrayUpdate(activeResetStatesVars, i, createVarWithDefaults(arrayGet(activeResetStatesRefs,i), BackendDAE.DISCRETE(), DAE.T_BOOL_DEFAULT)); 1140 1140 vars := arrayGet(activeResetStatesVars, i) :: vars; 1141 1141 end for; … … 1145 1145 for i in 1:nStates loop 1146 1146 nextResetStatesRefs := arrayUpdate(nextResetStatesRefs, i, qCref("nextResetStates", tArrayBool, {DAE.INDEX(DAE.ICONST(i))}, preRef)); 1147 nextResetStatesVars := arrayUpdate(nextResetStatesVars, i, createVarWithDefaults(arrayGet(nextResetStatesRefs,i), BackendDAE. VARIABLE(), DAE.T_BOOL_DEFAULT));1147 nextResetStatesVars := arrayUpdate(nextResetStatesVars, i, createVarWithDefaults(arrayGet(nextResetStatesRefs,i), BackendDAE.DISCRETE(), DAE.T_BOOL_DEFAULT)); 1148 1148 vars := arrayGet(nextResetStatesVars, i) :: vars; 1149 1149 end for; … … 1153 1153 for i in 1:nStates loop 1154 1154 finalStatesRefs := arrayUpdate(finalStatesRefs, i, qCref("finalStates", tArrayBool, {DAE.INDEX(DAE.ICONST(i))}, preRef)); 1155 finalStatesVars := arrayUpdate(finalStatesVars, i, createVarWithDefaults(arrayGet(finalStatesRefs,i), BackendDAE. VARIABLE(), DAE.T_BOOL_DEFAULT));1155 finalStatesVars := arrayUpdate(finalStatesVars, i, createVarWithDefaults(arrayGet(finalStatesRefs,i), BackendDAE.DISCRETE(), DAE.T_BOOL_DEFAULT)); 1156 1156 vars := arrayGet(finalStatesVars, i) :: vars; 1157 1157 end for; 1158 1158 // Boolean stateMachineInFinalState 1159 1159 stateMachineInFinalStateRef := qCref("stateMachineInFinalState", DAE.T_BOOL_DEFAULT, {}, preRef); 1160 stateMachineInFinalStateVar := createVarWithDefaults(stateMachineInFinalStateRef, BackendDAE. VARIABLE(), DAE.T_BOOL_DEFAULT);1160 stateMachineInFinalStateVar := createVarWithDefaults(stateMachineInFinalStateRef, BackendDAE.DISCRETE(), DAE.T_BOOL_DEFAULT); 1161 1161 vars := stateMachineInFinalStateVar :: vars; 1162 1162 … … 2552 2552 scalar := Expression.traverseExp(scalar, subsPreForPrevious, NONE()); 2553 2553 // sample(0, samplingTime) 2554 expCond := DAE. CALL(Absyn.IDENT("sample"), {DAE.ICONST(1), DAE.RCONST(0), DAE.RCONST(samplingTime)}, DAE.callAttrBuiltinImpureBool);2554 expCond := DAE.ARRAY(DAE.T_ARRAY_BOOL_NODIM, true, {DAE.CALL(Absyn.IDENT("sample"), {DAE.ICONST(1), DAE.RCONST(0), DAE.RCONST(samplingTime)}, DAE.callAttrBuiltinImpureBool),DAE.CALL(Absyn.IDENT("initial"), {}, DAE.callAttrBuiltinImpureBool)}); 2555 2555 whenEquation := BackendDAE.WHEN_EQ(expCond, left, scalar, NONE()); 2556 2556 size := 1; // Fixme what is "size" for? does it reference the "sample index" of a corresponding (time)event BackendDAE.Shared.eventInfo.timeEvents
Note: See TracChangeset
for help on using the changeset viewer.