I have a situation where I have a Station A that paints incoming products, and a station B where I mix paint for Station A. Each unique product needs its own set of paint. Let's say there are 4 unique products, so there are 4 types of paint that can be mixed.
New paint needs to be mixed depending on one condition only: Is the paint more than 6 hours old? --> Mix new paint.
For simplicty's sake, we assume there is an unlimited amount of paint available. At simulation start, all 4 paint types are 0 hours old.
I want to be able to have a setup time of switching between paints (requiring a worker) on Station A if:
1. the incoming product in Station A differs from the previously painted product
I want to be able to mix new paint (requiring a worker) on Station B if:
2. the paint required for the incoming product on Station A is more than 6 hours old.
If Station A needs paint switching and the paint we are switching to is too old:
3. we need to mix the new paint at Station B and do the paint changing setup time on Station A.
I would like to help on how to simplify the simulation logic while achieving the same end result.
So far I have a skeleton of a model where I have Station A with a worker for processing, Station B with a worker for processing and a generator that counts the number of hours consumed for each paint type.
But I have no working logic connecting the consumed hours of the paint and the setup conditions. I don't know how to combine requiring a worker for set up/mixing on two different stations with automatic setup logic for a Station A using a Matrix(Type) table for the paint switching times between incoming products.
Perhaps I am approaching the problem from the wrong angle? Any tips on how to proceed would be greatly appreciated.
I have attached a skeleton of what I am trying to achieve, hopefully it will help in understanding the problem.
Edit: Added a production plan and a setup time matrix. Fixed importers for processing/setup on Station A.
You want to decide about setup depending not only on attributes and/or counters (which is easily possible with the parameters of the setup dialog)! I did not check your conditions in detail, but according to my impression you should switch off AutomaticSetUp and control the point in time you want to setup by method utilizing "setupFor". According to your needs you may also set the SetupTime by method. Of course you can do this in combination with AutomaticSetUp too (i.e. to react on type change).
Although I am still wondering if it can be done with the basic building blocks without programming, I have positive experiences with the following approach.
On the Set-up tab, you switch off automatic set-up and set after N parts to 1. Then you implement a control that 1) sets the set-up time of station A and 2) if new paint is needed from station B. The control can be an entrance control (before actions=true) or a formula for the set-up time (implemented as a method). Like @Eventdebugger mentioned, you can also use setupFor to initiate a set-up at any time. If you set the set-up time to 0 (based on the relevant conditions), no Worker will be called for the service (only when it is greater than 0).
Thank you for the replies, I am progressing slowly but surely with your advice!
However, I am encountering an error sometimes saying "importer already has exporters". Is there a way to check if an importer already has an exporter assigned?
I am experimenting with "getSatisfiedImporters" and so far it seems to be working but I'm not sure if it's correct. Looking at the broker and choosing View -> Exporters only shows me the workers assigned to an importer (i guess) but the importer they are assigned to are not in the same list.
The calling of Exporters should run well automatically. Do you perhaps have controls in place to call Exporters explicitly?
I am using an importer request control to manually control the importer request for two stations (station A in my example above is in fact two singleproc's Station A1 and Station A2 that both need to be processed individually by an operator, but only when both are occupied).
I'm suspecting this error is happening because of two things:
1. when an exporter is assigned to both stations and a shift end occurs. I noticed that a shift end causes the importer request control to be called again (presumably to remind the operator to come back to the station after the shift break?)
2. I have the same importer request control method on both Station A1 and Station A2, however I gracefully "return" out of the method if it detects that Station A1 called the control (since Station A2 controls A1's importer request).. I know, this is bad coding practice and probably the root of my problem.
Manual importer request control and how it works in tandem with shift calendars is quite new to me
Well, it is not clear what problem you actually try to solve. But following you earlier posts, I think you can probably simplify your model.
Basically, Workers/Exporters can be requested for processing, set-ups, failures/repairs and for transportation. I thought you would use the set-ups to control the engagement of workers. In most cases you do not need any controls for the Importer request/receive/release. Alternatively, you can also change the services settings in the Entrance control (Before actions=true). So, when an MU enters A1 or A2, you check the state of the other object and decide which services are needed and specify them. Plant Simulation can do the rest.
Final note: you should assure that you work with the latest patch.
Thank you Nomden, I am working on simplifying this process of the model because it is much needed.
The reason I am not using "Before Actions" for the importer request/receive/release is because this is not supported for wait statements, which is what I need in my model unless I find another way to "wait" for an event before calling a worker to the station (see this forum post: https://community.plm.automation.siemens.com/t5/Pl
I am currently running v13.0.2 and will update to 13.1 shortly, but have not seen any changes in the release notes of 13.1 relating to importers and "Before Actions" on the entrance control.
In any case I think I managed to solve my problem by simplifying the code, thank you for your help!
In general, only use the Importer request/receive/release controls on the Importer tabs to do anything non-standard with workers (assigning or releasing them). So NOT in any other place, like an Entrance control.
However, indirectly you can use the Entrance control to get a Worker to do something. From your first model, you could check at Station A, when the set-up starts (Set-up control), if the required paint is too old. If so, you create and move an MU to station B. Station B can then be set call a Worker to process this MU. If the priorities for the requests are the same, you will get the following task sequence: 1) set-up of Station A, 2) mix paint at Station B (only when needed), 3) proces MU on Station A.