📄 liftsystem.pr
字号:
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#VubXDIurfR5Lvn4beIa799JV")*/
create Lift( tmpCtrl_1);
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#fdUPwV8w5sFLwQD6TV6B-8iE")*/
task /*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#fdUPwV8w5sFLwQD6TV6B-8iE")*/
newLift := offspring;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#JcRSWLP4M2ELFR37lLwTsGvE")*/
return;
endprocedure;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#*U4LVLnbk4CLhoifJL3CvCZV")*/
newtype @AK@Reference@ControllerList String ( Pid, s_empty_string)
endnewtype;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#Xybs0V6XT5ELv8UZvLypcVGV")*/
dcl ctrlIndex Integer;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#KGjxyVyCEgALz9kfyEciV-aI")*/
dcl tmpCtrl Pid;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#tujU6E4Hf8EL13HhhV-nrWsI")*/
dcl respondedCtrl Integer;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#vys-8LV-RbLL6g-Z1IYKD3aV")*/
dcl minimalEffort Pid;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#P2TIBVxUId5LfFgknV1O4pML")*/
dcl leastEffort ServiceTime;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#q9pTNEfvw9ILaW9jfVnhnIaE")*/
dcl tmpEffort ServiceTime;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#vEgFSVcfAvAL7*HgNEGAsXyI")*/
start;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#qGLfEL5N-keLF6AX2Lt8NG2I")*/
task /*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#qGLfEL5N-keLF6AX2Lt8NG2I")*/
newRequest := @NewRequest;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#DhDx-Eewnp5Lrjoc3Ercy1yI")*/
nextstate Idle;
state Idle;
state *;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#U3AhBEOiM85LuKfZOVOCJs5E")*/
input addLift;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#K1kAwICQtGDL6sec-IdkG6fV")*/
call add;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#c1VICE4f2TAL2Iva2LLE4szE")*/
output confirmAdd;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#WISYWVVpWlAL-fc6SIw9FQAE")*/
nextstate -;
state *;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#jRCH9E6TcSCLT6699EeWlOmL")*/
input requestLift( newRequest *>! targetFloor, newRequest *>! direction);
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#3W3IzLDxK0DLn0pZLElVSRVV")*/
output directionLight( newRequest *>! direction);
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#EsCi*I2R*O5LCgBkXEqhdZCE")*/
task /*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#EsCi*I2R*O5LCgBkXEqhdZCE")*/
ctrlIndex := 1;
GEN_zPb9WEGXoLvLvWJgeEe4X9dL : /*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#IT8yPL-ntwVLPLt6nLl-vjMI")*/
decision ( ctrlIndex <= length( controllers) );
( true ):
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#5pjjCEUZKvVLBNQaaLvoLZnV")*/
task /*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#5pjjCEUZKvVLBNQaaLvoLZnV")*/
tmpCtrl := controllers ( ctrlIndex );
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#DGruzE7e6LCL65vhnLNQy2*L")*/
task /*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#DGruzE7e6LCL65vhnLNQy2*L")*/
ctrlIndex := ctrlIndex + 1;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#UgtHMLqs05DLim8drInZfsiI")*/
output requestServiceTime( newRequest) to tmpCtrl;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#AojXRIE*5mFLVSUdnVW9TsGE")*/
join GEN_zPb9WEGXoLvLvWJgeEe4X9dL;
( false ):
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#xteJZLtLVo0L3HXg9Ef9gMOI")*/
task /*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#xteJZLtLVo0L3HXg9Ef9gMOI")*/
respondedCtrl := 0;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#7pJm7V-3GaiLKLKY1LmsOlBI")*/
task /*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#7pJm7V-3GaiLKLKY1LmsOlBI")*/
minimalEffort := Null;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#NTILsIfJr*VLF7RgYE8bdXKL")*/
task /*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#NTILsIfJr*VLF7RgYE8bdXKL")*/
leastEffort := MAX_TIME;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#wSJ-0VD3ubFLqqwgPI0hSe8V")*/
nextstate WaitEstimation;
enddecision;
state WaitEstimation;
state WaitEstimation;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#iYDqzIHl5*BLF7X7cLOv9pLI")*/
input serviceTime( tmpEffort);
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#l7A0zVl56HELBRAZ4LZ6jnkL")*/
task /*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#l7A0zVl56HELBRAZ4LZ6jnkL")*/
respondedCtrl := respondedCtrl + 1;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#RUSfHEz7*LELQI4kGL3wbCQV")*/
task
{
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#RUSfHEz7*LELQI4kGL3wbCQV")*/
if ( tmpEffort < leastEffort ) {
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#LxQLJIMSOBvLKS6ZAIwkhNeI")*/
{
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#GuDgdLIsoL0Ljt16oIgehgWE")*/
leastEffort := tmpEffort;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#NRfa*I7yypLLPhN6TLgGSHKV")*/
minimalEffort := sender;
};
}
};
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#YpOxHI5JoILLzUtXLEPnRW2L")*/
decision ( respondedCtrl >= length( controllers) );
( true ):
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#R1STXL73ChFLW5gbkErEc9BV")*/
output handleRequest( newRequest) to minimalEffort;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#HbQVwLlz15lLe1faiI7aomJL")*/
nextstate Idle;
( false ):
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#P0UrZV0*2FFLyPa7*IU7H3UI")*/
nextstate -;
enddecision;
state Idle;
endprocess type;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#wNLWBEjFLEVLvDrjVLhovX1V")*/
process type LiftController;
signalset;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#1XCDdVlXsJSLvRxfQEo52YvI")*/
gate P1
in with ( IFromLiftPanel);
out with ( IToLiftPanel);
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#0kVpgVjrsQeLnPVh9Eu6OeUV")*/
gate P2
in with ( ILiftObserver);
out with ( ILift);
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#x9*ovLoJvyALreYaMLtUEoaI")*/
gate P3
in with ( IRequest);
out with ( IResponse);
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#I39yWVkAXVCLJ6LY7Vbj5ctV")*/
dcl requests @AK@Reference@RequestList;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#Bmxm-LVf0NvL1ClZtE7Mp7PV")*/
dcl req @ptr_Request;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#Qbpc8LoWqXBLIuZWULnmszvV")*/
dcl currentInfo @ptr_LiftInfo;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#CAS41IeOMYLLY3qdxEL9D5VL")*/
dcl theLift Pid;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#As-HBLnmIVBL5OkXQIKzDGeL")*/
procedure insertRequest; fpar /*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#gMdIaICSgpvL1uRWyVGhfpLL")*/
r @ptr_Request;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#AApQ3VeNsdLLDfjbXLRpUAeI")*/
start;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#FWrz3LIAOt0L6kRhNEWrRFML")*/
task append( requests, r);
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#As-HBLnmIVBL5OkXQIKzDGeL")*/
return;
endprocedure;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#sHapSIl8ck5LJWof*IQMyL0I")*/
procedure calculateEffort; fpar /*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#nusKELP4GkLLukikfV8LBZZI")*/
r @ptr_Request; returns /*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#C3gDaED9Sh0LQt3faVZ1DjnV")*/
ServiceTime;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#OZdIeVMXYzALJDfjTInr3DEI")*/
start;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#jLSBhIMAaQELQpRjtVIHSNnV")*/
return length( requests);
endprocedure;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#PN2PAEaWk8ILRr49YE77cfVI")*/
dcl service_time ServiceTime;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#rXLC-L734i0LvUvg4EjHm65E")*/
dcl pendingRequest Boolean;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#-bIC2V*37vLLn-PcmEkmpI9L")*/
dcl numFloor Integer;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#pUp9FI6f4IiLDt09xLydbruE")*/
dcl req1 @ptr_Request;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#zRkOcIOVrpVLGW8hSVMfsRFE")*/
start;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#M-JQTE*ozaeLbCsasLNk2vtE")*/
nextstate Idle;
state Idle;
state Idle;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#ILuiqIfwLfSL*PHfVLtTsEyV")*/
input associate( theLift);
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#zueVoIYzxvFLL7NjtELha9PE")*/
nextstate Idle;
state Idle;
state *;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#sdfWpVzWggvLDBQ7fIEyma4I")*/
input requestServiceTime( req);
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#W1iP4EfZi9LLmbEWXL7GTMrL")*/
task /*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#W1iP4EfZi9LLmbEWXL7GTMrL")*/
service_time := (call calculateEffort( req) );
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#mjz*NIz2p-CLWaIbtLip6wTL")*/
output serviceTime( service_time) to sender;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#coNmLE-sr0BL86wZ2VTJZRKL")*/
nextstate HandlingRequest;
state HandlingRequest;
state HandlingRequest;
provided pendingRequest = true;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#ThhlaLIt77iL-JU7RVH*0kfV")*/
task /*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#ThhlaLIt77iL-JU7RVH*0kfV")*/
req := requests (1);
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#t3gl7IEdpgBLKDuaWV2lQyGL")*/
output moveToFloor( req *>! targetFloor) to theLift;
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#L7skzVjP4XILW6QhzVrUnNBL")*/
task remove( requests, 1);
/*#SDTREF(U2,"u2:F:\UML\LiftManagement20\SystemDesign\LiftManagement.u2#Z2dEEEw76YAL0RPccLSPxNVI")*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -