feat(fanuc): 优化 J519 实时下发与飞拍起停整形

- 改为高优先级 J519 接收线程与复用缓冲区发送链路
- 增加稠密执行前的 J519 就绪重试与状态诊断
- 修正程序状态响应字段顺序与 EnableRobot 默认参数
- 为飞拍轨迹补充平滑起停时间轴与首尾整形验证
- 补充真实运行配置、报警窗口与边界对比测试
- 同步更新限值文档、分析脚本与 .NET 8 SDK 固定配置
This commit is contained in:
2026-05-06 22:37:31 +08:00
parent 783716ff44
commit 70b0ccd414
17 changed files with 1629 additions and 117 deletions

View File

@@ -112,6 +112,23 @@ def read_joint_rows(path: Path) -> list[list[float]]:
return rows
def trim_rows_to_limit_count(rows: list[list[float]], limit_count: int) -> tuple[list[list[float]], str | None]:
joint_count = len(rows[0]) - 1
if joint_count == limit_count:
return rows, None
if joint_count < limit_count:
raise ValueError(f"Joint column count ({joint_count}) is smaller than robot limit count ({limit_count}).")
trimmed_rows = [row[: limit_count + 1] for row in rows]
ignored_joint_count = joint_count - limit_count
trim_note = (
f"ignored_joint_columns={ignored_joint_count} "
f"(using first {limit_count} joints out of {joint_count}; trailing columns treated as external axes/placeholders)"
)
return trimmed_rows, trim_note
def infer_unit(rows: Iterable[list[float]], requested_unit: str) -> str:
if requested_unit != "auto":
return requested_unit
@@ -367,6 +384,7 @@ def build_report_text(
unit: str,
max_abs_joint: float,
limit_source_text: str,
trim_note: str | None,
velocity_peaks: list[PeakMetric],
acceleration_peaks: list[PeakMetric],
jerk_peaks: list[PeakMetric],
@@ -378,14 +396,20 @@ def build_report_text(
f"joint_count={len(rows[0]) - 1}",
f"inferred_unit={unit}",
f"max_abs_joint_value={max_abs_joint:.6f}",
"",
build_metric_section("Velocity Peaks", velocity_peaks, unit, "s", "s", "VelLimit(rad/s)"),
"",
build_metric_section("Acceleration Peaks", acceleration_peaks, unit, "s^2", "s^2", "AccLimit(rad/s^2)"),
"",
build_metric_section("Jerk Peaks", jerk_peaks, unit, "s^3", "s^3", "JerkLimit(rad/s^3)"),
"",
]
if trim_note is not None:
lines.append(trim_note)
lines.extend(
[
"",
build_metric_section("Velocity Peaks", velocity_peaks, unit, "s", "s", "VelLimit(rad/s)"),
"",
build_metric_section("Acceleration Peaks", acceleration_peaks, unit, "s^2", "s^2", "AccLimit(rad/s^2)"),
"",
build_metric_section("Jerk Peaks", jerk_peaks, unit, "s^3", "s^3", "JerkLimit(rad/s^3)"),
"",
]
)
return "\n".join(lines)
@@ -393,8 +417,9 @@ def main() -> int:
args = parse_args()
joint_detail_path = resolve_path(args.joint_detail)
rows = read_joint_rows(joint_detail_path)
unit = infer_unit(rows, args.unit)
limits_info = load_effective_limits(args.limit_csv)
rows, trim_note = trim_rows_to_limit_count(rows, len(limits_info.joints))
unit = infer_unit(rows, args.unit)
velocity_peaks = calculate_velocity_peaks(rows, unit, limits_info.joints)
acceleration_peaks = calculate_acceleration_peaks(rows, unit, limits_info.joints)
@@ -413,6 +438,7 @@ def main() -> int:
unit=unit,
max_abs_joint=max_abs_joint,
limit_source_text=limit_source_text,
trim_note=trim_note,
velocity_peaks=velocity_peaks,
acceleration_peaks=acceleration_peaks,
jerk_peaks=jerk_peaks,