Jump to content

Search the Community

Showing results for 'remove parent'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Simio Public Forums
    • Welcome and How To Become a Simio Insider
    • Simio News and Announcements
    • Simio Product Details
    • Simio-Related Positions Desired or Positions Available
    • Help Getting Started with Simio
  • Forums for Simio Insiders Only (See Public Forums Welcome topic to sign up)
    • SI General Discussions
    • SI Sprint Releases
    • SI Shared Items
    • SI Ideas and Suggestions
    • SI Known Issues and Workarounds
    • SI Performance Tips
    • SI Non-US Cultures
    • SI Student Competition
    • SI Educational
    • SI Libraries and Objects
    • SI Animation and Visualization
    • SI Distributions, Functions, and Expressions
    • SI Simio Tabs
    • SI Experimentation and Optimization
    • SI Functional Approaches
    • SI Industries / Domains
    • SI Types of Simulation
    • SI Emulation
    • SI API

Categories

  • Files
    • Academic Information
    • Product Information
    • Case Studies

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


About Me


First Name


Last Name


Company/University Name


OCCUPATION


ICQ


WEBSITE


YAHOO


AOL


LOCATION


FACEBOOK


GOOGLEPLUS


SKYPE


TWITTER


YOUTUBE

Found 2 results

  1. To model shelves, I am trying to create a series of custom "Shelf" objects (subclass of servers) located in a grid pattern. I used a spreadsheet to automatically calculate the coordinate locations and generate a name (string) for each object based on its position within the grid. With just the Shelf object types in the spreadsheet, can bind the file to my object reference table no problem, import the data, and populate the facility window with my objects. That part works fine! Next, since I have an aisle running between the rows of objects, I wanted to set it up so that the objects all face "inwards", ie. the input and output nodes for the objects are facing the aisle. Originally I thought of rotating the Shelf object, but I ran into 2 issues: first, I discovered that I can't set the Shelf yaw orientation from the table, so that's not going to work. Second, I realized that even when I rotate the Shelf in the facility window, the nodes do not rotate with their parent object. I decided I would leave the Shelf in the same orientation as it is placed, but I would just re-locate the input/output nodes to the opposite edge of the Shelf objects on the far side of the aisle. For this I would need to make sure I can set locations for the input/output nodes in the same object reference table. When I added a row to the object reference table from within Simio (prior to binding to a spreadsheet), a drop down appeared, and I could select the input or output nodes for any object that already existed in the table, and then define the node's location in the cartesian coordinate columns. When creating a node this way, the node location is still relative to the object, ie. I can drag the object in the facility window and the node moves relative to the object, which is perfect. This input/output node creation and relative location definition via table is exactly what I am trying to automate, but this is where I started running into problems. In my spreadsheet I used formulas to generate names for the nodes to match the formatting of the input and output nodes in Simio (ex. "Input@..."/"Output@..."). I also added a formula to assign all input node object types to BasicNodes and all output nodes to TransferNodes and calculate the desired location coordinates for the nodes. The spreadsheet I made has the same format as the table in Simio where I tested manually creating and positioning the nodes. The issue is that when I bind the table and import the spreadsheet data to my model, the node names automatically change and are no longer formatted to reference the parent object. Because of this, these name-changed node objects are created in addition to the input and output nodes that are created for each Shelf object. However, if I remove the binding and add a new row, once again I can find the node name in the drop down list and assign the coordinates manually, and the input/output node that references the parent object will move to where I send it. My question is: how can I set the input/output node locations for the objects when creating objects from a table? There are over 500 Shelf objects in the table so I do not want to locate them manually, but the automated method is not working either. The only idea that I have is to make a new object "Shelf2" and define the external view to have the nodes on the opposite side, but that seems like a less-than-idea solution because then I would have 2 custom objects to update and maintain, that are otherwise identical. I am hoping that I don't have to do this hacky solution but I am interested to see if anyone else has dealt with this and has ideas. Thanks!
  2. There are multiple ways to deal with this issue, so I’ll go over my thought process and show you one way that I think will do what you need. You created several object definitions, which is key in Simio’s object oriented paradigm. However, the difficulty comes in interfacing objects with data and processes in the parent model where the objects are instantiated. One indicator that the full object-orientedness is not being used is the creation of multiple processes at the parent model level that do exactly the same thing, only they refer to different object instances in the model. This indicates that either the process is inherent to the object, and so should be included in the object definition or that the process can be generalized at the parent model level and use states/properties of the object instances. Your model has exactly this scenario with the “ChannelCommunication” processes—they are all exactly the same but just pointing at different Channel instances. Your idea of using the API to place the channels is reasonable, but you run into the issue of not being able to create instance-specific processes, as you’ve found. In your case, you make use of a global state array, so I kept the ChannelCommunication logic at the parent level. This allows us to refer to that state array directly. The approach is to reduce all those processes into one process that can take information about each channel instance to update the appropriate state in the array. I noticed you already have a property called “Position” defined on the Channel object, so we have that data available. Now we need a way to run that process from within the Channel object, so I created a process property on the Channel object called "ProcessProperty1". In the Channel’s process “AssignmentToProduct” I added an “Execute” step before “Fire2” with the value of “ProcessProperty1”. Now, in the parent model, we need to delete all but one of the ProcessXX in the ChannelCommunication group—rename that remaining process ChannelCommunicationUpdate for clarity. Next, we need to generalize the values in that assignment step and remove the triggering event name (we are using the execute step in the Channel definition, so we don’t need a specific event to trigger the process anymore). This is a little messy—there might be a better way to do this. My approach is to make use of the location.parent property available on each object. Through trial and error, I found that the object executing the ChannelCommunicationUpdate process is a Product entity in a combiner object in the Channel object. That means we can access the relevant properties on a Channel via the following expression: Product.Location.Parent.Combiner.Location.Parent.Channel Thus on the assignment step the fields become: Row: Math.If(MODE==0,Product.Location.Parent.Combiner.Location.Parent.Channel.Position,Product.Location.Parent.Combiner.Location.Parent.Channel.ProductCreated) Column: Product.Location.Parent.Combiner.Location.Parent.Channel.Position New Value: Math.If(MODE == 0, PlaceOfREF[Product.Location.Parent.Combiner.Location.Parent.Channel.Position, Product.Location.Parent.Combiner.Location.Parent.Channel.Position] + 1, PlaceOfREF[Product.Location.Parent.Combiner.Location.Parent.Channel.ProductCreated, Product.Location.Parent.Combiner.Location.Parent.Channel.Position] + 1) Now, the ProcessProperty1 on each channel instance needs to be set to that ChannelCommunicationUpdate process. For future “builds” of the model, you can either set ProcessProperty1’s default value to be ChannelCommuncationUpdate or set the property value when placing the object. I think that will give you the ability to create an arbitrary number of channel instances via the API and have the logic apply to each instance. Hope it helps -Adam
×
×
  • Create New...