Changeset 1d1e10b in OpenModelica


Ignore:
Timestamp:
2015-02-24T12:25:03+01:00 (9 years ago)
Author:
Lennart Ochel <lennart.ochel@…>
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
Message:
  • fix initialization of state machines

git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@24736 f25d12d1-65f4-0310-ae8a-bbce733d8d8e

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Compiler/BackEnd/StateMachineFeatures.mo

    r5c429bd r1d1e10b  
    362362    // Boolean preRef.init(start=true) = false
    363363    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);
    365365    initVar := BackendVariable.setVarStartValue(initVar, DAE.BCONST(true));
    366366    initVar := BackendVariable.setVarFixed(initVar, true);
     
    835835  // FIXME Use name that cannot possible conflict with user variable (or is .active reserved for state machines?)
    836836  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);
    838838
    839839  // stateRef.active := SMS_PRE.initialState.active and (SMS_PRE.initialState.activeState==i)
     
    10081008  //List.map_0(c,ExpressionDump.dumpExp);
    10091009
    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);
    10121012  knowns := {};
    10131013  vars := {};
     
    10891089    cRefs := arrayUpdate(cRefs, i, qCref("c", tArrayBool, {DAE.INDEX(DAE.ICONST(i))}, preRef));
    10901090    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));
    10931093    // TODO Binding probably needs to be turned into a proper equation. Done below
    10941094    // cVars := arrayUpdate(cVars, i, BackendVariable.setBindExp(arrayGet(cVars,i), SOME(exp)));
     
    10981098  //input Boolean active "true if the state machine is active";
    10991099  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);
    11011101  vars := activeVar :: vars;
    11021102  //input Boolean reset "true when the state machine should be reset";
    11031103  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);
    11051105  vars := resetVar :: vars;
    11061106  //Integer selectedState
    11071107  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);
    11091109  vars := selectedStateVar :: vars;
    11101110  //Boolean selectedReset
    11111111  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);
    11131113  vars := selectedResetVar :: vars;
    11141114  // Integer fired
    11151115  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);
    11171117  vars := firedVar :: vars;
    11181118  // output Integer activeState
    11191119  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);
    11211121  vars := activeStateVar :: vars;
    11221122  // output Boolean activeReset
    11231123  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);
    11251125  vars := activeResetVar :: vars;
    11261126  // Integer nextState
    11271127  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);
    11291129  vars := nextStateVar :: vars;
    11301130  // Boolean nextReset
    11311131  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);
    11331133  vars := nextResetVar :: vars;
    11341134  //output Boolean activeResetStates[nStates]
     
    11371137  for i in 1:nStates loop
    11381138    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));
    11401140    vars := arrayGet(activeResetStatesVars, i) :: vars;
    11411141  end for;
     
    11451145  for i in 1:nStates loop
    11461146    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));
    11481148    vars := arrayGet(nextResetStatesVars, i) :: vars;
    11491149  end for;
     
    11531153  for i in 1:nStates loop
    11541154    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));
    11561156    vars := arrayGet(finalStatesVars, i) :: vars;
    11571157  end for;
    11581158  // Boolean stateMachineInFinalState
    11591159  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);
    11611161  vars := stateMachineInFinalStateVar :: vars;
    11621162
     
    25522552    scalar := Expression.traverseExp(scalar, subsPreForPrevious, NONE());
    25532553    // 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)});
    25552555    whenEquation := BackendDAE.WHEN_EQ(expCond, left, scalar, NONE());
    25562556    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.