Hello everyone! I’m pretty new to VC and need help with a problem.
Goal of the simulation: There is one Input ProcessNode and 3 Output ProcessNodes. The aim is that two parts are transported (not simultaniously!) to one of the Output ProcessNodes before another Output ProcessNode receives parts.
My approach: I tried to solve this with a while loop, where each of the Output ProcessNodes has a GlobalVariable assigned to it (Output1-3) to activate and deactivate it. By activate I mean that it allows parts to be transported in.
Result: Unfortunately this does not work as intended. The GlobalVariables change their value as planned but the other two Output ProcessNodes still have a green dot in the while loop and continue to receive products. Is this because the change in the GlobalVariable does not originate from within the while loop?
Previously attempted solutions: Inspired by Estes very helpful suggestion in conversation (Flow conditions) I implemented a solution with PropertyConditions. Unfortunately this required for the order in which the Outputs receive the products to be fixed.
I do not want to set the order in which the Output ProcessNodes receive their products in stone because I intend there to be another event which blocks one of the Process Nodes but that is further down the line.
Essentially, I need a way to stop a ProcessNode from another ProcessNode.
There are probably other ways to do it. I have attempted and failed to solve this problem with ResourceReservations, Missions and ProductReservations.
The Process Modeling While loop condition is not continuously evaluated. Once the “program pointer” enters the while loop, it remains there until the loop finishes, at which point the condition is re-evaluated.
If I understood your target correctly, you could jsut have one global variable “TargetStation” and it’s assigned to either 1, 2 or 3. It would start from 1, and then once station 1 is full you assign the TargetStation to 2, etc.
Yes your suggestion works but the problem with that solution is, that the order must then be fixed. The aim is for the order to be variable. This way receiving ProcessNodes can be filled in the order of 1,2,3 but also in another order such as 2,1,3 for example.
Also, you mention that the while loop is not continuously evaluated. Is there a way to continuously evaluate the condition of a property and use this to stop a process once the property has reached a certain value?
If the order is unknown, then you must implement some signals/properties to check what processes are busy/available, and then assign the target station based on that.
You can use Wait Property Condition, or Wait Signal statements for such.
That’s exactly what I was gonne suggest
I did an example, where you check in the Input Process which Outputs are available (using a WaitSignal without Condition).
Depending on that, you can create 2 products and assign them a specific Product property for the Output where they shoud be brought. And in the Output, you can use a Property Filter in the TransportIns to define that you only accept these products.
There might be other ways to do it. VC_Exp10_PropertyFilter.vcmx (2.2 MB)
(I left all your “Assigns” in the Output processes, even if they don’t impact how the process is working now)
Thank you very much for creating the solution!!! I started working with Estes suggestions but felt like I was in deep waters (not understanding signals well). This is a big help