Presentation is loading. Please wait.

Presentation is loading. Please wait.

Digital Twin of a Manufacturing Process in a JMP data table

Similar presentations


Presentation on theme: "Digital Twin of a Manufacturing Process in a JMP data table"— Presentation transcript:

1 Digital Twin of a Manufacturing Process in a JMP data table
Stephen Pearson, Chemical Process Statistician Syngenta Manufacturing facilities are controlled using a mixture of computer automation and experienced operators. The ‘rules’ governing the process can be derived from recorded data and approximated using column formula. The resultant digital representation of the process can be used to carry out Discrete Event Simulation (DES). The challenge comes in generating the control signals a row at a time whilst evaluating the responses as there are often feedback loops.  By using a JMP data table, any visualizations and analysis developed for the real process can be applied to the simulated results. Design of Experiments can be used to systematically see how the process might respond. After fitting a model based on many simulation runs, derived outputs such as equipment utilization can be used to aid decision making. When the difference in cost options runs to six or seven-figures this is extremely valuable. Example Simulation  Structure of Scripts and Data Table 

2 Manufacture of Dilithium Quantum
Back Charging catalyst and packaging final material are manual operations. Production could be increased by: hiring more staff or partial automation. Impurities in the recovered solvent can lead to quality issues but costs could be reduced by: altering the strength of the Red (to include more/less solvent) or changing the amount of solvent recovered. The outcome of each scenario is uncertain so an experimental design with full replication is carried out. For a factory containing items of equipment it takes 15 minutes to simulate a year of production and produce a JMP table ~0.5 GB in size. The results from an overnight run of simulations can be combined and a meta-model produced. With a meta-model 100,000 scenarios can be run in under a minute. Play Simulation  Solvent is charged to the reactor. Red is added followed by a catalyst. Blue is added over a longer period. The mixture is transferred to a still Some of the solvent is recovered. The Dilithium Quantum is packaged. Meta-model 

3 Meta-model (100,000 runs) Home Back
Highlighted Yellow Region = Minimum Cost Highlighted Orange Region = Maximum Production Using the profiler alone it can be difficult to visualise how the different factor settings interact. The five factors being varied are around the edges of graphs above. The results are coloured by cost (left) and number of in-spec. batches produced (right). Regions that are highlighted in both views are potential optimum operating conditions. Current Operation

4 Click on a highlighted area of the table to toggle details on/off
What variables should the different scenarios explore? Raw materials charge amounts. Different phase durations (operating philosophies). Equipment availability. An experimental design can be used to generate the options. Back Click on a highlighted area of the table to toggle details on/off Typical values for charge quantities, phase durations, uncontrolled conditions can be represented by a random distribution. A uniform or triangular distribution are best for approximating real data in this context. The phase numbers and resource usages can be recorded to the data table. Using the column property ‘Value Labels’ the phases can be displayed to the user as text. Most of the steps in building a discrete event simulation are repetitive, so a series of short scripts were written to automate these tasks and reduce typographical errors: Make a list of all the phases for a vessel (CTvessel_phase). Turn a phase list for a vessel (with added conditionals and/or flag changes) into an If() statement. Create an If() statement for vessels that hold resources. Create an If() statement based on time to make equipment unavailable. Scenario Constants Distributions Time Output Formula View Code Snippets  Some numbers will be constant between scenarios but are better recorded in the data table than hidden in the update code. They can be referenced using :columnName[1] In the real world the days of the week and time of the year influence operations. By simulating over an entire year or longer, seasonal effects can be taken into consideration. The time spacing is based on the length of the shortest phase. Formula columns can be used to count batches of material and keep track of quality data. These can be summarized for each scenario.

5 About the code Home Back Toggle Code View 
Define which scenario to run. Locate Time Column. Get a list of simulation output columns (after time column, no formula) and clear contents. Create a tracker for each output column (target row number, current phase & duration, status flag). Turn off JMP internal data update and work down the table row by row. Use the code generated by the helper scripts to fill out simulation output. Alter status flags of other vessels Look up duration from the appropriate process distribution Keep track of resources produced or consumed Turn on JMP internal data update and force column formula to re-evaluate. Generate table of summary data for this scenario. Loop over previous steps for all scenarios Combine summary data from all scenarios with Design of Experiments data table. Explore results, fit model and optimise process.

6 About the code Home Back Toggle Text View 
For( i = 1, i <= NScenarios, i++, //use :columnName[i] to refer to the cell value in row i If( currCol << Get Name( "string" ) == "DateTime", dateCol = j); If( Char( currColFormula ) == "Empty()" & j >= dateCol, currCol << Set Each Value( 0 ); vesselList = Insert( vesselList, currcol << Get Name( "String" ) ); ); Trackers( vesselList ); Eval(Parse(Eval Insert("targetRow_^currVessel^ = 1; currPhase_^currVessel^ = 0;currCT_^currVessel^ = 0;^currVessel^_Flag = 0;") ) ); dt << Begin Data Update; For Each Row( :reactor = If( reactor_Flag == -1, Lag( :reactor, 1 ), targetRow_reactor <= Row() & Lag( :reactor, 1 ) == 0, currCT_reactor = :CTreactor_Prepare; targetRow_reactor = Row() + currCT_reactor; 1;,…); dt << End Data Update; If( Char( currColFormula ) != "Empty()", currCol << Eval Formula);

7 Structure of Scripts and Data Table 
Simulation Home Back Run all the scenarios according to the experimental design and save the summary data e.g. by batch or week. Concatenate the results and review. Summarise by scenario and join with the experimental design. Add calculated columns such as cost and model. If required simulate 100,000 runs to help visualise results. Structure of Scripts and Data Table  Meta-model 

8 Meta-model (100,000 runs) Home Back
Highlighted Yellow Region = Minimum Cost Highlighted Orange Region = Maximum Production Using the profiler alone it can be difficult to visualise how the different factor settings interact. The five factors being varied are around the edges of graphs above. The results are coloured by cost (left) and number of in-spec. batches produced (right). Regions that are highlighted in both views are potential optimum operating conditions. Current Operation

9 Click on a highlighted area of the table to toggle details on/off
What variables should the different scenarios explore? Raw materials charge amounts. Different phase durations (operating philosophies). Equipment availability. An experimental design can be used to generate the options. Home Back Click on a highlighted area of the table to toggle details on/off Typical values for charge quantities, phase durations, uncontrolled conditions can be represented by a random distribution. A uniform or triangular distribution are best for approximating real data in this context. The phase numbers and resource usages can be recorded to the data table. Using the column property ‘Value Labels’ the phases can be displayed to the user as text. Most of the steps in building a discrete event simulation are repetitive, so a series of short scripts were written to automate these tasks and reduce typographical errors: Make a list of all the phases for a vessel (CTvessel_phase). Turn a phase list for a vessel (with added conditionals and/or flag changes) into an If() statement. Create an If() statement for vessels that hold resources. Create an If() statement based on time to make equipment unavailable. Scenario Constants Distributions Time Output Formula View Code Snippets  Some numbers will be constant between scenarios but are better recorded in the data table than hidden in the update code. They can be referenced using :columnName[1] In the real world the days of the week and time of the year influence operations. By simulating over an entire year or longer, seasonal effects can be taken into consideration. The time spacing is based on the length of the shortest phase. Formula columns can be used to count batches of material and keep track of quality data. These can be summarized for each scenario.

10 About the code Home Back Toggle Code View 
Define which scenario to run. Locate Time Column. Get a list of simulation output columns (after time column, no formula) and clear contents. Create a tracker for each output column (target row number, current phase & duration, status flag). Turn off JMP internal data update and work down the table row by row. Use the code generated by the helper scripts to fill out simulation output. Alter status flags of other vessels Look up duration from the appropriate process distribution Keep track of resources produced or consumed Turn on JMP internal data update and force column formula to re-evaluate. Generate table of summary data for this scenario. Loop over previous steps for all scenarios Combine summary data from all scenarios with Design of Experiments data table. Explore results, fit model and optimise process.

11 About the code Home Back Toggle Text View 
For( i = 1, i <= NScenarios, i++, //use :columnName[i] to refer to the cell value in row i If( currCol << Get Name( "string" ) == "DateTime", dateCol = j); If( Char( currColFormula ) == "Empty()" & j >= dateCol, currCol << Set Each Value( 0 ); vesselList = Insert( vesselList, currcol << Get Name( "String" ) ); ); Trackers( vesselList ); Eval(Parse(Eval Insert("targetRow_^currVessel^ = 1; currPhase_^currVessel^ = 0;currCT_^currVessel^ = 0;^currVessel^_Flag = 0;") ) ); dt << Begin Data Update; For Each Row( :reactor = If( reactor_Flag == -1, Lag( :reactor, 1 ), targetRow_reactor <= Row() & Lag( :reactor, 1 ) == 0, currCT_reactor = :CTreactor_Prepare; targetRow_reactor = Row() + currCT_reactor; 1;,…); dt << End Data Update; If( Char( currColFormula ) != "Empty()", currCol << Eval Formula);


Download ppt "Digital Twin of a Manufacturing Process in a JMP data table"

Similar presentations


Ads by Google