Sage Modeling and Simulation Library

Highpoint.Sage.ItemBased Namespace

Sage® includes a Port-and-Connector architecture that allows the developer to create a familiar “create objects with ports and wire the ports together with connectors” model. There are very few constraints placed on the kind of object that can serve as owner of such ports – basically, it must be able to enumerate ports, and inform the ports of their owner through a registration protocol.

Ports serve to transfer data objects between entities such as products between assembly stations in a manufacturing simulation. They present objects to, and accept objects from, the world outside of a port owner. They fire events when data arrives or is sent, and support out-of-band data, which is a set of alternate date elements that usually pertain to the data object being transmitted. As an example, a vat, transferring 100 kg of sucrose mixture to another vat, might present a Mixture object on its output port, and a TimeSpan object on an out of band channel called “MinTransferDuration”.

Note that for values that do not represent transfers, do not change through being read, or for which an IObservable construct serves sufficiently (such as when modeling production rates instead of discrete product in a manufacturing environment), a simple field and event are more than adequate to communicate data between entites. In other words, unlike many block and port architectures, this is one of several first-class means you have at your disposal for communicating information between participants in your simulation.

Classes


  Class Description
Public class Nexus
items show up on input ports. If it has one, the Nexus' IPortSelector is queried for a selection of output port, and if one is provided, the item is placed on that port. If it has no IPortSelector and the serviceObject implements IPortSelector, it is asked where it would like to go next. If it answers with a selected port, it is placed on that port. Otherwise, the nexus selects an output port at random. Note that the IPortSelector in this case must always select IOutputPorts.
Public class Periodicity
Public class PulseSource
Public class SimplePortOwner
Summary description for SimplePortOwner.
Public class Tag
Class Tag is the base class for implementations of Tags.
Public class TagList
A list of tags.
Public class TagType
A TagType contains metadata governing the use of Tags for a particular purpose. Tags can be constrained or not, extensible or not, and have a list of candidate values or not. Example 1: A tag named "LotID" would be unconstrained, and therefore, extensible. That is to say that the tag may hold any (string) value and therefore, any new value is acceptable. Example 2: A tag might be of type "Rework", and be constrained to values "Yes" or "No", and not be extensible, i.e. with no provision for being able to add any other options. Example 3: A tag might be of type "Flavor", and be constrained to "Chocolate", "Vanilla" and "Strawberry", but be extensible so that during execution, some dispatcher (or whatever) can add "Tutti-Frutti" to the list of acceptable values. A TagType is used to create tags or its type.
Public class Ticker
A class that generates a PulseEvent at a specified periodicity.

Interfaces


  Interface Description
Public interface IAddsTagsToServiceObjects
Implemented by an object that adds tags to service objects it handles.
Public interface IChangesTagsOnServiceObjects
Implemented by an object that changes the values of the tags on service objects it handles.
Public interface IPeriodicity
Public interface IPulseSource
Implemented by an object that generates pulses, either periodic or random.
Public interface IReadOnlyTag
A read only Tag.
Public interface ITag
A tag that can be read and written.
Public interface ITagHolder
Implemented by an object (usually a service item) that has tags attached.
Public interface ITagType
A TagType contains metadata governing the use of Tags for a particular purpose. Tags can be constrained or not, extensible or not, and have a list of candidate values or not. Example 1: A tag named "LotID" would be unconstrained, and therefore, extensible. That is to say that the tag may hold any (string) value and therefore, any new value is acceptable. Example 2: A tag might be of type "Rework", and be constrained to values "Yes" or "No", and not be extensible, i.e. with no provision for being able to add any other options. Example 3: A tag might be of type "Flavor", and be constrained to "Chocolate", "Vanilla" and "Strawberry", but be extensible so that during execution, some dispatcher (or whatever) can add "Tutti-Frutti" to the list of acceptable values. A TagType is used to create tags or its type.

Delegates


  Delegate Description
Public delegate PulseEvent
An event that a pulse source fires. Anyone wanting to receive a 'Do It!' command implements this delegate.

Enumerations


  Enumeration Description
Public enumeration Periodicity..::..Units