modelChatteringControl"A control strategy that will 'chatter'"typeHeatCapacitance=Real(unit="J/K");typeTemperature=Real(unit="K");typeHeat=Real(unit="W");typeMass=Real(unit="kg");typeHeatTransferCoefficient=Real(unit="W/K");Booleanheat"Indicates whether heater is on";parameterHeatCapacitanceC=1.0;parameterHeatTransferCoefficienth=2.0;parameterHeatQcapacity=25.0;parameterTemperatureTamb=285;parameterTemperatureTbar=295;TemperatureT;HeatQ;initialequationT=Tbar+5;equationheat=T<Tbar;Q=ifheatthenQcapacityelse0;C*der(T)=Q-h*(T-Tamb);endChatteringControl;
模拟滞后现象的难点在于它具有“状态性”。系统的行为取决于过去发生的事情。因此,我们不能简单地使用
if 语句。原因在于 if 语句只考虑系统的当前状态,而不会考虑其他因素。为了实现滞后效应,我们需要使用
when 语句。请看下面的模型:
modelHysteresisControl"A control strategy that doesn't chatter"typeHeatCapacitance=Real(unit="J/K");typeTemperature=Real(unit="K");typeHeat=Real(unit="W");typeMass=Real(unit="kg");typeHeatTransferCoefficient=Real(unit="W/K");Booleanheat(start=false)"Indicates whether heater is on";parameterHeatCapacitanceC=1.0;parameterHeatTransferCoefficienth=2.0;parameterHeatQcapacity=25.0;parameterTemperatureTamb=285;parameterTemperatureTbar=295;TemperatureT;HeatQ;initialequationT=Tbar+5;heat=false;equationQ=ifheatthenQcapacityelse0;C*der(T)=Q-h*(T-Tamb);when{T>Tbar+1,T<Tbar-1}thenheat=T<Tbar;endwhen;endHysteresisControl;
modelHysteresisControlWithAlgorithms"Control using algorithms"typeHeatCapacitance=Real(unit="J/K");typeTemperature=Real(unit="K");typeHeat=Real(unit="W");typeMass=Real(unit="kg");typeHeatTransferCoefficient=Real(unit="W/K");Booleanheat"Indicates whether heater is on";parameterHeatCapacitanceC=1.0;parameterHeatTransferCoefficienth=2.0;parameterHeatQcapacity=25.0;parameterTemperatureTamb=285;parameterTemperatureTbar=295;TemperatureT;HeatQ;initialequationT=Tbar+5;heat=false;equationQ=ifheatthenQcapacityelse0;C*der(T)=Q-h*(T-Tamb);algorithmwhenT<Tbar-1thenheat:=true;endwhen;whenT>Tbar+1thenheat:=false;endwhen;endHysteresisControlWithAlgorithms;