⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 liftsystem.pr

📁 UML语言构建的电梯管理系统
💻 PR
📖 第 1 页 / 共 3 页
字号:
                /*#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 + -