allysonfrancis Posted October 14, 2019 Share Posted October 14, 2019 (edited) I am trying to set up a custom object subclass for a conveyor that emulates an accumulating conveyor which has configurable "zone" lengths and overall lengths. Zones can be equated to "cells" in Simio. For example, if I have a 6' long conveyor with 12" zones, then I would have QTY 6 zones on the 6' long conveyor, which means a traveler capacity of 6 and a cell count of 6. For a 6' conveyor with 24" zones, I would have QTY 3 zones, traveler capacity of 3 and cell count of 3, and so on. In my custom object subclass, I have custom properties for the conveyor length and zone length. I have a function that calculates the traveler capacity based on this. The issue I am having is setting the initial traveler capacity and fixed cell count properties to reference the output of this function. The problem is two fold: 1) How do I create a default property value that references another property or function within the same object instance? For example, say my object subclass is called "Conveyor_Custom" and my capacity calculation function is called "CapacityCalculation". I am able to reference the function output by typing Conveyor_Custom1.CapacityCaculation in the property pane of the first object instance (which is Conveyor_Custom1) on the main model, but I have to type this out for each instance that I create (ie. Conveyor_Custom1, Conveyor_Custom2, etc.). I am looking for a way to set the default value for the entire object subclass to reference the calculation from it's own instance. This default would need to be set within the object definition itself, so that I could drop many instances of the object into the model without needing to type in the name of each instance into the property pane manually. For example, something like Self.CapacityCalcuation would be great, but I am not sure there exists a generic self-reference placeholder and I can't find it in the documentation. 2) Even when I type in the capacity calculation reference manually for each object instance, I still get an error for the NumberOfCells property. For example, in the main model, in the property pane for the first object instance, I can manually set the InitialTravelerCapacity to Conveyor_Custom1.CapacityCalculation and get the correct value returned with no errors. However, when I set NumberOfCells to Conveyor_Custom1.CapacityCalculation, I get the error "Invalid numeric value". The output of the function is an integer (I have some rounding in there to make it so) so I am not sure why the value is invalid. I also tried setting it to Conveyor_Custom1.InitialTravelerCapacity and this also throws the same error. It would be convenient to be able to set the traveler capacity and cell count to the same value, since on accumulation conveyors with defined zone lengths, this is the real physical situation. It doesn't make sense for me to have to manually calculate this and input the actual integer value when there is already a function set up to do this and other properties are able to reference the output of that function. If anyone has experience with this please let me know, in the meantime I am doing it manually but it is very tedious. Thanks! Edited October 14, 2019 by allysonfrancis adding tags Link to comment Share on other sites More sharing options...
Liz Millar Posted October 16, 2019 Share Posted October 16, 2019 Hi Allyson, 1) One option to try would be to create a Function in your Model with the Expression property being Conveyor_Custom.CapacityCalculation. This Function could then be placed in each of your Conveyor_Custom Initial Traveler Capacity property and would not need to be renamed each time. 2) It seems the issue might stem from the NumberOfCells property and not the CapacityCalculation. It could be helpful to revisit how you have defined the NumberOfCells property and where you are using it. -Liz Link to comment Share on other sites More sharing options...
allysonfrancis Posted October 16, 2019 Author Share Posted October 16, 2019 Thanks for the reply! For additional context on item 1), I am hoping to have one Conveyor_Custom object subclass that has properties that allow me to configure zone lengths and overall length for each instance that I add to the model. So for example, I'm imagining dropping in a Conveyor_Custom object to the model and then setting Conveyor_Custom.ZoneLength to 12" and Conveyor_Custom.OverallLength to 6', and then having the Conveyor_Custom.InitialTravelerCapacity self-populate from the calculation that is performed by the CapacityCalculation expression (6'/12" = 12 travelers) internal to the object. The reason the expression is created in the object subclass and not the model is because the formula references the properties of the object subclass itself (ie. the formula is this: Math.Round(((OverallLength * 12) - (Math.Remainder(OverallLength * 12, ZoneLength))) / ZoneLength), with OverallLength being in feet and ZoneLength being in inches), so that for each instance it will be using different values for the calculation as these properties are changed from their default values. I essentially want to do the same for the Conveyor_Custom.NumberOfCells property, which is an inherited property from the standard library conveyor. I have it set so that the default EntityAlignment property is set to CellLocation, and the default CellSpacingType is FixedNumberCells. It's just the NumberOfCells property that I am hoping to have reference a calculated value. I can't seem to set that property to anything other than a plain integer (it doesn't seem to want to accept variables that have integer values, it just wants the values themselves). Perhaps there is another property that I can change to have it accept the variable rather than a plain integer, but I have not found it yet. Thanks! Link to comment Share on other sites More sharing options...
Recommended Posts