인터페이스를 획득하기
Mech-Viz 프로젝트에 사용되는 스텝을 획득하기
Mech-Viz 프로젝트에 사용되는 스텝을 획득하기 위한 함수는 아래와 같습니다.
def get_viz_task_names(self, msg={}, timeout=None):
result = self.call_viz("getAllTaskNames", msg, timeout)
logging.info("Property result: {}".format(json.loads(result)))
return result
get_viz_task_names()를 호출한 후 json 형식의 문자열을 반환해 획득한 모든 스텝을 나타냅니다.
Mech-Viz 또는 Mech-Vision 프로젝트에 사용되는 파라미터를 획득하기
Mech-Viz 또는 Mech-Vision 프로젝트에 사용되는 파라미터를 획득하기 위한 함수는 아래와 같습니다.
def get_property_info(self, msg={}, get_viz=True, timeout=None):
result = (self.call_viz if get_viz else self.call_vision)("getPropertyInfo", msg, timeout)
logging.info("{0} property result: {1}".format("Viz" if get_viz else "Vision", json.loads(result)))
return result
함수를 호출할 때 msg 파라미터 중의 “type”를 지정하지 않으면 모든 파라미터를 획득합니다. 지정하면 지정된 파라미터만 획득합니다. 예를 들어, get_property_info(msg={"type": "move"})를 호출하면 반환한 json 포맷 문자열은 획득된 이동 스텝 파라미터를 의미합니다.
Mech-Vision 또한 Mech-Viz 실행 상태를 획득하기
Adapter 유형의 on_exec_status_changed() 함수는 Mech-Vision 또한 Mech-Viz 실행 상태를 획득하는 데 사용됩니다. Mech-Vision 또한 Mech-Viz 실행이 매번 완료 때마다 실행 정보는 on_exec_status_changed() 함수를 통해 Adapter에게 전송됩니다. 따라서 on_exec_status_changed() 함수는 Mech-Vision 또한 Mech-Viz 프로젝트 실행이 완료 후에 호출됩니다. 구체적인 코드는 다음과 같습니다.
def on_exec_status_changed(self, req_dict, err_dict=None):
project_dir = req_dict.get(jk.project_dir, "")
source_app = req_dict.get(jk.source_app, "")
exit_info = req_dict.get(jk.exit_info, {})
error_code = exit_info.get(jk.error_code, "")
msg = exit_info.get(jk.msg, "")
project_dict = self.get_vision_projects_dict()
if source_app == jk.mech_vision and project_dir in project_dict.values():
project_num = list(project_dict.keys())[list(project_dict.values()).index(project_dir)]
elif source_app == jk.mech_viz:
project_num = 0
else:
return
self.err_dict[project_num] = [error_code, msg] if error_code and error_code[-4:] != "0000" else None
if err_dict:
err_dict[project_num] = [error_code, msg] if error_code and error_code[-4:] != "0000" else None
위 코드에서 다음 변수에 대한 설명은 다음 표에 나와 있습니다.
변수 이름 | 설명 | ||
---|---|---|---|
jk.project_dir |
프로젝트의 경로입니다. |
||
jk.source_app |
상태 소스, 값은 Mech-Vision 또한 Mech-Viz입니다. |
||
jk.exit_info |
소프트웨어 종료에 대한 정보이며, 데이터 타입은 딕셔너리입니다. |
||
jk.error_code |
상태 코드 번호입니다. |
||
jk.msg |
상태 코드 번호에 해당하는 세부 정보입니다. |
||
project_dict |
프로젝트 저장에 대한 정보이며, 데이터 타입은 딕셔너리입니다. 예를 들어 {1:"simulate_vis"}는 Mech-Vision 프로젝트의 번호가 1이고 프로젝트 이름이 simulate_vis임을 의미합니다.
|
jk.error_code (상태 코드 번호) 두 가지 유형(Mech-Vision 및 Mech-Viz)으로 나눌 수 있으며, 아래 표와 같습니다.
유형 | 상태 코드 번호 | 상태 코드 번호에 해당하는 간단한 정보 |
---|---|---|
Mech-Vision와 관련된 상태 코드 |
CV-EXXXX |
VISION_RUN_ERROR |
CV-E0201 |
VISION_CAMERA_CONNECT_FAIL |
|
CV-E0401 |
VISION_RECIPE_NOT_SET |
|
CV-E0403 |
VISION_RECP_NUM_OUT_RANGE |
|
MP-EXXXX |
VISION_PLANNER_RUN_ERROR |
|
MP-E0001 |
VISION_PLANNER_PLAN_FAILED |
|
MP-E0005 |
VISION_PLANNER_NOT_REACHABLE |
|
MP-E0008 |
VISION_PLANNER_SINGULARITY |
|
MP-E0011 |
VISION_PLANNER_COLLISION |
|
MP-E0019 |
VISION_PLANNER_NO_TARGET_IN_VISUALMOVE |
|
MP-E0021 |
VISION_PLANNER_VISION_SERVER_NOT_REGISTED |
|
MP-E0022 |
VISION_PLANNER_SET_TOOL_INVALID |
|
Mech-Viz와 관련된 상태 코드 |
MP-EXXXX |
VIZ_RUN_ERROR |
MP-E0001 |
VIZ_PLAN_FAILED |
|
MP-E0005 |
VIZ_NOT_REACHABLE |
|
MP-E0008 |
VIZ_SINGULARITY |
|
MP-E0011 |
VIZ_COLLISION |
|
MP-E0016 |
VIZ_VISION_NO_RESULT |
|
MP-E0017 |
VIZ_VISION_NOT_CALLED |
|
MP-E0018 |
VIZ_VISION_NO_CLOUD_IN_ROI |
|
MP-E0019 |
VIZ_NO_TARGET_IN_VISUALMOVE |
|
MP-E0020 |
VIZ_VISION_REUSE_PLAN_FAILED |
|
MP-E0021 |
VIZ_VISION_SERVER_NOT_REGISTED |
|
MP-E0022 |
VIZ_SET_TOOL_INVALID |
|
MP-E0023 |
VIZ_BRANCH_OUTPORT_ERROR |
또한, 사용자는 on_exec_status_changed() 함수를 상속하여 self.err_dict를 처리할 수 있습니다. 샘플 코드는 다음과 같습니다.
def on_exec_status_changed(self, req_dict, err_dict=None):
super().on_exec_status_changed(req_dict, err_dict)
err_list = self.err_dict.get(0, [])
if err_list and err_list[0] not in ["MP-E0020"]:
self.handle_viz_error()