improvment

This commit is contained in:
gitea 2024-09-25 11:30:12 +08:00
parent f0c038f744
commit 65bd6f2bce
3 changed files with 73 additions and 104 deletions

View File

@ -2,12 +2,5 @@
"id": "xxxxxxxxxxx", "id": "xxxxxxxxxxx",
"module": "safety", "module": "safety",
"command": "collision.set_params", "command": "collision.set_params",
"data": { "data": null
"enable": false,
"mode": 0,
"coeff": [0,0,0,0,0,0,0],
"coeff_level": 0,
"action": 1,
"percent": 1
}
} }

View File

@ -8,6 +8,7 @@ def initialization():
hr = openapi.HmiRequest() hr = openapi.HmiRequest()
pd = openapi.PreDos() pd = openapi.PreDos()
# 推送配置文件 # 推送配置文件
clibs.logger.info("推送配置文件 fieldbus_device.json/registers.json/registers.xml 到控制器,并配置 IO 设备,设备号为 5...")
robot_params = hr.get_robot_params robot_params = hr.get_robot_params
robot_type = robot_params["robot_type"] robot_type = robot_params["robot_type"]
security_type = robot_params["security_type"] security_type = robot_params["security_type"]
@ -55,33 +56,41 @@ def initialization():
md.r_soft_estop(1) md.r_soft_estop(1)
# 断开示教器连接 # 断开示教器连接
clibs.logger.info("断开示教器连接...")
hr.switch_tp_mode("without") hr.switch_tp_mode("without")
# 清空 system IO 配置 # 清空 system IO 配置
clibs.logger.info("清空所有的 System IO 功能配置...")
hr.update_system_io_configuration([], [], [], [], []) hr.update_system_io_configuration([], [], [], [], [])
# 关闭缩减模式 # 关闭缩减模式
md.r_reduced_mode(0) md.r_reduced_mode(0)
# 关闭安全区域 # 关闭安全区域
clibs.logger.info("正在关闭所有的安全区,并关闭总使能开关...")
hr.set_safety_area_overall(False) hr.set_safety_area_overall(False)
hr.set_safety_area_signal(False) hr.set_safety_area_signal(False)
for i in range(10): for i in range(10):
hr.set_safety_area_enable(i, False) hr.set_safety_area_enable(i, False)
# 打开外部通信 # 打开外部通信
clibs.logger.info("配置并打开外部通信默认服务器8080端口后缀为 \"\\r\"...")
hr.set_socket_params(True, "", "name", "8080", "\r", 1, True, True, 0, 10) hr.set_socket_params(True, "", "name", "8080", "\r", 1, True, True, 0, 10)
# 关闭拖动 # 关闭拖动
clibs.logger.info("关闭拖动模式...")
hr.set_drag_params(False, 1, 2) hr.set_drag_params(False, 1, 2)
# 关闭碰撞检测 # 关闭碰撞检测
clibs.logger.info("关闭碰撞检测...")
hr.set_collision_params(False, 0, 1, 100) hr.set_collision_params(False, 0, 1, 100)
# 清除所有错误码 # 清除所有过滤错误码
clibs.logger.info("清除所有过滤错误码设定...")
hr.set_filtered_error_code("clear", []) hr.set_filtered_error_code("clear", [])
# 回拖动位姿 # 回拖动位姿
clibs.logger.info("正在回拖动位姿...")
hr.switch_operation_mode("manual") hr.switch_operation_mode("manual")
hr.switch_motor_state("on") hr.switch_motor_state("on")
hr.set_quickturn_pos(enable_drag=True) hr.set_quickturn_pos(enable_drag=True)

View File

@ -37,10 +37,9 @@ class ModbusRequest(object):
self.__reg_high_pulse(40001) self.__reg_high_pulse(40001)
clibs.logger.info("40001-010 执行复位急停状态(非软急停)") clibs.logger.info("40001-010 执行复位急停状态(非软急停)")
def r_reset_estop_clear_alarm(self): # NG def r_reset_estop_clear_alarm(self): # OK
clibs.logger.critical("[NG]-40002-010 该指令暂时有问题,运行会导致后台 xCore 崩溃,待修复...") self.__reg_high_pulse(40002)
# self.__reg_high_pulse(40002) clibs.logger.info("40002-010 执行复位急停状态(非软急停),并清除告警信息")
# clibs.logger.info("[NG]-40002-010 执行复位急停状态(非软急停),并清除告警信息")
def r_motor_off(self): # OK def r_motor_off(self): # OK
self.__reg_high_pulse(40003) self.__reg_high_pulse(40003)
@ -296,7 +295,7 @@ class HmiRequest(object):
self.__t_is_alive = Thread(target=self.__is_alive) self.__t_is_alive = Thread(target=self.__is_alive)
self.__t_is_alive.daemon = False self.__t_is_alive.daemon = False
self.__t_is_alive.start() self.__t_is_alive.start()
sleep(1) # 很重要,必须有,因为涉及到建联成功与否 sleep(2) # 很重要,必须有,因为涉及到建联成功与否
def __is_alive(self): def __is_alive(self):
first_time = True first_time = True
@ -649,7 +648,7 @@ class HmiRequest(object):
def log_reqs(request): def log_reqs(request):
with open(clibs.log_data_reqs, mode="a", encoding="utf-8") as f_log: with open(clibs.log_data_reqs, mode="a", encoding="utf-8") as f_log:
log_time = strftime("%Y-%m-%d %H:%M:%S", localtime(time())) log_time = strftime("%Y-%m-%d %H:%M:%S", localtime(time()))
f_log.write(" ".join([log_time, dumps(req), "\n"])) f_log.write(" ".join([log_time, dumps(request), "\n"]))
if protocol_flag == 0: # for old protocols if protocol_flag == 0: # for old protocols
req = None req = None
@ -712,11 +711,7 @@ class HmiRequest(object):
req["data"]["enable_home"] = kwargs["enable_home"] req["data"]["enable_home"] = kwargs["enable_home"]
req["data"]["enable_drag"] = kwargs["enable_drag"] req["data"]["enable_drag"] = kwargs["enable_drag"]
req["data"]["enable_transport"] = kwargs["enable_transport"] req["data"]["enable_transport"] = kwargs["enable_transport"]
req["data"]["joint_home"] = kwargs["joint_home"]
req["data"]["joint_drag"] = kwargs["joint_drag"]
req["data"]["joint_transport"] = kwargs["joint_transport"]
req["data"]["end_posture"] = kwargs["end_posture"] req["data"]["end_posture"] = kwargs["end_posture"]
req["data"]["home_error_range"] = kwargs["home_error_range"]
case "move.quick_turn": case "move.quick_turn":
req["data"]["name"] = kwargs["name"] req["data"]["name"] = kwargs["name"]
case "move.stop": case "move.stop":
@ -745,27 +740,11 @@ class HmiRequest(object):
case "move.set_monitor_cfg": case "move.set_monitor_cfg":
req["data"]["ref_coordinate"] = kwargs["ref_coordinate"] req["data"]["ref_coordinate"] = kwargs["ref_coordinate"]
case "move.set_params": case "move.set_params":
req["data"]["JOINT_MAX_SPEED"] = kwargs["JOINT_MAX_SPEED"] req["data"] = kwargs["data"]
req["data"]["JOINT_MAX_ACC"] = kwargs["JOINT_MAX_ACC"]
req["data"]["JOINT_MAX_JERK"] = kwargs["JOINT_MAX_JERK"]
req["data"]["TCP_MAX_SPEED"] = kwargs["TCP_MAX_SPEED"]
req["data"]["DEFAULT_ACC_PARAMS"] = kwargs["DEFAULT_ACC_PARAMS"]
req["data"]["VEL_SMOOTH_FACTOR"] = kwargs["VEL_SMOOTH_FACTOR"]
req["data"]["ACC_RAMPTIME_JOG"] = kwargs["ACC_RAMPTIME_JOG"]
case "move.set_quickstop_distance": case "move.set_quickstop_distance":
req["data"]["distance"] = kwargs["distance"] req["data"]["distance"] = kwargs["distance"]
case "collision.set_params": case "collision.set_params":
req["data"]["enable"] = kwargs["enable"] req["data"] = kwargs["data"]
req["data"]["mode"] = kwargs["mode"]
req["data"]["action"] = kwargs["action"]
req["data"]["percent"] = kwargs["percent"]
req["data"]["coeff"] = kwargs["coeff"]
req["data"]["coeff_level"] = kwargs["coeff_level"]
req["data"]["percent_axis"] = kwargs["percent_axis"]
req["data"]["fallback_distance"] = kwargs["fallback_distance"]
req["data"]["compliance"] = kwargs["compliance"]
req["data"]["reduced_percent"] = kwargs["reduced_percent"]
req["data"]["reduced_percent_axis"] = kwargs["reduced_percent_axis"]
case "collision.set_state": case "collision.set_state":
req["data"]["collision_state"] = kwargs["collision_state"] req["data"]["collision_state"] = kwargs["collision_state"]
case "controller.set_params": case "controller.set_params":
@ -947,35 +926,28 @@ class HmiRequest(object):
6 工具坐标系Z轴与地面垂直正向朝上 6 工具坐标系Z轴与地面垂直正向朝上
:return: as below :return: as below
{ {
"enable_home": false, "enable_home": false, // 是否开启 home 点快速调整
"enable_drag": false, "enable_drag": false, // 是否开启拖动位姿点快速调整
"enable_transport": false, "enable_transport": false, // 是否开启发货位姿点快速调整
"joint_home": [0.0,0.0,0.0,0.0,0.0,0.0,0.0], "joint_home": [0.0,0.0,0.0,0.0,0.0,0.0,0.0], // home 位姿的关节角度
"joint_drag": [0.0,0.0,0.0,0.0,0.0,0.0,0.0], "joint_drag": [0.0,0.0,0.0,0.0,0.0,0.0,0.0], // 拖动位姿的关节角度
"joint_transport": [0.0,0.0,0.0,0.0,0.0,0.0,0.0], "joint_transport": [0.0,0.0,0.0,0.0,0.0,0.0,0.0], // 发货位姿的关节角度
"end_posture":0, "end_posture":0, // 末端姿态的调整方式取值 0-6
"home_error_range":[0.0,0.0,0.0,0.0,0.0,0.0,0.0] "home_error_range":[0.0,0.0,0.0,0.0,0.0,0.0,0.0] // home点误差范围
} }
""" """
return self.__get_data(currentframe().f_code.co_name, "move.get_quickturn_pos") return self.__get_data(currentframe().f_code.co_name, "move.get_quickturn_pos")
def set_quickturn_pos(self, enable_home: bool=False, enable_drag: bool=False, enable_transport: bool=False, def set_quickturn_pos(self, enable_home: bool = False, enable_drag: bool = False, enable_transport: bool = False, end_posture: int = 0):
joint_home: list=[0.0,0.0,0.0,0.0,0.0,0.0,0.0], joint_drag: list=[0.0,0.0,0.0,0.0,0.0,0.0,0.0],
joint_transport: list=[0.0,0.0,0.0,0.0,0.0,0.0,0.0], end_posture: int=0,
home_error_range: list=[0.0,0.0,0.0,0.0,0.0,0.0,0.0]):
""" """
设置机器人的home位姿拖动位姿发货位姿轴关节角度Home点误差范围详见上一个 get_quickturn_pos 功能实现 设置机器人的home位姿拖动位姿发货位姿轴关节角度Home点误差范围详见上一个 get_quickturn_pos 功能实现
:param enable_home: 是否开启 home 点快速调整 :param enable_home: 是否开启 home 点快速调整
:param enable_drag: 是否开启拖动位姿点快速调整 :param enable_drag: 是否开启拖动位姿点快速调整
:param enable_transport:是否开启发货位姿点快速调整 :param enable_transport:是否开启发货位姿点快速调整
:param joint_home: home 位姿的关节角度
:param joint_drag: 拖动位姿的关节角度
:param joint_transport: 发货位姿的关节角度
:param end_posture: 末端姿态的调整方式取值 0-6详见 get_quickturn_pos 注释 :param end_posture: 末端姿态的调整方式取值 0-6详见 get_quickturn_pos 注释
:param home_error_range: home点误差范围
:return: None :return: None
""" """
self.execution("move.set_quickturn_pos", enable_home=enable_home, enable_drag=enable_drag, enable_transport=enable_transport, joint_home=joint_home, joint_drag=joint_drag, joint_transport=joint_transport, end_posture=end_posture, home_error_range=home_error_range) self.execution("move.set_quickturn_pos", enable_home=enable_home, enable_drag=enable_drag, enable_transport=enable_transport, end_posture=end_posture)
def move2quickturn(self, name: str): def move2quickturn(self, name: str):
""" """
@ -1023,7 +995,7 @@ class HmiRequest(object):
""" """
self.execution("jog.set_params", step=step, override=override, space=space) self.execution("jog.set_params", step=step, override=override, space=space)
def start_jog(self, index: int, direction: bool=False, is_ext: bool=False): def start_jog(self, index: int, direction: bool = False, is_ext: bool = False):
""" """
开始 JOG 运动 开始 JOG 运动
:param index: 0-6若选轴空间 0-6 对应 1-7 若选笛卡尔空间 0-6 对应 xyzabc elb :param index: 0-6若选轴空间 0-6 对应 1-7 若选笛卡尔空间 0-6 对应 xyzabc elb
@ -1416,43 +1388,42 @@ class HmiRequest(object):
获取机器人的运动参数包括减速比耦合比最大速度加速度加加速度acc ramp time规划步长等信息 获取机器人的运动参数包括减速比耦合比最大速度加速度加加速度acc ramp time规划步长等信息
:return: :return:
{ {
"MOTION":{ "MOTION": {
"JOINT_MAX_SPEED": [90, 90, 120, 120, 120, 120, 120], "ACC_RAMPTIME_JOG": 0.5,
"JOINT_MAX_ACC": [200, 200, 200, 200, 200, 200, 200], "ACC_RAMPTIME_STOP": 0.5,
"JOINT_MAX_JERK": [2000, 2000, 2000, 2000, 2000, 2000, 2000], "DEFAULT_ACC_PARAMS": [1.0, 0.5],
"TCP_MAX_SPEED": 500, "JERK_LIMIT_CART": 0,
"JERK_LIMIT_JOINT": 0,
"JERK_LIMIT_ROT": 0,
"JOINT_MAX_ACC": [500, 500, 1000, 1000, 1000],
"JOINT_MAX_JERK": [2000, 2000, 2000, 4000, 4000, 4000],
"JOINT_MAX_SPEED": [120.0, 120.0, 180.0, 180.0, 180.0, 180.0],
"MAX_ACC_PARAMS": [1.0, 1],
"MIN_ACC_PARAMS": [0.3, 0.05],
"TCP_MAX_ACC": 5000, "TCP_MAX_ACC": 5000,
"TCP_MAX_JERK": 10000, "TCP_MAX_JERK": 10000,
"TCP_ROTATE_MAX_SPEED": 180, "TCP_MAX_SPEED": 1000,
"TCP_ROTATE_MAX_ACC": 1800, "TCP_ROTATE_MAX_ACC": 1800,
"TCP_ROTATE_MAX_JERK": 3600, "TCP_ROTATE_MAX_JERK": 3600,
"JERK_LIMIT_CART": 0, "TCP_ROTATE_MAX_SPEED": 180,
"JERK_LIMIT_ROT": 0, "VEL_SMOOTH_FACTOR": 1.0,
"JERK_LIMIT_JOINT": 0, "VEL_SMOOTH_FACTOR_RANGE": [1.0, 10.0]
"MAX_ACC_PARAMS": [1.0, 0.1], }
"MIN_ACC_PARAMS": [0.3, 0.5],
"DEFAULT_ACC_PARAMS": [1.0, 0.35],
"VEL_SMOOTH_FACTOR": 3.33,
"VEL_SMOOTH_FACTOR_RANGE": [1.0, 10.0],
"ACC_RAMPTIME_JOG": 0.01
}
} }
""" """
return self.__get_data(currentframe().f_code.co_name, "move.get_params") return self.__get_data(currentframe().f_code.co_name, "move.get_params")
def set_move_params(self, JOINT_MAX_SPEED, JOINT_MAX_ACC, JOINT_MAX_JERK, TCP_MAX_SPEED, DEFAULT_ACC_PARAMS, VEL_SMOOTH_FACTOR, ACC_RAMPTIME_JOG): def set_move_params(self, **kwargs):
""" """
设置机器人的运动参数轴最大速度轴最大加加速度速度加加速度加速度加加速度acc ramp time规划步长等信息 设置机器人的运动参数轴最大速度轴最大加加速度速度加加速度加速度加加速度acc ramp time规划步长等信息
:param JOINT_MAX_SPEED:
:param JOINT_MAX_ACC:
:param JOINT_MAX_JERK:
:param TCP_MAX_SPEED:
:param DEFAULT_ACC_PARAMS:
:param VEL_SMOOTH_FACTOR:
:param ACC_RAMPTIME_JOG:
:return: :return:
""" """
self.execution("move.set_params", JOINT_MAX_SPEED=JOINT_MAX_SPEED, JOINT_MAX_ACC=JOINT_MAX_ACC, JOINT_MAX_JERK=JOINT_MAX_JERK, TCP_MAX_SPEED=TCP_MAX_SPEED, DEFAULT_ACC_PARAMS=DEFAULT_ACC_PARAMS, VEL_SMOOTH_FACTOR=VEL_SMOOTH_FACTOR, ACC_RAMPTIME_JOG=ACC_RAMPTIME_JOG) res = self.get_move_params
keys = res.keys()
for _ in keys:
if _ in kwargs.keys():
res[_] = kwargs[_]
self.execution("move.set_params", data=res)
@property @property
def get_quick_stop_distance(self): def get_quick_stop_distance(self):
@ -1479,40 +1450,37 @@ class HmiRequest(object):
获取碰撞检测相关参数 获取碰撞检测相关参数
:return: :return:
{ {
"action": 1, // 触发行为 - 1 安全停止 2 暂停停止 3 柔顺停止 "action": 1, // 触发行为1-安全停止2-触发暂停3-柔顺停止
"coeff": [100, 100, 100, 100, 100, 100], "coeff": [100, 100, 100, 100, 100, 100], // 0-整机灵敏度百分比1-单轴灵敏度百分比2-单轴和整机灵敏度百分比
"coeff_level": 0, "coeff_level": 0, // 灵敏度等级0-1-2-
"compliance": 0, "compliance": 0, // 柔顺功能比例系数[0-1]
"enable": true, "enable": true, // 功能使能开关
"fallback_distance": 3, "fallback_distance": 3, // 回退距离
"mode": 0, "mode": 0, // 力传感器系数0 整机 1 单轴
"percent": 100, "percent": 100, // 0-200整机灵敏度百分比
"percent_axis": [100, 100, 100, 100, 100, 100], "percent_axis": [100, 100, 100, 100, 100, 100], // 0-200单轴灵敏度百分比
"reduced_percent": 100, "reduced_percent": 100, // 0-200整机缩减模式灵敏度百分比
"reduced_percent_axis": [100, 100, 100, 100, 100, 100] "reduced_percent_axis": [100, 100, 100, 100, 100, 100] // 0-200单轴缩减模式灵敏度百分比
} }
""" """
return self.__get_data(currentframe().f_code.co_name, "collision.get_params") return self.__get_data(currentframe().f_code.co_name, "collision.get_params")
def set_collision_params(self, enable, mode, action, percent, coeff=0, coeff_level=0, def set_collision_params(self, enable, mode, action, percent, **kwargs):
percent_axis=[100, 100, 100, 100, 100, 100], fallback_distance=5, compliance=0,
reduced_percent=100, reduced_percent_axis=[100, 100, 100, 100, 100, 100]):
""" """
设置碰撞检测相关参数 设置碰撞检测相关参数
:param enable: 功能使能开关 :param enable: 功能使能开关
:param mode: 力传感器系数0 整机 1 单轴 :param mode: 力传感器系数0 整机 1 单轴
:param coeff: 0-整机灵敏度百分比1-使用单轴灵敏度百分比2-使用单轴和整机灵敏度百分比 :param action: 触发行为1-安全停止2-触发暂停3-柔顺停止
:param coeff_level: 灵敏度等级0-1-2-
:param action: 触发行为1-安全停止2-触发暂停3-柔顺停止
:param percent: 0-200整机灵敏度百分比 :param percent: 0-200整机灵敏度百分比
:param percent_axis: 0-200单轴灵敏度百分比
:param fallback_distance: 回退距离
:param compliance: 柔顺功能比例系数[0-1]
:param reduced_percent: 0-200整机缩减模式灵敏度百分比
:param reduced_percent_axis: 0-200单轴缩减模式灵敏度百分比
:return: :return:
""" """
self.execution("collision.set_params", enable=enable, mode=mode, action=action, percent=percent, coeff=coeff, coeff_level=coeff_level, percent_axis=percent_axis, fallback_distance=fallback_distance, compliance=compliance, reduced_percent=reduced_percent, reduced_percent_axis=reduced_percent_axis) res = self.get_collision_params
keys = res.keys()
kwargs.update({"enable": enable, "mode": mode, "action": action, "percent": percent})
for _ in keys:
if _ in kwargs.keys():
res[_] = kwargs[_]
self.execution("collision.set_params", data=res)
def set_collision_state(self, collision_state: bool): def set_collision_state(self, collision_state: bool):
""" """
@ -2000,7 +1968,6 @@ class ExternalCommunication(object):
def reduced_mode_state(self): def reduced_mode_state(self):
return self.__exec_cmd("reduced_mode_state", "获取缩减模式状态") return self.__exec_cmd("reduced_mode_state", "获取缩减模式状态")
@property
def get_io_state(self, io_list: str): # DO0_0,DI1_3,DO2_5不能有空格 def get_io_state(self, io_list: str): # DO0_0,DI1_3,DO2_5不能有空格
return self.__exec_cmd(f"io_state:{io_list}", "获取 IO 状态值") return self.__exec_cmd(f"io_state:{io_list}", "获取 IO 状态值")