Просмотр исходного кода

完善需求,写了点方案书

deepseek
ywh 1 месяц назад
Родитель
Сommit
a31b00b803
12 измененных файлов: 1731 добавлений и 60 удалений
  1. +4
    -4
      Document/PLSR_document/PLSR信捷对标追踪矩阵.md
  2. +1332
    -0
      Document/PLSR_document/PLSR方案设计书_V1.0.md
  3. Двоичные данные
      Document/PLSR_document/PLSR系统结构图.png
  4. +169
    -0
      Document/PLSR_document/PLSR系统结构图.svg
  5. +226
    -56
      Document/PLSR_document/PLSR需求规格统计_V1.3.md
  6. Двоичные данные
      Document/PLSR_document/STM32F4xx参考手册_RM0090_Rev22.pdf
  7. Двоичные данные
      Document/PLSR_document/~$设计方案书2.docx
  8. Двоичные данные
      Document/PLSR_document/~$需求规格书.docx
  9. Двоичные данные
      Document/PLSR_document/框图/系统框图.vsdx
  10. Двоичные данные
      Document/PLSR_document/设计方案书.doc
  11. Двоичные данные
      Document/PLSR_document/设计方案书.docx
  12. Двоичные данные
      Document/PLSR_document/设计方案书2.docx

+ 4
- 4
Document/PLSR_document/PLSR信捷对标追踪矩阵.md Просмотреть файл

@@ -22,7 +22,7 @@
| S0为可选择首地址的脉冲数据块 | 6~17 | 运行时指定未占用保持寄存器首地址,保持信捷固定相对布局 | 一比一实现 |
| S1为可选择首地址的用户参数块 | 17~18 | 在动态数据池中指定首地址,仅含相对/绝对和起始段 | 已纳入 |
| S2选择K0~K4 | 18~24、49 | 每轴提供0~4套参数 | 已纳入 |
| D选择脉冲输出端口 | 49 | D选择轴、输出形式和输出点资源 | 增强 |
| D选择脉冲输出端口 | 49 | D选择Y0~Y3;PULSE/DIR一一对应Q0~Q3,AB/CW/CCW仅允许Y0或Y2并占用固定点对 | 等效实现 |

## 2. 脉冲和定位

@@ -73,7 +73,7 @@
| 短段自动形成三角曲线 | 55 | 自动压缩短距离曲线 | 已纳入 |
| 默认速度与加减速时间定义斜率 | 40、50 | 使用相同斜率模型 | 已纳入 |
| 起始速度和终止速度 | 43 | S2参数 | 已纳入 |
| 最高速度限制 | 22~24 | S2参数 | 已纳入 |
| 最高速度限制 | 22~24、49 | 高于S2最高速度时按最高速度限幅运行,并增加SPEED_CLAMPED告警 | 已纳入 |
| 最后一段动态变频后重算曲线 | 56 | 动态修改后重算剩余曲线 | 已纳入 |

## 5. 公共参数和输出方式
@@ -84,7 +84,7 @@
| 方向输出点 | 31、60等 | 从有效未占用Q点配置 | 等效实现 |
| 方向延时 | 31、41 | 默认10 ms,单位ms可配置 | 已纳入 |
| PULSE/DIR | 29、49 | 最多四轴 | 已纳入 |
| AB相输出 | 29、70等 | 最多两轴,一个完整正交周期计1个指令脉冲 | 增强 |
| AB相输出 | 29、70等 | D取Y0或Y2,使用Q0/Q1或Q2/Q3固定点对;一个完整正交周期计1个指令脉冲 | 增强 |
| 脉冲单位 | 28~29 | 支持脉冲模式 | 已纳入 |
| 1 μm、0.01/0.1/1 mm当量 | 28 | 内核直接换算并保存余数 | 增强 |
| 每转脉冲数和每转移动量 | 28、60等 | 公共参数 | 已纳入 |
@@ -94,7 +94,7 @@
| 补偿加减速时间 | 41 | S2参数 | 已纳入 |
| FOLLOW性能参数 | 23~24、44 | 范围1~100 | 已纳入 |
| FOLLOW前馈补偿 | 23~24、44 | 范围0~100% | 已纳入 |
| 0.1 ms/1 ms刷新 | 24、44 | S2配置,独立硬件控制周期 | 增强 |
| 0.1 ms/1 ms刷新 | 22~24、44 | S2配置,独立硬件控制周期 | 已纳入 |

## 6. 监控、事件和本项目增强



+ 1332
- 0
Document/PLSR_document/PLSR方案设计书_V1.0.md
Разница между файлами не показана из-за своего большого размера
Просмотреть файл


Двоичные данные
Document/PLSR_document/PLSR系统结构图.png Просмотреть файл

До После
Ширина: 1600  |  Высота: 1000  |  Размер: 213 KiB

+ 169
- 0
Document/PLSR_document/PLSR系统结构图.svg Просмотреть файл

@@ -0,0 +1,169 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="1600" height="1000" viewBox="0 0 1600 1000" role="img" aria-labelledby="title desc">
<title id="title">PLSR系统结构图</title>
<desc id="desc">展示PLSR调用访问、参数提交、四轴运动控制、OS控制面、硬实时中断面、数据服务以及STM32F407板级输出之间的关系。</desc>

<defs>
<linearGradient id="background" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#F7FAFF"/>
<stop offset="1" stop-color="#EEF3FA"/>
</linearGradient>
<linearGradient id="coreGradient" x1="0" y1="0" x2="1" y2="1">
<stop offset="0" stop-color="#E8F2FF"/>
<stop offset="1" stop-color="#DCEBFF"/>
</linearGradient>
<filter id="shadow" x="-10%" y="-10%" width="120%" height="130%">
<feDropShadow dx="0" dy="5" stdDeviation="7" flood-color="#19385F" flood-opacity="0.14"/>
</filter>
<marker id="arrowBlue" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto" markerUnits="strokeWidth">
<path d="M0,0 L12,6 L0,12 z" fill="#2F6FB2"/>
</marker>
<marker id="arrowOrange" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto" markerUnits="strokeWidth">
<path d="M0,0 L12,6 L0,12 z" fill="#D46B20"/>
</marker>
<marker id="arrowGreen" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto" markerUnits="strokeWidth">
<path d="M0,0 L12,6 L0,12 z" fill="#34815C"/>
</marker>
<style>
.title { font: 700 34px "Microsoft YaHei", "Noto Sans CJK SC", sans-serif; fill: #17375E; }
.subtitle { font: 400 16px "Microsoft YaHei", "Noto Sans CJK SC", sans-serif; fill: #5B6F86; }
.layer-title { font: 700 22px "Microsoft YaHei", "Noto Sans CJK SC", sans-serif; fill: #17375E; }
.box-title { font: 700 18px "Microsoft YaHei", "Noto Sans CJK SC", sans-serif; fill: #17375E; }
.box-text { font: 400 14px "Microsoft YaHei", "Noto Sans CJK SC", sans-serif; fill: #435971; }
.small { font: 400 13px "Microsoft YaHei", "Noto Sans CJK SC", sans-serif; fill: #546A80; }
.chip { font: 600 15px "Microsoft YaHei", "Noto Sans CJK SC", sans-serif; fill: #285E98; }
.white-title { font: 700 19px "Microsoft YaHei", "Noto Sans CJK SC", sans-serif; fill: white; }
.white-text { font: 400 14px "Microsoft YaHei", "Noto Sans CJK SC", sans-serif; fill: #F7FBFF; }
.line-blue { fill: none; stroke: #2F6FB2; stroke-width: 3; marker-end: url(#arrowBlue); }
.line-orange { fill: none; stroke: #D46B20; stroke-width: 3; marker-end: url(#arrowOrange); }
.line-green { fill: none; stroke: #34815C; stroke-width: 2.5; marker-end: url(#arrowGreen); }
.dash { stroke-dasharray: 8 7; }
</style>
</defs>

<rect width="1600" height="1000" fill="url(#background)"/>

<text x="800" y="52" text-anchor="middle" class="title">PLSR 系统结构图</text>
<text x="800" y="79" text-anchor="middle" class="subtitle">XDM-60T4-E · STM32F407IG · uC/OS-II · 四轴独立运动控制</text>

<!-- 调用与访问层 -->
<g filter="url(#shadow)">
<rect x="120" y="105" width="1360" height="100" rx="16" fill="#FFFFFF" stroke="#AFC7E3" stroke-width="2"/>
</g>
<text x="155" y="139" class="layer-title">调用与访问层</text>
<rect x="460" y="126" width="280" height="53" rx="26" fill="#EAF3FD" stroke="#9CBFE4"/>
<text x="600" y="159" text-anchor="middle" class="chip">PLSR S0 S1 S2 D</text>
<rect x="770" y="126" width="250" height="53" rx="26" fill="#EAF3FD" stroke="#9CBFE4"/>
<text x="895" y="159" text-anchor="middle" class="chip">Modbus RTU</text>
<rect x="1050" y="126" width="270" height="53" rx="26" fill="#EAF3FD" stroke="#9CBFE4"/>
<text x="1185" y="159" text-anchor="middle" class="chip">内部测试接口</text>

<!-- 命令适配层 -->
<path d="M800 205 L800 230" class="line-blue"/>
<g filter="url(#shadow)">
<rect x="250" y="235" width="1100" height="92" rx="16" fill="#FFFFFF" stroke="#78A9D8" stroke-width="2"/>
</g>
<text x="800" y="270" text-anchor="middle" class="layer-title">命令与软元件适配层</text>
<text x="800" y="299" text-anchor="middle" class="box-text">启动上升沿 · 命令序号防重 · 影子参数提交 · 一致状态快照 · 固定软元件访问</text>

<!-- PLSR核心层 -->
<path d="M800 327 L800 352" class="line-blue"/>
<g filter="url(#shadow)">
<rect x="80" y="357" width="1440" height="300" rx="20" fill="url(#coreGradient)" stroke="#5F97CE" stroke-width="2.5"/>
</g>
<text x="120" y="393" class="layer-title">PLSR 运动控制层</text>
<text x="1480" y="393" text-anchor="end" class="small">四个独立 PlsrAxis 对象 · 无插补</text>

<g>
<rect x="120" y="420" width="245" height="108" rx="13" fill="#FFFFFF" stroke="#8DB5DD" stroke-width="1.5"/>
<text x="242" y="453" text-anchor="middle" class="box-title">参数提交与快照</text>
<text x="242" y="480" text-anchor="middle" class="box-text">S0 / S1 / S2 / D 校验</text>
<text x="242" y="503" text-anchor="middle" class="box-text">资源申请 · 不可变快照</text>

<rect x="398" y="420" width="245" height="108" rx="13" fill="#FFFFFF" stroke="#8DB5DD" stroke-width="1.5"/>
<text x="520" y="453" text-anchor="middle" class="box-title">轴状态机与命令</text>
<text x="520" y="480" text-anchor="middle" class="box-text">START / STOP / PAUSE</text>
<text x="520" y="503" text-anchor="middle" class="box-text">BUSY · DONE · ERROR</text>

<rect x="676" y="420" width="245" height="108" rx="13" fill="#FFFFFF" stroke="#8DB5DD" stroke-width="1.5"/>
<text x="798" y="453" text-anchor="middle" class="box-title">路径解释与段调度</text>
<text x="798" y="480" text-anchor="middle" class="box-text">1~100段 · Wait · ACT</text>
<text x="798" y="503" text-anchor="middle" class="box-text">EXT · 动态跳转 · 段事件</text>

<rect x="954" y="420" width="245" height="108" rx="13" fill="#FFFFFF" stroke="#8DB5DD" stroke-width="1.5"/>
<text x="1076" y="453" text-anchor="middle" class="box-title">速度规划</text>
<text x="1076" y="480" text-anchor="middle" class="box-text">直线 · S形 · 正弦</text>
<text x="1076" y="503" text-anchor="middle" class="box-text">短距离 · 动态调频</text>

<rect x="1232" y="420" width="245" height="108" rx="13" fill="#FFFFFF" stroke="#8DB5DD" stroke-width="1.5"/>
<text x="1354" y="453" text-anchor="middle" class="box-title">位置与累计</text>
<text x="1354" y="480" text-anchor="middle" class="box-text">64位位置 · 当量 · 限位</text>
<text x="1354" y="503" text-anchor="middle" class="box-text">齿隙补偿 · 检查点</text>
</g>

<path d="M365 474 L390 474" class="line-blue"/>
<path d="M643 474 L668 474" class="line-blue"/>
<path d="M921 474 L946 474" class="line-blue"/>
<path d="M1199 474 L1224 474" class="line-blue"/>

<!-- 执行域 -->
<rect x="205" y="561" width="510" height="70" rx="13" fill="#2F6FB2"/>
<text x="460" y="590" text-anchor="middle" class="white-title">OS 控制面 · PlsrTask</text>
<text x="460" y="615" text-anchor="middle" class="white-text">命令、段切换、等待、状态发布、保存请求</text>

<rect x="885" y="561" width="510" height="70" rx="13" fill="#D46B20"/>
<text x="1140" y="590" text-anchor="middle" class="white-title">硬实时面 · TIM / EXTI ISR</text>
<text x="1140" y="615" text-anchor="middle" class="white-text">0.1/1 ms刷新、硬件/软件计数、尾脉冲、限位与EXT</text>

<path d="M798 528 L798 545 L460 545 L460 557" class="line-blue"/>
<path d="M798 528 L798 545 L1140 545 L1140 557" class="line-orange"/>

<!-- 数据与服务 -->
<g filter="url(#shadow)">
<rect x="80" y="700" width="1440" height="112" rx="18" fill="#F0FAF4" stroke="#79B696" stroke-width="2"/>
</g>
<text x="115" y="735" class="layer-title">数据与服务层</text>

<rect x="345" y="721" width="330" height="67" rx="12" fill="#FFFFFF" stroke="#8BC3A5"/>
<text x="510" y="748" text-anchor="middle" class="box-title">固定软元件与动态数据</text>
<text x="510" y="773" text-anchor="middle" class="box-text">HSD / SFD / SM / SD / I · S0 / S1</text>

<rect x="704" y="721" width="310" height="67" rx="12" fill="#FFFFFF" stroke="#8BC3A5"/>
<text x="859" y="748" text-anchor="middle" class="box-title">持久化</text>
<text x="859" y="773" text-anchor="middle" class="box-text">Flash A/B槽 · Backup SRAM</text>

<rect x="1043" y="721" width="330" height="67" rx="12" fill="#FFFFFF" stroke="#8BC3A5"/>
<text x="1208" y="748" text-anchor="middle" class="box-title">诊断与自测</text>
<text x="1208" y="773" text-anchor="middle" class="box-text">错误映射 · 分频记录 · ISR性能</text>

<path d="M460 631 L460 690" class="line-green dash"/>
<path d="M1140 631 L1140 690" class="line-green dash"/>

<!-- 板级与输出 -->
<path d="M1140 631 L1140 674 L1450 674 L1450 826 L1040 826 L1040 837" class="line-orange"/>
<g filter="url(#shadow)">
<rect x="100" y="842" width="1000" height="105" rx="17" fill="#273B52"/>
</g>
<text x="135" y="876" class="white-title">STM32F407 板级输出层</text>
<text x="135" y="906" class="white-text">TIM6控制 · TIM9/TIM12计数 · TIM10/13/11/14 PWM · GPIO · EXTI</text>
<text x="135" y="930" class="white-text">硬件PWM维持边沿,ISR只计数、提交周期参数和完成安全尾停</text>

<path d="M1100 894 L1160 894" class="line-orange"/>
<rect x="1170" y="842" width="250" height="105" rx="17" fill="#FFFFFF" stroke="#D69A6E" stroke-width="2"/>
<text x="1295" y="877" text-anchor="middle" class="box-title">物理输出</text>
<text x="1295" y="905" text-anchor="middle" class="box-text">Q0~Q3 / DIR</text>
<text x="1295" y="930" text-anchor="middle" class="box-text">PULSE/DIR · AB · CW/CCW</text>

<path d="M1420 894 L1475 894" class="line-orange"/>
<rect x="1485" y="852" width="95" height="85" rx="14" fill="#FFF7F0" stroke="#D69A6E" stroke-width="2"/>
<text x="1532" y="886" text-anchor="middle" class="box-title">伺服</text>
<text x="1532" y="912" text-anchor="middle" class="box-text">驱动器</text>

<!-- 图例 -->
<circle cx="110" cy="976" r="6" fill="#2F6FB2"/>
<text x="125" y="981" class="small">控制与数据流</text>
<circle cx="270" cy="976" r="6" fill="#D46B20"/>
<text x="285" y="981" class="small">硬实时与物理输出</text>
<circle cx="480" cy="976" r="6" fill="#34815C"/>
<text x="495" y="981" class="small">数据服务访问</text>
</svg>

+ 226
- 56
Document/PLSR_document/PLSR需求规格统计_V1.3.md Просмотреть файл

@@ -1,15 +1,18 @@
# PLSR 需求规格书

> 文档版本:V1.3 Rev.A(需求冲突统一冻结版)
> 更新日期:2026-08-05
> 目标平台:XDM-60T4-E
> 软件平台:STM32F407 + uC/OS-II
> 文档版本:V1.3 Rev.B(正式需求规格基线)<br>
> 更新日期:2026-08-05<br>
> 目标平台:XDM-60T4-E<br>
> 软件平台:STM32F407 + uC/OS-II<br>
> 对标基线:信捷 XD/XL 系列 PLC 定位控制手册 PLSR(印刷页 5~87,重点为 49~56)

## 目录

- [1 概述](#1-概述)
- [1.1 项目背景](#11-项目背景)
- [1.2 定义](#12-定义)
- [1.3 需求解释规则](#13-需求解释规则)
- [1.4 对标边界与冻结差异](#14-对标边界与冻结差异)
- [2 功能需求](#2-功能需求)
- [2.1 系统与硬件功能](#21-系统与硬件功能)
- [2.2 脉冲输出功能](#22-脉冲输出功能)
@@ -100,6 +103,43 @@ V1.0 的目标范围如下:
| 检查点 | 为掉电恢复而保存的一致性累计数据快照 |
| 影子参数 | 上位机可编辑但尚未提交给运行模块的参数副本 |

### 1.3 需求解释规则

本文使用以下约束词:

- **应、必须、不得**:V1.0 强制需求,未满足即判定不合格。
- **可、允许**:在满足前置条件时允许实现的行为。
- **建议**:不影响功能验收的实现建议。
- **信捷兼容**:外部可观察语义、数据布局或固定软元件地址与信捷手册一致。
- **项目增强**:信捷 PLSR 未规定,但本项目在不破坏兼容语义的前提下增加的能力。

需求发生冲突时,按以下优先级解释:

1. 本规格中明确标记为“冻结”的项目决定;
2. 已确认的项目需求;
3. 信捷 PLSR 手册的外部可观察行为;
4. 实现设计和内部数据结构。

`Y0~Y3`表示信捷兼容的逻辑脉冲轴;本项目硬件图纸使用`Q0~Q3`标识对应物理输出点,
两者在本规格中按`Y0↔Q0`、`Y1↔Q1`、`Y2↔Q2`、`Y3↔Q3`对应。除非特别说明,
涉及固定软元件时使用`Y`轴语义,涉及板级引脚和资源时使用`Q`点语义。

### 1.4 对标边界与冻结差异

V1.0 以信捷 PLSR 为最低功能基线,并保留以下已确认差异或增强:

| 项目 | 信捷手册语义 | 本项目冻结语义 | 分类 |
| --- | --- | --- | --- |
| 段脉冲数为0 | 手册印刷页56将“频率为0或脉冲数为0”并列描述为采用默认速度,脉冲数为0时的数量行为不明确 | 跳过当前段,不输出脉冲并进入下一段;最后一段则完成 | 冻结差异 |
| AB相计数 | 手册仅规定AB相输出方式,未定义本项目计数口径 | 一个完整四状态正交周期计1个指令脉冲 | 冻结增强 |
| 累计位置 | 固定HSD状态为32位 | 固定地址保持32位兼容,内部另以64位累计并做溢出检查 | 增强 |
| 输出模式 | 单向脉冲、AB相 | 增加CW/CCW双脉冲,不占用或改写信捷固定字段语义 | 增强 |
| 参数提交 | 运行前直接读取软元件 | 增加影子参数、原子提交和不可变运行快照 | 增强 |
| 命令与诊断 | 主要通过指令、STOP和固定状态软元件 | 增加命令防重、状态机、自测及详细诊断 | 增强 |

信捷固定地址、S0/S1相对布局和可观察状态不得因增强功能改变。逐项对应关系见
[PLSR信捷对标追踪矩阵](./PLSR信捷对标追踪矩阵.md)。

## 2 功能需求

### 2.1 系统与硬件功能
@@ -160,7 +200,7 @@ Q2/PF7/TIM11_CH1、Q3/PF9/TIM14_CH1,仍应通过上板波形测试确认。
| FR-PUL-10 | 运行调频 | 修改目标频率后不改变剩余脉冲数量 |
| FR-PUL-11 | 四轴运行 | 四轴可独立启动、停止、调频和查询状态 |
| FR-PUL-12 | AB 相方向和计数 | 通过A、B相位先后控制方向;一个完整A/B正交周期计1个指令脉冲 |
| FR-PUL-13 | AB 相轴数 | 最多同时运行两轴;物理点对固定为 Q0(A)/Q1(B)、Q2(A)/Q3(B),逻辑轴可动态申请空闲点对 |
| FR-PUL-13 | AB 相轴数 | 最多同时运行两轴;D只允许选择Y0或Y2,分别占用Q0(A)/Q1(B)、Q2(A)/Q3(B)固定点对 |
| FR-PUL-14 | 高速点资源 | PULSE/DIR轴数 + 2 × AB轴数 + 2 × CW/CCW轴数不得超过4,启动前必须检查资源冲突 |
| FR-PUL-15 | AB 相频率 | 目标频率表示每秒完整AB周期数;每周期含4次相位跳变,但只计1个指令脉冲 |
| FR-PUL-16 | 默认速度 | 段频率为0时使用当前S2套组的脉冲默认速度 |
@@ -184,15 +224,18 @@ Q2/PF7/TIM11_CH1、Q3/PF9/TIM14_CH1,仍应通过上板波形测试确认。
高速输出资源按以下规则统一:

- 物理高速资源固定为Q0~Q3,不改变其MCU引脚和定时器映射;
- 逻辑运动轴不永久绑定高速资源,START时申请、任务终止时释放
- D在每次START时申请对应高速资源,任务终止时释放;运行期间轴状态归属D指定的Y轴
- PULSE/DIR占用1个高速资源;AB相和CW/CCW各占用2个高速资源;
- AB相及CW/CCW只能使用Q0/Q1或Q2/Q3有效点对;
- AB相及CW/CCW只能使用Q0/Q1或Q2/Q3有效点对,D分别取Y0或Y2
- 正常完成、STOP或ERROR退出后必须释放本任务占用的高速资源;
- 运行期间输出模式、高速点绑定和定时器资源保持锁定。

CW/CCW模式下,正向只允许CW端输出脉冲,反向只允许CCW端输出脉冲;另一端和停止
状态均保持无效电平,任何时刻禁止CW、CCW同时输出。

方向输出点、方向有效极性和方向延时只作用于PULSE/DIR模式。AB相和CW/CCW不使用独立DIR点;
发生方向反转时仍必须先减速到0,再按对应相序或通道重新启动。

- **FR-PUL-20:** PLSR任务正常完成、STOP停止或ERROR退出后必须释放高速输出资源。
- **FR-PUL-21:** CW/CCW必须遵守上述互斥输出和停止安全电平规则。
- **FR-PUL-22:** 单段脉冲数量为0时跳过当前段,不输出脉冲并进入下一段;若为最后一段则完成任务。
@@ -201,6 +244,10 @@ AB模式的段脉冲数量按完整正交周期累计。每完成`00→相邻相
的一轮四相位状态转换,段剩余脉冲数减1;四次相位跳变不得分别扣减脉冲数量。正反方向
通过相位先后顺序区分。

PULSE/DIR模式每个有效上升沿计1个指令脉冲;CW/CCW模式在当前方向通道每输出一个完整
脉冲计1个指令脉冲。段脉冲数量的符号决定相对模式方向,绝对模式方向由目标坐标与当前位置
之差决定。实现`-2,147,483,648`的绝对值时必须先扩展到64位,禁止32位取反溢出。

最小有效脉宽、输出极性及最高可靠频率还应满足 PLC 输出电路和伺服驱动器
的电气要求。100 kHz 是 V1.0 建议保证值,更高频率需通过硬件测试后开放。

@@ -268,22 +315,57 @@ AB模式的段脉冲数量按完整正交周期累计。每完成`00→相邻相
| S0 | 路径数据块 | 总段数、每段频率、脉冲数、等待及跳转 |
| S1 | 用户执行参数 | 仅包含相对/绝对模式和起始执行段;异步调用属于指令接口而非S1字段 |
| S2 | 运动参数套组 | K0~K4,包含默认频率、最高频率、起止频率、加减速、曲线、补偿、FOLLOW和刷新周期 |
| D | 输出配置 | 输出形式、PULSE/DIR 点或 AB 点对、输出极性和方向建立时间 |
| D | 输出轴 | 指定Y0~Y3脉冲轴;输出模式、方向点、极性和方向延时由该轴配置参数决定 |

#### 2.4.1 指令接口

逻辑调用关系为:
逻辑调用形式为:

```text
PLSR_Start(S0路径, S1执行参数, S2参数套组, D输出轴)
PLSR S0 S1 S2 D
```

S0和S1由调用方在未占用数据区选择不重叠的连续首地址;数据块不永久绑定到轴,多个轴
允许只读共享同一数据块。COMMIT成功时为目标轴创建不可变运行快照,随后修改原动态
数据块不得影响已经启动或已经提交的轴任务。K0~K4固定配置和固定运行状态使用
[PLSR地址映射](./PLSR地址映射.md)规定的信捷原地址;D只指定输出资源,不自拟固定参数地址。

**FR-CMD-04:** PLSR指令必须支持`S0、S1、S2、D`四个操作数语义,分别表示路径数据、
用户执行参数、K0~K4系统运动参数组和输出资源配置。

- 指令只在启动条件上升沿接受一次;启动条件随后断开不得终止已接受任务。
- S0、S1允许使用项目支持的32位数据软元件首地址,且两个数据块不得重叠。
- S2允许常数或受支持的32位数据软元件,其运行值必须为K0~K4。
- D在兼容语义下指定Y0~Y3;项目实现映射到Q0~Q3高速资源。
- PLSR调用为异步返回。完成方式和后续方式只描述多段速度衔接,不表示同步或异步调用。

#### 2.4.2 S0路径数据块

S0首地址由调用方动态指定。占用范围从`S0+0`开始,到最后一段
`S0+N×10+8`双字结束;由于末字段为双字,实际最后一个16位字位于`S0+N×10+9`。

| 相对地址 | 数据类型 | 定义 |
| --- | --- | --- |
| S0+0 | INT32 | 总段数N,范围1~100 |
| S0+2~S0+9 | 8个WORD | 保留;写入时应为0,读取时不得解释为项目扩展字段 |
| S0+N×10+0 | INT32 | 第N段目标频率;非负,0表示使用当前S2默认速度 |
| S0+N×10+2 | INT32 | 第N段脉冲数量;相对模式为有符号位移,绝对模式为目标坐标 |
| S0+N×10+4 | WORD | 高8位为等待条件,低8位为等待参数来源类型 |
| S0+N×10+5 | INT32 | 等待常数或等待变量编号 |
| S0+N×10+7 | WORD | 低8位为跳转目标来源类型,高8位保留 |
| S0+N×10+8 | INT32 | 下一段常数或保存下一段号的变量编号 |

表中的`N`在段字段公式中取1~总段数。所有双字均由连续两个16位字组成,低地址保存低16位、
下一地址保存高16位;有符号值采用二进制补码。启动前必须验证完整数据块均位于允许的数据区内,且计算
`S0+N×10+9`时不得发生地址溢出。

#### 2.4.3 S1用户参数块

| 相对地址 | 数据类型 | 定义 |
| --- | --- | --- |
| S1+0 | INT32 | 定位模式:0为相对模式,1为绝对模式;其它值非法 |
| S1+2 | INT32 | 起始执行段:0或1均从第1段开始,2~100从指定段开始 |

起始段不得大于S0总段数。相对模式下,每段脉冲数量表示相对本段起点的位移;绝对模式下,
每段脉冲数量表示目标逻辑坐标,实际输出位移为该目标坐标减去进入本段时的逻辑位置。

#### 2.4.4 S2系统参数套组

每个输出轴必须提供第0~4套S2参数:

- 第 0 套用于运行时或上位机动态调整。
@@ -300,11 +382,34 @@ S0和S1由调用方在未占用数据区选择不重叠的连续首地址;数
- FOLLOW前馈补偿百分比,范围0~100。
- 脉冲频率刷新周期,0.1 ms或1 ms。

K0参数固定使用`HSD460~539`中对应轴的地址;K1~K4及公共参数固定使用
`SFD900~1419`中对应轴的地址。各地址不得重排或复用,具体范围见
[PLSR地址映射](./PLSR地址映射.md)。

S2 的控制刷新周期只允许配置为 `1 ms` 或 `0.1 ms`。系统OS Tick保持1 ms;
0.1 ms运动控制刷新应由独立硬件定时器触发,不得通过提高全局OS Tick实现。
运行中修改目标频率后, 系统应在当前 S2
所配置的刷新周期内开始应用新目标;该指标表示调频响应时间,
不表示脉冲输出周期。
运行中修改当前段目标频率后,系统应在当前S2所配置的刷新周期内开始应用新目标;该指标表示
调频响应时间,不表示脉冲输出周期。

#### 2.4.5 D输出资源

D的信捷兼容含义是脉冲输出端口。本项目中:

- D选择逻辑轴Y0~Y3,并对应物理高速点Q0~Q3。
- PULSE/DIR占用D所选的一个高速点,方向点来自该轴公共参数。
- AB相和CW/CCW只允许D选择Y0或Y2,并分别占用Q0/Q1或Q2/Q3固定点对。
- CW/CCW属于项目增强,模式选择保存在项目输出配置中,不改变信捷SFD900等固定字段含义。
- D只指定输出资源,不自拟固定配置地址。

#### 2.4.6 参数快照与共享规则

S0和S1由调用方在未占用数据区选择不重叠的连续首地址。数据块不永久绑定到轴,多个空闲轴
可以只读共享同一数据块。COMMIT成功时应为目标轴创建不可变运行快照,随后修改原数据块不得
改变已提交任务,但下列兼容行为除外:

- 当前正在执行段的目标频率允许更新,并按当前S2刷新周期生效;
- 共享S0被一个运行轴用于调频时,其他轴不得同时把该S0作为可写运行参数源;
- 其余段字段、S1、S2、D和输出资源修改仅在下一次成功提交并启动时生效。

### 2.5 单段与多段路径

@@ -321,15 +426,40 @@ S2 的控制刷新周期只允许配置为 `1 ms` 或 `0.1 ms`。系统OS Tick
S0应提供与信捷每段数据一致的相对布局和动态引用能力;S0首地址由调用方动态指定:

- 等待条件和等待参数均可表达常数或受支持的数据/位变量引用。
- 跳转目标可为常数或运行时数据变量引用,范围0~100。
- Wait时间范围1~2,147,483,647 ms,配置0时按1
ms处理;计时从本段脉冲完成后开始。
- 跳转目标可为常数或运行时数据变量引用,最终值范围0~100。
- Wait时间范围1~2,147,483,647 ms,配置0时按1 ms处理;计时从本段脉冲完成后开始。
- Wait信号在本段完成后判断;若信号已有效则立即跳段,否则保持WAIT直至有效。
- ACT从本段开始输出时计时;时间到时放弃本段剩余脉冲并跳段;若脉冲先完成则等待ACT到时。
- EXT采用输入上升沿;运动中触发立即放弃剩余脉冲并跳段,脉冲先完成则等待后续EXT边沿。
- EXT或脉冲完成采用先到条件;EXT先到时放弃剩余脉冲,脉冲先完成时立即跳段。
- 外部中断输入应优先用于EXT,以避免普通IO映射周期造成响应延迟。

等待条件编码必须与信捷S0布局一致:

| 编码 | 条件 | 进入下一段的时机 |
| --- | --- | --- |
| H00 | 脉冲发送完成 | 本段规定脉冲发送完成后 |
| H01 | Wait时间 | 本段完成后开始计时,计时到达后 |
| H02 | Wait信号 | 本段完成且指定位信号有效后 |
| H03 | ACT时间 | 从本段开始计时,到时后;若脉冲先完成则等待到时 |
| H04 | EXT信号 | 指定X输入出现OFF→ON;若脉冲先完成则继续等待边沿 |
| H05 | EXT信号或脉冲完成 | 两者任一先到 |

等待参数来源编码必须为:`H00=常数`、`H01=D`、`H02=HD`、`H03=FD`、`H04=X`、
`H05=M`、`H06=HM`。Wait时间和ACT时间只允许常数、D、HD或FD,数值范围为
0~2,147,483,647;H04和H05等待条件只允许使用X来源;Wait信号只允许使用X、M或HM。
EXT使用外部中断输入时不得再由同一物理边沿重复触发普通外部中断业务。

跳转来源编码必须为:`H00=常数`、`H01=D`、`H02=HD`、`H03=FD`。解析出的跳转值:

- 为0时顺序进入下一段;最后一段为0时任务正常完成;
- 为1~100时进入指定段,且不得超过S0总段数;
- 等于当前段时表示有意无限循环,但仍受STOP、限位、急停和错误控制;
- 来源类型、变量地址或最终值非法时,拒绝启动或进入ERROR,不得读取越界地址。

段参数的零值判断顺序固定为:先判断脉冲数量,再判断目标频率。脉冲数量为0时直接跳段,
不得因目标频率也为0而输出默认速度脉冲;脉冲数量非0且目标频率为0时才使用S2默认速度。

多段路径应满足:

| 编号 | 需求 | 优先级 |
@@ -349,30 +479,8 @@ S0应提供与信捷每段数据一致的相对布局和动态引用能力;S0
| FR-SEG-13 | 最后一段使用等待类条件时保持WAIT/运行状态,直到条件成立或STOP,不得静默结束 | 必须 |
| FR-SEG-14 | 最大路径段数固定为100;超过限制时拒绝执行并返回SEGMENT_OVERFLOW | 必须 |

运行期间除当前目标频率外,其余路径参数修改不得影响当前任务。新参数应在
下一次成功提交并启动时生效。

每段数据增加以下逻辑字段:

| 字段 | 说明 |
| --- | --- |
| PulseCount | 有符号脉冲数量 |
| TargetFrequency | 目标频率 |
| WaitType | 等待类型 |
| WaitSourceType | 等待数据来源 |
| WaitAddress | 等待变量地址 |
| WaitParameter | 等待参数 |
| JumpType | 跳转来源 |
| JumpAddress | 跳转变量地址 |
| NextSegment | 下一段编号 |

支持:

- 常量等待;
- 输入等待;
- 数据变量等待;
- 动态跳转;
- 条件循环。
运行期间除当前段目标频率外,其余路径参数修改不得影响当前任务。新参数应在下一次成功提交并
启动时生效。项目内部可把S0编码解析为结构化字段,但不得改变S0对外相对布局。

### 2.6 加减速与段内变频

@@ -385,8 +493,9 @@ S0应提供与信捷每段数据一致的相对布局和动态引用能力;S0

加减速应满足以下规则:

1. 起始频率、目标频率和结束频率不得超过最高频率。
2. 目标频率超限时应拒绝启动,不得静默截断。
1. S2最高速度必须处于硬件保证频率范围内;配置值为0或超过硬件允许范围时应拒绝启动。
2. 起始频率、目标频率或结束频率高于当前S2最高速度时,应按信捷语义限幅到最高速度运行,
同时发布`SPEED_CLAMPED`诊断告警;不得把限幅伪装成未经记录的正常输出。
3. 加减速距离不足时,应自动生成三角或短距离曲线。
4. 无法在指定脉冲数量内满足起止频率和曲线约束时,应报告参数冲突。
5. 加减速过程中必须保证最终脉冲数量准确。
@@ -460,7 +569,7 @@ PLSR启动采用上升沿触发方式。

| 参数 | 运行中修改 |
| --- | --- |
| 目标频率 | 允许,立即生效 |
| 当前段目标频率 | 允许,在当前S2配置的0.1 ms或1 ms刷新周期内开始生效 |
| STOP命令 | 允许 |
| PAUSE命令 | 允许 |
| 方向 | 禁止 |
@@ -565,6 +674,45 @@ ERROR 错误

**FR-STA-01:** DONE只表示正常完成,并按上述方案A产生、保持和清零。

#### 2.9.2 信捷兼容固定状态

四轴固定状态和段事件入口必须保持以下对应关系:

| 逻辑轴 | 累计状态 | 运行/方向标志 | 实时状态 | 段事件入口 |
| --- | --- | --- | --- | --- |
| Y0/Q0 | HSD0~3 | SM1000、SM1001 | SD1000~1011 | I6000~6099 |
| Y1/Q1 | HSD4~7 | SM1020、SM1021 | SD1020~1031 | I6100~6199 |
| Y2/Q2 | HSD8~11 | SM1040、SM1041 | SD1040~1051 | I6200~6299 |
| Y3/Q3 | HSD12~15 | SM1060、SM1061 | SD1060~1071 | I6300~6399 |

HSD每轴四个字的相对布局固定为:`+0/+1`累计指令脉冲量,`+2/+3`累计当量,均为有符号
32位值。项目内部64位累计发布到HSD前必须做范围检查;超出INT32范围时锁存累计溢出错误,
不得回绕或静默截断。

SM运行和方向标志语义固定为:

- 运行标志在脉冲任务处于运动或兼容WAIT期间为ON,任务结束后为OFF;项目增强的PAUSED等
详细状态通过独立状态接口提供,不改变固定SM地址。
- 方向标志在正向输出时为ON,反向输出时为OFF;方向输出极性反转不得改变该逻辑方向语义。
- 绝对目标等于当前位置时不输出脉冲,运行标志可以不产生ON或下降沿;DONE仍应正确置位。

每轴SD实时状态以对应轴起始地址`B`表示,其相对布局固定为:

| 相对地址 | 定义 |
| --- | --- |
| B+0、B+1 | 当前段号,32位 |
| B+2、B+3 | 当前段已输出指令脉冲量,32位 |
| B+4、B+5 | 当前段已输出当量,32位 |
| B+6、B+7 | 当前输出频率,指令脉冲单位,32位 |
| B+8、B+9 | 当前输出速度,当量单位,32位 |
| B+10 | 信捷兼容脉冲错误码 |
| B+11 | 错误脉冲数据块号 |

I6000~I6399按轴和段映射:第N段事件入口为该轴事件基址加`N-1`。每个实际执行段在结束或
被条件切换时产生一次事件。
事件处理应至少提供轴号、段号和结束原因;正常脉冲完成必须与信捷每段中断的可观察时机一致,
跳转顺序不得改变事件入口与原段号的对应关系。

### 2.10 Modbus 通信

现有 USART1 Modbus RTU 从站作为配置和监控通道。
@@ -634,13 +782,15 @@ S0/S1动态数据池使用。
- 软限位启用、正极限值和负极限值。
- 脉冲单位:脉冲、1 μm、0.01 mm、0.1 mm、1 mm。
- 每转指令脉冲数和每转移动量。
- 输出类型:PULSE/DIR或AB相。
- 信捷兼容输出类型:PULSE/DIR或AB相;CW/CCW通过项目增强配置选择,不改变该固定字段编码
- 多段脉冲发送方式:完成方式或后续方式。
- 方向输出点和方向延时时间;默认10 ms,单位ms,可配置。
- 正向和反向齿隙补偿量。
- 电气原点位置。
- 正负限位输入点及常开/常闭逻辑。

信捷固定地址中的电气原点、机械回零、Z相、CLR及闭环脉冲字段应保留原地址,不得挪作项目
扩展用途;其中不属于V1.0 PLSR范围的功能无需实现。未使用的保留位必须按0写入并在读取时忽略。

工程单位必须在内核换算层支持,不再限定为上位机换算。换算应保存小数余数,
避免多段或重复运动的累计舍入漂移。

@@ -648,7 +798,8 @@ S0/S1动态数据池使用。
启动,但允许反向离开。软限位和硬限位可同时启用。

发生运动方向反转时,应按配置加入对应方向的齿隙补偿脉冲,并使用补偿加减速时间;
补偿脉冲、指令位置和累计脉冲的统计口径必须在设计书中分别定义。
补偿段与正式运动段应分开执行。齿隙补偿脉冲不得计入本段指令脉冲、逻辑位置或信捷兼容HSD
累计值,但应计入项目增强的物理输出诊断计数,以便核对实际输出边沿。

### 2.12 自测与诊断

@@ -696,8 +847,7 @@ S0/S1动态数据池使用。
- 清除错误不得自动重新启动未完成运动。
- 配置限位输入后,限位有效时应禁止向该方向启动,但允许反向离开限位。
- 运动中限位触发默认执行减速停止。
- V1.0
急停没有外部硬件切断回路;急停输入由软件立即禁止脉冲输出并锁存状态。
- V1.0急停没有外部硬件切断回路;急停输入由软件立即禁止脉冲输出并锁存状态。
- 软件急停不具备独立硬件安全回路的故障容错能力,不得宣称为安全认证急停。

至少应定义以下错误:
@@ -705,11 +855,11 @@ S0/S1动态数据池使用。
```text
参数未初始化
输出点非法或冲突
频率为零或超限
默认速度为零或硬件频率超限
脉冲数或段数非法
段参数冲突
跳转段号非法
路径循环超限
非预期闭环路径或运行保护超限
绝对位置未建立
模块忙
非法状态命令
@@ -742,7 +892,21 @@ Flash数据无效或保存失败

### 2.13.1 错误码补充

新增:
固定实时状态中的信捷兼容错误码应至少实现下列与PLSR有关的取值:

| 兼容码 | 说明 | 适用处理 |
| ---: | --- | --- |
| 1 | 脉冲数据段配置错误 | 拒绝启动,错误数据块号写入对应SD的`B+11` |
| 2 | 当量模式下每转脉冲数或每转移动量为0 | 拒绝启动 |
| 3 | S2系统参数块号错误 | 拒绝启动 |
| 4 | 脉冲参数块号或范围超过限制 | 拒绝启动 |
| 5 | 正限位触发后停止 | 按减速停止并禁止继续正向启动 |
| 6 | 负限位触发后停止 | 按减速停止并禁止继续反向启动 |
| 15 | FOLLOW性能参数不在1~100 | 拒绝启动 |
| 16 | FOLLOW前馈补偿不在0~100 | 拒绝启动 |
| 26 | 控制块或高速输出资源分配失败 | 拒绝启动或进入ERROR |

项目增强诊断使用符号错误码,不得占用或改变上述固定兼容码:

| 错误码 | 说明 |
| --- | --- |
@@ -752,6 +916,9 @@ Flash数据无效或保存失败
| RESOURCE_CONFLICT | 输出资源冲突 |
| PARAMETER_LOCKED | 运行参数禁止修改 |
| DONE_STATE_ERROR | 完成状态异常 |
| SPEED_CLAMPED | 目标速度被S2最高速度限幅;属于告警,不单独终止任务 |
| POSITION_INVALID | 绝对定位前逻辑位置无效 |
| COUNTER_OVERFLOW | 内部或兼容累计计数溢出 |

## 3 性能需求

@@ -822,12 +989,15 @@ Flash数据无效或保存失败
| AT-12 | 重复命令 | 相同命令序号不产生重复运动 |
| AT-13 | 掉电恢复 | 不自动运动,位置有效性符合恢复等级 |
| AT-14 | 上电安全 | 上电和复位期间无意外脉冲 |
| AT-15 | S0/S1布局 | 使用动态首地址验证完整相对布局、保留区、六种等待条件和四种跳转来源 |
| AT-16 | 最高速度限幅 | 目标速度高于S2最高速度时按最高速度运行并产生SPEED_CLAMPED告警 |
| AT-17 | 四轴独立运行 | 四轴同时以100 kHz运行时无丢脉冲、重复脉冲和异常周期,且状态和累计数据互不串扰 |
| AT-18 | AB 相输出 | 两个AB轴可独立运行;一个完整正交周期计1个指令脉冲,周期频率、相位方向和数量正确 |
| AT-19 | S0等待与跳转 | 六种等待条件、动态参数来源、提前/延后触发和0/指定/自身跳转语义与信捷一致 |
| AT-20 | 公共参数 | 单位换算、软限位、方向延时、齿隙补偿和FOLLOW参数均通过测试 |
| AT-21 | 零值及边界 | INT32最小值、频率0、脉冲数0跳段和绝对零位移行为符合本规格 |
| AT-22 | 段事件和监控 | 每段事件、运行标志、当前段计数和累计计数可被稳定读取 |
| AT-23 | 固定软元件 | HSD、SM、SD和I6000~I6399的地址、位宽、轴映射及可观察语义与信捷一致 |

新增测试:



Двоичные данные
Document/PLSR_document/STM32F4xx参考手册_RM0090_Rev22.pdf Просмотреть файл


Двоичные данные
Document/PLSR_document/~$设计方案书2.docx Просмотреть файл


Двоичные данные
Document/PLSR_document/~$需求规格书.docx Просмотреть файл


Двоичные данные
Document/PLSR_document/框图/系统框图.vsdx Просмотреть файл


Двоичные данные
Document/PLSR_document/设计方案书.doc Просмотреть файл


Двоичные данные
Document/PLSR_document/设计方案书.docx Просмотреть файл


Двоичные данные
Document/PLSR_document/设计方案书2.docx Просмотреть файл


Загрузка…
Отмена
Сохранить