public class Bus extends AtomicCommunicationAspect
CommunicationAspect that, when its
sendToken(Receiver, Receiver, Token) method is called, delays
the delivery of the specified token to the specified receiver
according to a service rule. Specifically, if the actor is
not currently servicing a previous token, then it delivers
the token with a delay given by the serviceTimeMultiplicationFactor
parameter multiplied by the messageLength parameter specified in the port.
If the actor is currently servicing a previous token, then it waits
until it has finished servicing that token (and any other pending
tokens), and then delays for an additional amount given by
serviceTimeMultiplicationFactor * messageLength.
In the default case of the messageLength = 1, the behavior is similar to
the Server actor.
Tokens are processed in FIFO order.
To use this communication aspect, drag an instance of this Bus into the model, and (optionally) assign it a name. Then, on any input port whose communication is to be mediated by this instance of Bus, open the configuration dialogue, select the tab with the name of the bus in the title and select the enable attribute. The message length is by default set to 1 but can be configured in this tab.
Several Bus communication aspects can be used in sequence. The order in which Tokens are sent through Buses depends on the order in which these are enabled via the DecoratorAttributes.
This actor is tested in continuous and DE.
| Red (derler) |
| Yellow (derler) |
| Modifier and Type | Class and Description |
|---|---|
static class |
Bus.BusAttributes
The port specific attributes for ports mediated by a Bus.
|
Entity.ContainedObjectsIterator| Modifier and Type | Field and Description |
|---|---|
Parameter |
serviceTimeMultiplicationFactor
The service time for the default messageLength of 1.
|
_parameters, _tokenCount_typesValid_actorFiringListeners, _initializables, _notifyingActorFiring, _stopRequested_changeListeners, _changeLock, _changeRequests, _debugging, _debugListeners, _deferChangeRequests, _elementName, _isPersistent, _verbose, _workspace, ATTRIBUTES, CLASSNAME, COMPLETE, CONTENTS, DEEP, FULLNAME, LINKSdecoratorHighlightColorNameCOMPLETED, NOT_READY, STOP_ITERATING| Constructor and Description |
|---|
Bus(CompositeEntity container,
java.lang.String name)
Construct a Bus with a name and a container.
|
| Modifier and Type | Method and Description |
|---|---|
protected void |
_scheduleRefire()
Schedule a refiring of the actor.
|
void |
attributeChanged(Attribute attribute)
If the attribute is serviceTime, then ensure that the value
is non-negative.
|
java.lang.Object |
clone(Workspace workspace)
Clone this actor into the specified workspace.
|
DecoratorAttributes |
createDecoratorAttributes(NamedObj target)
Return the decorated attributes for the target NamedObj.
|
IntermediateReceiver |
createIntermediateReceiver(Receiver receiver)
Create an intermediate receiver that wraps a given receiver.
|
void |
fire()
Send first token in the queue to the target receiver.
|
void |
initialize()
Initialize the actor.
|
boolean |
postfire()
If there are still tokens in the queue and a token has been produced in the fire,
schedule a refiring.
|
void |
reset()
Nothing to do.
|
void |
sendToken(Receiver source,
Receiver receiver,
Token token)
Initiate a send of the specified token to the specified
receiver.
|
void |
setContainer(CompositeEntity container)
Override the base class to first set the container, then establish
a connection with any decorated objects it finds in scope in the new
container.
|
void |
setMessageLength(IOPort port,
double messageLength)
Set the message length for tokens sent to this actor port.
|
_sendToReceiver, decoratedObjects, isGlobalDecorator, registerListener, sendCommunicationEvent_containedTypeConstraints, _customTypeConstraints, _defaultTypeConstraints, _fireAt, _fireAt, attributeTypeChanged, clone, isBackwardTypeInferenceEnabled, newPort, typeConstraintList, typeConstraints_actorFiring, _actorFiring, _declareDelayDependency, addActorFiringListener, addInitializable, connectionsChanged, createReceivers, declareDelayDependency, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, isFireFunctional, isStrict, iterate, newReceiver, outputPortList, prefire, preinitialize, pruneDependencies, recordFiring, removeActorFiringListener, removeDependency, removeInitializable, 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, workspaceequals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitdescription, getContainer, getDisplayName, getFullName, getName, getName, setNamecreateReceivers, getCausalityInterface, getDirector, getExecutiveDirector, getManager, inputPortList, newReceiver, outputPortListisFireFunctional, isStrict, iterate, prefire, stop, stopFire, terminateaddInitializable, preinitialize, removeInitializable, wrapupgetDerivedLevel, getDerivedList, propagateValuepublic Parameter serviceTimeMultiplicationFactor
public Bus(CompositeEntity container, java.lang.String name) throws IllegalActionException, NameDuplicationException
container - The container.name - The name of this actor.IllegalActionException - If the container is incompatible
with this actor.NameDuplicationException - If the name coincides with
an actor already in the container.public void attributeChanged(Attribute attribute) throws IllegalActionException
attributeChanged in class NamedObjattribute - The attribute that changed.IllegalActionException - If the service time is negative.public DecoratorAttributes createDecoratorAttributes(NamedObj target)
createDecoratorAttributes in interface DecoratorcreateDecoratorAttributes in class AtomicCommunicationAspecttarget - The NamedObj that will be decorated.public IntermediateReceiver createIntermediateReceiver(Receiver receiver) throws IllegalActionException
createIntermediateReceiver in interface CommunicationAspectcreateIntermediateReceiver in class AtomicCommunicationAspectreceiver - The receiver that is being wrapped.IllegalActionException - Thrown if Bus is used in container different from the container of the bus.public java.lang.Object clone(Workspace workspace) throws java.lang.CloneNotSupportedException
clone in class AtomicCommunicationAspectworkspace - The workspace for the cloned object.java.lang.CloneNotSupportedException - If cloned ports cannot have
as their container the cloned entity (this should not occur), or
if one of the attributes cannot be cloned.NamedObj.exportMoML(Writer, int, String),
NamedObj.setDeferringChangeRequests(boolean)public void fire()
throws IllegalActionException
fire in interface Executablefire in class AtomicActor<TypedIOPort>IllegalActionException - Not thrown in this base class.public void initialize()
throws IllegalActionException
initialize in interface Initializableinitialize in class AtomicCommunicationAspectIllegalActionException - If the superclass throws it.public boolean postfire()
throws IllegalActionException
postfire in interface Executablepostfire in class AtomicActor<TypedIOPort>IllegalActionException - Not thrown in this base class.public void sendToken(Receiver source, Receiver receiver, Token token) throws IllegalActionException
source - Sender of the token.receiver - The receiver to send to.token - The token to send.IllegalActionException - If the refiring request fails.public void setContainer(CompositeEntity container) throws IllegalActionException, NameDuplicationException
setContainer in class AtomicCommunicationAspectcontainer - The container to attach this attribute to..IllegalActionException - If this attribute is not of the
expected class for the container, or it has no name,
or the attribute and container are not in the same workspace, or
the proposed container would result in recursive containment.NameDuplicationException - If the container already has
an attribute with the name of this attribute.ComponentEntity.getContainer()public void setMessageLength(IOPort port, double messageLength)
port - The actor port.messageLength - The message length.public void reset()
protected void _scheduleRefire()
throws IllegalActionException
IllegalActionException - Thrown if the actor cannot be rescheduled