cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Choose Language Hide Translation Bar
View Original Published Thread

Repairable Systems Simulation

eldad_galili
Level III

hi all,

 

can you help me with a script that takes a jmp table like this

eldad_galili_0-1740138142366.png

and automatic generate RBD in the Repairable Systems Simulation like this:

eldad_galili_1-1740138230201.png

When the MTBF values ​​are inserted into the Theta value under the exponential distribution

 

thank you very much!

 

 

 

 

 

 

5 REPLIES 5
jthi
Super User


Re: Repairable Systems Simulation

Have you checked what the script looks like which is used in the example? https://www.jmp.com/support/help/en/18.1/#page/jmp/example-using-the-repairable-systems-simulation-p... or what the scripts looks like if you save your version?

-Jarmo
jthi
Super User


Re: Repairable Systems Simulation

This is still most likely somewhat broken, but with small modifications it most likely can be improved and made more robust

View more...
Names Default To Here(1);

dt = New Table("My system",
	Add Rows(2),
	Compress File When Saved(1),
	New Column("Column 1",
		Numeric,
		"Ordinal",
		Format("Best", 12),
		Set Values([1, 2, 3, 4])
	),
	New Column("Column 2", Character, "Nominal", Set Values({"A", "B", "C", "D"})),
	New Column("Column 3",
		Numeric,
		"Continuous",
		Format("Best", 12),
		Set Values([7500, 13000, 333, 2357])
	)
);

rss_expr = Expr(Repairable Systems Simulation());
system_item_expr = EvalExpr(System Item(Expr(dt << get name)));

Insert Into(system_item_expr, NameExpr(Reliability Block("Start", Position(0, 5))));
end_block = Expr(Reliability Block("End"));
position_expr = EvalExpr(Position(Expr(N Rows(dt) + 1),5));
Insert Into(end_block, Name Expr(position_expr), 2);
Insert Into(system_item_expr, NameExpr(end_block));

create_reliabilty_block = function({name, pos, theta}, {Default Local},
	block_expr = EvalExpr(Reliability Block(Expr(name)));
	position_expr = EvalExpr(Position(Expr(pos),5));
	configuration_expr = EvalExpr(Configuration(Basic(Exponential(Expr(theta)), Time Unit(Hour))));
	Insert Into(block_expr, Name Expr(position_expr));
	Insert Into(block_expr, Name Expr(configuration_expr));
	
	return(Name Expr(block_expr));
);

For Each Row(dt,
	r_block = create_reliabilty_block(:Column 2, Row(), :Column 3);
	Insert Into(system_item_expr, Name Expr(r_block));
);

connections = :Column 2 << get values;
Insert Into(connections, "Start", 1);
Insert Into(connections, "End");
connections_list = {};
For(i = 1, i < N Items(connections), i++,
	Insert Into(connections_list, Eval List({Eval List({connections[i], connections[i+1]})}));
);

block_connections_expr = EvalExpr(Block Connections(Expr(connections_list)));

Insert Into(system_item_expr, NameExpr(block_connections_expr));


For Each Row(dt,
	event_expr = EvalExpr(Add Event(
		Block Name(Expr(:Column 2)),
		Event Name("Block Failure"),
		Configuration(Block Failure)
	));
	process_expr = EvalExpr(Add Process(
		Block Name(Expr(:Column 2)),
		Process Name("Turn Off System"),
		Configuration(Turn Off System, Completion Time(Immediate))
	));
	link_expr = EvalExpr(Link Event and Process(
		Event(Block Name(Expr(:Column 2)), Event Name("Block Failure")),
		Process(Block Name(Expr(:Column 2)), Process Name("Turn Off System"))
	));
	Insert Into(system_item_expr, Name Expr(event_expr));
	Insert Into(system_item_expr, Name Expr(process_expr));
	Insert Into(system_item_expr, Name Expr(link_expr));
);

Insert Into(system_item_expr, NameExpr(Simulation Settings(
	Duration(100),
	Time Unit(Hour),
	N Simulations(1),
	Seed(0)
)));


Insert Into(rss_expr, Name Expr(system_item_expr));
system_item_expr = EvalExpr(Open System Item(Expr(dt << get name)));
Insert Into(rss_expr, Name Expr(system_item_expr));

rss = Eval(rss_expr);

wait(0);
/*
// Comments at the start of file do not seem to be necessary, but if you wish to have a "simulation" file, then you could add these
sb = Script Box("//!
//!STANDALONEPLATFORM
//WARNING: DO NOT CHANGE THE FIRST TWO LINES OF THIS FILE.
" ||
Char(NameExpr(rss_expr)), 800, 800);
sb << Reformat;
rss_script = sb << Get Text;
Save Text File("$TEMP/demo.jsl", rss_script);
Open("$TEMP/demo.jsl");
*/
-Jarmo
eldad_galili
Level III


Re: Repairable Systems Simulation

Thank you very much for your response, but what I meant is that I want to take a similar table to this example, of course with different values, and use it to build an RBD table in the RSS module.

jthi
Super User


Re: Repairable Systems Simulation

You did not provide a table so I did create example which follows similar structure. You can go through the provided script and make the required changes.

-Jarmo
bfoulkes
Level IV


Re: Repairable Systems Simulation

Hi,

I actually wrote a script to automate just what you're suggesting. I presented it at the 2021 JMP Discovery event and you can find the JMP journal and all the scripts here,

https://community.jmp.com/t5/Abstracts/But-Now-What-Do-I-Do-Using-a-Reliability-Model-to-Make-Event/...