public class LevelCrossingDetector extends TypedAtomicActor implements ContinuousStepSizeController
This actor has a one microstep delay before it will produce an output. That is, when a level crossing is detected, the actor requests a refiring in the next microstep at the current time, and only in that refiring produces the output. This ensures that the output satisfies the piecewise continuity constraint. It is always absent at microstep 0.
This actor will not produce an event at the time of the first firing unless there is a level crossing discontinuity at that time.
Red (hyzheng) |
Yellow (hyzheng) |
Entity.ContainedObjectsIterator
Modifier and Type | Field and Description |
---|---|
protected double |
_level
The level threshold this actor detects.
|
StringParameter |
direction
A parameter that can be used to limit the detected level crossings
to rising or falling.
|
Parameter |
errorTolerance
The error tolerance specifying how close the value of a continuous
input needs to be to the specified level to produce the output event.
|
Parameter |
level
The parameter that specifies the level threshold.
|
TypedIOPort |
output
The output port.
|
TypedIOPort |
trigger
The trigger port.
|
Parameter |
value
The output value to produce when a level-crossing is detected.
|
_typesValid
_actorFiringListeners, _initializables, _notifyingActorFiring, _stopRequested
_changeListeners, _changeLock, _changeRequests, _debugging, _debugListeners, _deferChangeRequests, _elementName, _isPersistent, _verbose, _workspace, ATTRIBUTES, CLASSNAME, COMPLETE, CONTENTS, DEEP, FULLNAME, LINKS
COMPLETED, NOT_READY, STOP_ITERATING
Constructor and Description |
---|
LevelCrossingDetector(CompositeEntity container,
java.lang.String name)
Construct an actor in the specified container with the specified
name.
|
Modifier and Type | Method and Description |
---|---|
void |
attributeChanged(Attribute attribute)
Update the attribute if it has been changed.
|
java.lang.Object |
clone(Workspace workspace)
Clone the actor into the specified workspace.
|
void |
declareDelayDependency()
Declare that the output does not depend on the input in a firing.
|
void |
fire()
Detect whether the current input compared to the input
on the last iteration indicates that a level crossing in the
appropriate direction has occurred, if the time is within
errorTolerance of the time at which the crossing occurs.
|
void |
initialize()
Initialize the execution.
|
boolean |
isStepSizeAccurate()
Return false if with the current step size we miss a level crossing.
|
boolean |
isStrict()
Return false.
|
boolean |
postfire()
Prepare for the next iteration, by making the current trigger
token to be the history trigger token.
|
void |
preinitialize()
Make sure the actor runs with a ContinuousDirector.
|
double |
refinedStepSize()
Return the refined step size if there is a missed event,
otherwise return the current step size.
|
double |
suggestedStepSize()
Return the maximum Double value.
|
_containedTypeConstraints, _customTypeConstraints, _defaultTypeConstraints, _fireAt, _fireAt, attributeTypeChanged, clone, isBackwardTypeInferenceEnabled, newPort, typeConstraintList, typeConstraints
_actorFiring, _actorFiring, _declareDelayDependency, addActorFiringListener, addInitializable, connectionsChanged, createReceivers, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, isFireFunctional, iterate, newReceiver, outputPortList, prefire, pruneDependencies, recordFiring, removeActorFiringListener, removeDependency, removeInitializable, setContainer, stop, stopFire, terminate, wrapup
_adjustDeferrals, _checkContainer, _getContainedObject, _propagateExistence, getContainer, instantiate, isAtomic, isOpaque, moveDown, moveToFirst, moveToIndex, moveToLast, moveUp, propagateExistence, setName
_addPort, _description, _exportMoMLContents, _removePort, _validateSettables, connectedPortList, connectedPorts, containedObjectsIterator, getAttribute, getPort, getPorts, linkedRelationList, linkedRelations, portList, removeAllPorts, setClassDefinition, uniqueName
_setParent, exportMoML, getChildren, getElementName, getParent, getPrototypeList, isClassDefinition, isWithinClassDefinition
_addAttribute, _adjustOverride, _attachText, _cloneFixAttributeFields, _containedDecorators, _copyChangeRequestList, _debug, _debug, _debug, _debug, _debug, _executeChangeRequests, _getIndentPrefix, _isMoMLSuppressed, _markContentsDerived, _notifyHierarchyListenersAfterChange, _notifyHierarchyListenersBeforeChange, _propagateValue, _removeAttribute, _splitName, _stripNumericSuffix, addChangeListener, addDebugListener, addHierarchyListener, attributeDeleted, attributeList, attributeList, decorators, deepContains, depthInHierarchy, description, description, event, executeChangeRequests, exportMoML, exportMoML, exportMoML, exportMoML, exportMoMLPlain, getAttribute, getAttributes, getChangeListeners, getClassName, getDecoratorAttribute, getDecoratorAttributes, getDerivedLevel, getDerivedList, getDisplayName, getFullName, getModelErrorHandler, getName, getName, getSource, handleModelError, isDeferringChangeRequests, isOverridden, isPersistent, lazyContainedObjectsIterator, message, notifyOfNameChange, propagateValue, propagateValues, removeAttribute, removeChangeListener, removeDebugListener, removeHierarchyListener, requestChange, setClassName, setDeferringChangeRequests, setDerivedLevel, setDisplayName, setModelErrorHandler, setPersistent, setSource, sortContainedObjects, toplevel, toString, validateSettables, workspace
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
createReceivers, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, newReceiver, outputPortList
isFireFunctional, iterate, prefire, stop, stopFire, terminate
addInitializable, removeInitializable, wrapup
description, getContainer, getDisplayName, getFullName, getName, getName, setName
getDerivedLevel, getDerivedList, propagateValue
public StringParameter direction
public Parameter errorTolerance
public Parameter level
public Parameter value
public TypedIOPort output
public TypedIOPort trigger
protected double _level
public LevelCrossingDetector(CompositeEntity container, java.lang.String name) throws IllegalActionException, NameDuplicationException
container
- The subsystem that this actor is lived inname
- The actor's nameIllegalActionException
- If the entity cannot be contained
by the proposed container.NameDuplicationException
- If name coincides with
an entity already in the container.public void attributeChanged(Attribute attribute) throws IllegalActionException
attributeChanged
in class NamedObj
attribute
- The attribute that has changed.IllegalActionException
- If the attribute change failed.public java.lang.Object clone(Workspace workspace) throws java.lang.CloneNotSupportedException
clone
in class TypedAtomicActor
workspace
- The workspace for the new object.java.lang.CloneNotSupportedException
- If a derived class contains
an attribute that cannot be cloned.NamedObj.exportMoML(Writer, int, String)
,
NamedObj.setDeferringChangeRequests(boolean)
public void declareDelayDependency() throws IllegalActionException
declareDelayDependency
in class AtomicActor<TypedIOPort>
IllegalActionException
- If the causality interface
cannot be computed.AtomicActor.getCausalityInterface()
public void fire() throws IllegalActionException
fire
in interface Executable
fire
in class AtomicActor<TypedIOPort>
IllegalActionException
- If it cannot get a token from the trigger
port or cannot send a token through the output port.public void initialize() throws IllegalActionException
initialize
in interface Initializable
initialize
in class AtomicActor<TypedIOPort>
IllegalActionException
- If thrown by the super class.public boolean isStepSizeAccurate()
isStepSizeAccurate
in interface ContinuousStepSizeController
public boolean isStrict()
isStrict
in interface Executable
isStrict
in class AtomicActor<TypedIOPort>
public boolean postfire() throws IllegalActionException
postfire
in interface Executable
postfire
in class AtomicActor<TypedIOPort>
IllegalActionException
- If thrown by the super class.public void preinitialize() throws IllegalActionException
preinitialize
in interface Initializable
preinitialize
in class AtomicActor<TypedIOPort>
IllegalActionException
- If the director is not
a ContinuousDirector or the parent class throws it.public double refinedStepSize()
refinedStepSize
in interface ContinuousStepSizeController
public double suggestedStepSize()
suggestedStepSize
in interface ContinuousStepSizeController