메뉴 건너뛰기

SCM Lab

지식 보관소

   ▣ 전문지식, 저작권 관련 자료들 중 일부만 공유하고 싶을때 사용할 수 있는 게시판 입니다.
   ▣ 정회원 이상만 다운로드가 가능하니 참고하시기 바랍니다.

작성일자 2010-06-22 
수정일자 2010-06-23 

This model is an example of a workcell which is calling second worker when first worker is working.

 

원잇님이 ARENA로 만드신 작업도중 다른 작업자 호출하기를 QUEST를 이용하여 모델링을 해보았습니다.

원잇님과 같은방법으로 signal을 이용하여 모델링을 하려고 하였으나, 여의치 않아서 글로벌 변수로 컨트롤을 하였습니다.

그리고... "wait until"을 연구한다고 거의 2주 만든 듯 하네요. (각 function을 조금만 이해한다면 실제로는 한 시간 안에 끝날 듯;;;)

아무튼 100% 검증을 하지는 못했고, 또한 작업자의 이동시간 미고려... 등 부족한 부분이 많지만 이것을 응용한다면

멋진 모델링을 할 수 있지 않을까 생각되어 집니다.

 

2010-06-22_144542.jpg 

 

윗 쪽이 작업을 계속해서 진행되는 작업장이며, 아랫쪽에 있는 작업자2는 Idle일 경우 윗쪽 작업장으로 가서 작업자1을 도와주로 이동을하게 됩니다.

 

즉 윗 쪽 작업장에서는 작업이 진행되는 case가 3가지가 생기게 됩니다.

 

case 1 : part가 들어옴과 동시에 작업자 1, 작업자 2가 같이 작업을 시작함

case 2 : 작업자 1이 작업 중에 작업자 2가 와서 도와줌

case 3 : 작업자 1이 혼자서 작업을 완료함...

 

이러한 간단한 SCL을 작성하는데 무려 1.5주가 걸렸네요..ㅡㅠㅡ// 역시 끊임없이...열심히...지속적으로 공부해야 겠다는 생각이 드는군요..

(20줄도 안되는......로직인데;;;;)

 

 

 

QUEST Model이 너무 없어보여서 죄송합니다....(걍 SCL 만 테스트 하기 위한 거라...)

 

후반부를 보시면 줌인을 하여서  작업자 움직임 (00:35) , pop widows의 내용 (01:12) 을 자세히 보여주는데....유심히 보시기 바랍니다.

(현 모델에서는 작업자의 이동속도를 0으로 해놨습니다.)

 

2010-06-22_144500.jpg

 

결과를 보시면...Machine 1과 Labor1의 가동률은 같으며, Labor2의 가동률은 높음을 알 수 있습니다.

 

이 모델을 기초로 멋진 모델(?)을 만들 수도 있을 것 같습니다....

 

아래는 위에 영상을 labor point를 다르게하여 작업자의 작업 모습을 좀 더 확실히 구분가게 표현 한 애니메이션입니다.

 

 

아직 완벽하지 않아서 SCL을 공개하지 않으려고 했으나,  좀 더 발전된 로직을 기대하며 공개 해봅니다. ^^

추가해야 될 내용으로는

1. 두명의 작업자가 작업을 할 경우 작업시간을 다시 계산

2. 작업자2를 호출할 경우 작업자의 이동시간 고려하여 부를지 말지를 최종 결정

 "Wait Until ((sim_time - (celem->in_parts[1]-> Single_EndTime) >=0) OR (Calling_Second_worker==1001)) IN STATE BUSY_PROCESSING"

  특히 위의 Logic 다음에 새로운 로직을 추가해야지만 정상적으로 작동이 가능할 듯합니다.

3. 기타, 생각하지 못한 오류 등... ^^; 이상입니다.

 

혹시 문제점, 개선안 등 좋은 아이디어가 있으시면 많은 조언 부탁드립니다.....

-- the example of SCL

#include <part.inc>
#include <agv.inc>
#include <part.inc>
#include <events.inc>

user_attrib
Single_JobTime : real
Single_EndTime : real
Dual_JobTime : real
Dual_EndTime : real

Var
Calling_Second_worker : real

-----------------------------------------------------------------------------------------------------
procedure First_Workcell_logic()
Var
calculated_Single_JobTime : real
calculated_Dual_JobTime : real
the_process_logic : Logic 
the_labor01_state : element
the_labor02_state : element

begin
  wait until out part_count 0  
  require part any   
  require labor Labor1   
  -- when a part enters the machine, the machine starts working with the labor1
  
  the_labor01_state= get_element('Labor1_1')  
  the_process_logic = get_logic( the_labor01_state , PROCESS )  
   CHANGE STATE OF the_process_logic LOGIC TO BUSY_PROCESSING
   -- To make the state of Labor1 is busy during a jobtime.
  
  calculated_Single_JobTime = Uniform(40,90,4)  
  celem->in_parts[1]-> Single_JobTime = calculated_Single_JobTime  
  celem->in_parts[1]-> Single_EndTime = sim_time+ (celem->in_parts[1]-> Single_JobTime)
  --to generate JobTime with a single worker.

  the_labor02_state= get_element('Labor2_1')
  -- To check the state of Labor2 
     
    if((the_labor02_state->status == IDLE) AND (Calling_Second_worker==1001)) then
    -- Re-generate Jobtime when Labor2 is idle.  
   
     require labor Labor2 IN STATE BUSY_PROCESSING
     calculated_Dual_JobTime = Uniform(20,60,2)
     celem->in_parts[1]-> Dual_JobTime = calculated_Dual_JobTime 
     
     Work (celem->in_parts[1]-> Dual_JobTime) IN STATE BUSY_PROCESSING
     -- This is a "Case#01": Two workers are starting works together when a part arrival
   
    else
        
      Wait Until ((sim_time - (celem->in_parts[1]-> Single_EndTime) >=0) OR (Calling_Second_worker==1001)) IN STATE BUSY_PROCESSING 
     --In this case, the machine will be wait (work) two types of JobTime.
     --First, to get jobtime with only one worker.
     --Second, to call second worker during first worker is working.
     
     the_labor02_state= get_element('Labor2_1')
   
     if((the_labor02_state->status == IDLE) AND (Calling_Second_worker==1001)) then
     -- Re-generate Jobtime when Labor2 is idle.  

      require labor Labor2 IN STATE BUSY_PROCESSING
      calculated_Dual_JobTime = Uniform(10,20,2)
      celem->in_parts[1]-> Dual_JobTime = calculated_Dual_JobTime   
   
      Work (celem->in_parts[1]-> Dual_JobTime) IN STATE BUSY_PROCESSING
      -- This is a "Case#02": To call second worker when the single JobTime is not finished
   
     else
     
         -- This is a "Case#03": The single JobTime is finished. It means only one worker is working without helping second worker.
         
     endif
      
    endif
   
  Pass()

end
------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------

procedure Second_Workcell_logic()
begin

  wait until out part_count 0  
  require part any 
  
  Calling_Second_worker = 1003
  -- The value of Calling_second_worker == 1003 means the second worker is busy.

  require labor Labor2
    
  Work Uniform(50,90,2)IN STATE BUSY_PROCESSING
  
  Calling_Second_worker = 1001
  -- The value of Calling_second_worker == 1001 means the second worker is idle.
  
end
------------------------------------------------------------------------------------------------------


 

번호 제목 글쓴이 작성일자 수정일자 조회 수
21 XE로 아이디/비밀번호 찾기 및 가입 인증메일 보내기 [2] SCM 2014-06-27    2755
20 QUEST Tutorial : User-defined statics print out a excel (csv) file file SCM 2010-07-13    7096
19 QUEST Tutorial : Archive, Put Model and Save Model file SCM 2010-07-05    5834
18 Editors of QUEST SCL syntax highligher [1] file SCM 2010-06-30    6756
17 ARENA Model : 소수(Prime Number) 계산 모델 만들기 file 원잇 2010-06-24    6688
» QUEST Model : 작업 도중 다른 작업자 호출하기 [2] file SCM 2010-06-22  2010-06-23  5271
15 ARENA 예제 : 작업 도중 다른 작업자 호출하기 [1] file 원잇 2010-06-17    6028
14 대기행렬 시스템의 표기 (Description of Queueing) file SCM 2010-06-15    6704
13 시뮬레이션의 반복 횟수를 정하는 절차 file SCM 2010-06-15    6436
12 IGRIP To QUEST Conversion method #01 file SCM 2010-06-13    6194
11 JT Conversion (IGRIP to FactoryCAD) & Xref File file SCM 2010-06-08    8242
10 ARENA Traffic Signal 모델 중 신호등 다이어트 하기? [5] file 네오랑 2010-06-03    6584
9 QUEST Tutorial 02 - Modified location of Class, Connections file SCM 2010-05-27    5930
8 ARENA Traffic Signal 모델 중 신호등 만들기 file 네오랑 2010-05-26  2010-06-03  7620
7 QUEST Tutorial 02 - Basic Modeling - Machine, Sink, Save Module file SCM 2010-05-26    6413
6 QUEST Tutorial 02 - Basic Modeling - Part & Source Class file SCM 2010-05-25    5457
5 QUEST Tutorial 02 - Basic Modeling - A Bolt Factory Continue file SCM 2010-05-24    6084
4 QUEST Tutorial 02 - Basic Modeling - A Bolt Factory file SCM 2010-05-24    5756
3 QUEST Tutorial 01 - Introduction - Building Simulation & QUEST Model file SCM 2010-05-23    6288
2 QUEST Tutorial 01 - Introduction - Context & World Display Options file SCM 2010-05-23    5543