기타 인터페이스

현재 버전 (1.7.4)에 대한 매뉴얼을 보고 계십니다. 다른 버전에 액세스하려면 페이지 오른쪽 상단 모서리에 있는 '버전 전환' 버튼을 클릭하세요.

■ 최신 버전의 소프트웨어를 사용하려면 Mech-Mind 다운로드 센터를 방문하여 다운로드하세요.

■ 현재 사용하고 있는 제품의 버전이 확실하지 않은 경우에는 언제든지 당사 기술 지원팀에 문의하시기 바랍니다.

이 부분에서는 Adapter를 사용하는 기타 인터페이스에 대해 소개하겠습니다. 구체적으로 다음 인터페이스를 포함합니다:

알림 서비스

Mech-Viz 프로젝트가 특정 분기 또는 특정 스텝으로 실행될 때 Adapter 프로그램의 해당 함수를 호출하려는 경우 Mech-Viz에 알림 스텝을 추가할 수 있습니다.

예시

예를 들어, Adapter에서 이미 하역된 파렛트의 수량을 1씩 증가시키는 함수를 작성한다면, 디팔레타이징 과정의 마지막 스텝 뒤에 “알림” 스텝을 추가하여 여기에 도달하면 Adapter를 트리거하고 해당 함수를 호출할 수 있습니다. 이 기능을 구현하는 예시는 다음과 같습니다.

  1. NotifyService를 상속하는 클래스를 작성하십시오.

    from interface.services import NotifyService, register_service
    
    class NotifyService(NotifyService):
        service_type = "notify"
        service_name = "FANUC_M410IC_185_COMPACT"
    
        def __init__(self, update_success_num, update_fail_num):
            self.update_success_num = update_success_num
            self.update_fail_num = update_fail_num
    
        def handle_message(self, msg):
            if msg = "Success":
                self.update_success_num()
            elif msg = "Fail":
                self.update_fail_num()
    python

    이 알림은 다음 기능을 수행할 수 있습니다. Mech-Viz가 "Success"을 보내는 알림 스텝까지 실행되면 Adapter는 update_success_num() 함수를 호출하며 "Fail" 을 보내는 알림 스텝까지 실행되면 Adapter는 update_fail_num() 함수를 호출합니다.

  2. Mech-Viz 메인 프로그램을 컨트롤하는 클래스에서 NotifyService 클래스를 인스턴스화하고 이 서비스를 등록합니다.

    class MyClient(TcpClientAdapter):
    
         def __init__(self, host_address):
             super().__init__(host_address)
             self._register_service()
    
         def _register_service(self):
             self.robot_service = NotifyService(self.update_success_num, self.update_fail_num)
             self.server, port = register_service(self.hub_caller, self.robot_service)
    
         def update_success_num(self):
             # the num of unstack successfully plus 1
             self.success_num += 1
    
         def update_fail_num(self):
             # the num of unstack fiplus 1
             self.fail_num += 1
    python
  3. Mech-Viz의 적당한 위치에 대응하는 “알림” 스텝을 추가하십시오.

    “알림” 스텝에 대해 가장 중요한 것은 Adapter 명칭 및 *메시지*를 입력하는 것입니다. 이 두 파라미터의 값은 NotifyService 클래스 중의 service_name 및 msg 값과 일치해야 합니다.

    프로그램이 실행되면 Mech-Center 인터페이스에 service_type 및 service_name이 나타납니다. 이는 알림 서비스 등록이 성공했음을 나타냅니다.

VisionWatcher 서비스

Mech-Vision 실행 과정이 완료되면 결과가 출력됩니다. 예를 들어: vision result:{‘noCloudInRoi’: False, ‘function’: ‘posesFound’, ‘vision_name’: ‘TJTvision-3’}。 일부 비정상적인 상황의 경우 Adapter는 VisionWatcher 서비스를 통해 오류 메시지를 보낼 수 있습니다.

예시

  1. VisionResultSelectedAtService를 상속하는 클래스를 작성하십시오.

    from interface.services import VisionResultSelectedAtService, register_service
    
    class VisionWatcher(VisionResultSelectedAtService):
        def __init__(self, send_err_no_cloud):
            super().__init__()
            self.send_err_no_cloud = send_err_no_cloud
    
        def poses_found(self,result):
            has_cloud_in_roi = not result.get("noCloudInRoi", False)
    
            if not has_cloud_in_roi:
                time.sleep(2)
                self.send_err_no_cloud()
    python

    하위 클래스 VisionWatcher는 상위 클래스의 poses_found() 함수를 다시 작성해야 하므로 Adapter에서 send_err_no_cloud()(오류 정보를 전송하는 함수)호출하는 논리가 poses_found() 에서 변할 것입니다. 실행 시 Mech-Vision이 반환한 포즈의 값은 poses_found()의 result 파라미터로 전송됩니다.

  2. Mech-Viz 메인 프로그램을 컨트롤하는 클래스에서 VisionWatcher를 인스턴스화하십시오.

    class MyClient(TcpClientAdapter):
        def __init__(self, host_address):
            super().__init__(host_address)
            self._register_service()
        def _register_service(self):
            self.robot_service = VisionWatcher(self.send_err_no_cloud)
            self.server, port = register_service(self.hub_caller, self.robot_service)
    
        def send_err_no_cloud(self):
            # send no cloud error message
            self.send("12,NoCloudErr,done".encode())
    python

    VisionWatcher 클래스를 인스턴스화하는 과정에 send_err_no_cloud() 함수를 파라미터로 VisionWatcher()에 전송합니다. 포인트 클라우드가 표시되지 않으면 poses_found()의 논리에 따라 오류 메시지를 보내는 함수가 호출됩니다.

    프로그램이 실행되면 등록된 서비스가 Mech-Center 인터페이스에 나타납니다. 그러면 Adapter가 VisionWatcher 서비스를 성공적으로 등록했음을 나타냅니다.

이 페이지가 도움이 되었습니까?

다음 방법을 통해 피드백을 보내주실 수 있습니다:

저희는 귀하의 개인정보를 소중히 다룹니다.

당사 웹사이트는 최상의 사용자 경험을 제공하기 위해 쿠키를 사용하고 있습니다. "모두 수락"을 클릭하시면 쿠키 사용에 동의하시는 것이며, "모두 거부"를 클릭하시면 이 웹사이트 방문 시 귀하의 정보가 추적되거나 기억되지 않도록 단일 쿠키만 사용됩니다.