文档版本:V1.3 Rev.A(需求冲突统一冻结版)
更新日期:2026-08-05
目标平台:XDM-60T4-E
软件平台:STM32F407 + uC/OS-II
本项目计划在新一代 XDM 系列 PLC 中实现一个高性能定位脉冲输出模块, 通过
PLC 指令或 Modbus 命令驱动伺服驱动器,完成四轴独立位置控制。
项目当前已有以下基础:
本项目以信捷 PLC 的 PLSR 功能作为最低功能基线:信捷 PLSR 已有的功能和
可观察运行语义均应具备;本项目已有的四轴资源管理、Modbus原子提交、命令防重、
64位累计、诊断和Backup
SRAM等增强功能继续保留。Y0~Y3的PLSR固定配置参数和固定状态地址必须与信捷手册
一比一对应;S0、S1保持动态首地址语义,S2、D保持指令操作数语义;不复制XDPPro参数配置界面。
逐项对应关系见PLSR信捷对标追踪矩阵。矩阵中未关闭的
差异不得宣称为"严格功能对标完成”。
V1.0 的目标范围如下:
外部脉冲回读、编码器闭环和多轴插补等功能作为后续版本或加分项。
| 名称 | 定义 |
|---|---|
| PLSR | 本项目的定位脉冲输出模块,支持单段及多段位置控制 |
| PULSE/DIR | 脉冲加方向的伺服控制接口,PULSE 表示位置增量,DIR 表示方向 |
| AB 相输出 | A、B 两路相差 90° 的正交脉冲接口,通过相位先后表示方向 |
| 指令位置 | PLC 根据已输出脉冲累计得到的位置,不等同于编码器实际位置 |
| 相对定位 | 以当前逻辑位置为基准移动指定距离 |
| 绝对定位 | 移动到指定逻辑坐标 |
| 异步返回 | 启动成功后立即返回,通过状态接口查询运动结果 |
| 完成方式 | 上一段脉冲发送完后,才开始向下一段频率加减速 |
| 后续方式 | 在上一段内提前变频,使段结束时已经达到下一段频率 |
| S0 | 路径数据块,保存段数、频率、脉冲数、等待和跳转参数 |
| S1 | 用户执行参数,仅保存定位模式和起始段 |
| S2 | K0~K4运动参数套组,保存速度限制、起止频率、加减速、补偿、FOLLOW和刷新周期 |
| D | 输出轴或脉冲输出点 |
| 控制周期 | PLSR 更新状态和速度规划的周期,由 S2 配置为 1 ms 或 0.1 ms |
| 检查点 | 为掉电恢复而保存的一致性累计数据快照 |
| 影子参数 | 上位机可编辑但尚未提交给运行模块的参数副本 |
| 编号 | 需求 | 优先级 |
|---|---|---|
| FR-SYS-01 | 系统应运行在 STM32F407 和 uC/OS-II 平台上 | 必须 |
| FR-SYS-02 | 系统应使用 12 MHz 外部晶振并运行于 168 MHz 主频 | 必须 |
| FR-SYS-03 | 首版应在 XDM-60T4-E(STM32F407IG)上完成验收 | 必须 |
| FR-SYS-05 | 脉冲必须由硬件定时器产生,不得使用 OS 延时翻转 GPIO | 必须 |
| FR-SYS-06 | 上电、复位和初始化期间,脉冲及方向输出应处于安全无效状态 | 必须 |
| FR-SYS-07 | V1.0 应支持四轴独立运行,各轴具有独立状态和参数上下文 | 必须 |
| FR-SYS-08 | 四轴之间不要求直线、圆弧或其它形式的插补 | 必须 |
已知主要输出点如下:
| PLC 点 | MCU 引脚 |
|---|---|
| Q0 | PF6 |
| Q1 | PF8 |
| Q2 | PF7 |
| Q3 | PF9 |
| Q4 | PI8 |
| Q5 | PE6 |
| Q6 | PE5 |
| Q7 | PE4 |
| Q10 | PG7 |
| Q11 | PG6 |
| Q12 | PH9 |
| Q13 | PH8 |
| Q14 | PH7 |
| Q15 | PH6 |
| Q16 | PF11 |
| Q17 | PB0 |
| Q20 | PH5 |
| USART1_TX | PA9 |
| USART1_RX | PA10 |
Q0~Q3 的脉冲映射为 Q0/PF6/TIM10_CH1、Q1/PF8/TIM13_CH1、
Q2/PF7/TIM11_CH1、Q3/PF9/TIM14_CH1,仍应通过上板波形测试确认。
方向点允许从 XDM-60T4-E 的有效输出点 Q0~Q7、Q10~Q17、Q20 中配置,
但不得与脉冲点或其它已占用输出点冲突;四轴脉冲全部启用时,方向点应从
Q4~Q7、Q10~Q17、Q20 中选择。
| 编号 | 需求 | V1.0 指标 |
|---|---|---|
| FR-PUL-01 | 输出形式 | PULSE/DIR、AB 相、CW/CCW 双脉冲 |
| FR-PUL-02 | PULSE/DIR 有效计数边沿 | 固定为物理上升沿 |
| FR-PUL-03 | 脉冲占空比 | 50% |
| FR-PUL-04 | 输出频率范围 | 1~100,000 Hz |
| FR-PUL-05 | 单段脉冲数量 | 完整有符号32位,范围 -2,147,483,648~2,147,483,647 |
| FR-PUL-06 | 输出方向 | 正向、反向 |
| FR-PUL-07 | 方向有效极性 | 参数可配置 |
| FR-PUL-08 | 方向延时时间 | 默认10 ms,以ms为单位并可配置 |
| FR-PUL-09 | 输出点 | 脉冲点和方向点可配置且不得重复 |
| 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-14 | 高速点资源 | PULSE/DIR轴数 + 2 × AB轴数 + 2 × CW/CCW轴数不得超过4,启动前必须检查资源冲突 |
| FR-PUL-15 | AB 相频率 | 目标频率表示每秒完整AB周期数;每周期含4次相位跳变,但只计1个指令脉冲 |
| FR-PUL-16 | 默认速度 | 段频率为0时使用当前S2套组的脉冲默认速度 |
| FR-PUL-17 | 扩展频率 | 100,001~200,000 Hz作为非保证扩展区,仅在板级测试通过后开放并报告警告 |
系统支持三种输出模式:
| 模式编号 | 输出模式 | 说明 |
|---|---|---|
| 0 | PULSE/DIR | 脉冲+方向输出 |
| 1 | AB 相 | 正交脉冲输出 |
| 2 | CW/CCW | 双脉冲方向输出 |
要求:
高速输出资源按以下规则统一:
CW/CCW模式下,正向只允许CW端输出脉冲,反向只允许CCW端输出脉冲;另一端和停止
状态均保持无效电平,任何时刻禁止CW、CCW同时输出。
AB模式的段脉冲数量按完整正交周期累计。每完成00→相邻相位→相邻相位→相邻相位→00
的一轮四相位状态转换,段剩余脉冲数减1;四次相位跳变不得分别扣减脉冲数量。正反方向
通过相位先后顺序区分。
最小有效脉宽、输出极性及最高可靠频率还应满足 PLC 输出电路和伺服驱动器
的电气要求。100 kHz 是 V1.0 建议保证值,更高频率需通过硬件测试后开放。
当段目标频率为0时:
使用当前 S2 默认速度。
如果:
默认速度 <= 0
则:
相对定位按下式计算:
目标位置 = 当前逻辑位置 + 相对位移
绝对定位按下式计算:
输出位移 = 目标绝对位置 - 当前逻辑位置
系统内部应维护以下64位增强数据:
上位机应能够读取并清零累计数据。运行期间禁止清零或设置当前位置。
信捷兼容的固定累计状态HSD0~15仍按每个值两个16位寄存器组成32位数据;内部64位
累计不得改变该固定地址布局。将内部值发布到信捷兼容状态前必须进行范围检查,超出32位
范围时报告累计溢出,不得静默截断。
项目采用信捷PLSR的S0、S1、S2、D逻辑模型。Y0~Y3固定配置和状态地址必须按
PLSR地址映射一比一对应;S0、S1保持动态首地址语义。
| 参数 | 功能 | 主要内容 |
|---|---|---|
| S0 | 路径数据块 | 总段数、每段频率、脉冲数、等待及跳转 |
| S1 | 用户执行参数 | 仅包含相对/绝对模式和起始执行段;异步调用属于指令接口而非S1字段 |
| S2 | 运动参数套组 | K0~K4,包含默认频率、最高频率、起止频率、加减速、曲线、补偿、FOLLOW和刷新周期 |
| D | 输出配置 | 输出形式、PULSE/DIR 点或 AB 点对、输出极性和方向建立时间 |
逻辑调用关系为:
PLSR_Start(S0路径, S1执行参数, S2参数套组, D输出轴)
S0和S1由调用方在未占用数据区选择不重叠的连续首地址;数据块不永久绑定到轴,多个轴
允许只读共享同一数据块。COMMIT成功时为目标轴创建不可变运行快照,随后修改原动态
数据块不得影响已经启动或已经提交的轴任务。K0~K4固定配置和固定运行状态使用
PLSR地址映射规定的信捷原地址;D只指定输出资源,不自拟固定参数地址。
FR-CMD-04: PLSR指令必须支持S0、S1、S2、D四个操作数语义,分别表示路径数据、
用户执行参数、K0~K4系统运动参数组和输出资源配置。
每个输出轴必须提供第0~4套S2参数:
每套S2至少包含:
S2 的控制刷新周期只允许配置为 1 ms 或 0.1 ms。系统OS Tick保持1 ms;
0.1 ms运动控制刷新应由独立硬件定时器触发,不得通过提高全局OS Tick实现。
运行中修改目标频率后, 系统应在当前 S2
所配置的刷新周期内开始应用新目标;该指标表示调频响应时间,
不表示脉冲输出周期。
系统应支持 1~100 段路径,每段至少包含:
有符号脉冲数量
目标频率
等待类型
等待参数
下一段编号
S0应提供与信捷每段数据一致的相对布局和动态引用能力;S0首地址由调用方动态指定:
多段路径应满足:
| 编号 | 需求 | 优先级 |
|---|---|---|
| FR-SEG-01 | 每段可独立设置有符号脉冲数量 | 必须 |
| FR-SEG-02 | 每段可独立设置目标频率 | 必须 |
| FR-SEG-03 | 段起止频率由S2和相邻段目标频率自动推导,不要求每段显式配置 | 必须 |
| FR-SEG-04 | 同方向连续段允许不停顿变频 | 必须 |
| FR-SEG-05 | 反方向段切换前必须减速停止 | 必须 |
| FR-SEG-06 | 支持当前段完成后执行下一段 | 必须 |
| FR-SEG-07 | 支持等待指定时间及ACT指定时间后跳段 | 必须 |
| FR-SEG-08 | 支持等待指定输入点、EXT立即跳段及输入有效或本段完成 | 必须 |
| FR-SEG-09 | 支持指定下一段;跳转值为0时顺序执行,最后一段为0时结束 | 必须 |
| FR-SEG-10 | 不设置独立有限循环次数字段;有限循环由寄存器、计数器和动态下一段实现 | 必须 |
| FR-SEG-11 | 支持从指定段号开始;跳转到自身表示有意无限循环 | 必须 |
| FR-SEG-12 | 每个实际完成或被条件切换的段均产生带轴号、段号和原因的段事件 | 必须 |
| FR-SEG-13 | 最后一段使用等待类条件时保持WAIT/运行状态,直到条件成立或STOP,不得静默结束 | 必须 |
| FR-SEG-14 | 最大路径段数固定为100;超过限制时拒绝执行并返回SEGMENT_OVERFLOW | 必须 |
运行期间除当前目标频率外,其余路径参数修改不得影响当前任务。新参数应在
下一次成功提交并启动时生效。
每段数据增加以下逻辑字段:
| 字段 | 说明 |
|---|---|
| PulseCount | 有符号脉冲数量 |
| TargetFrequency | 目标频率 |
| WaitType | 等待类型 |
| WaitSourceType | 等待数据来源 |
| WaitAddress | 等待变量地址 |
| WaitParameter | 等待参数 |
| JumpType | 跳转来源 |
| JumpAddress | 跳转变量地址 |
| NextSegment | 下一段编号 |
支持:
系统应支持:
加减速应满足以下规则:
调用方式和脉冲衔接方式是两个独立配置项。
PLSR启动采用上升沿触发方式。
| 编号 | 需求 | 优先级 |
|---|---|---|
| FR-CMD-01 | PLSR启动必须检测启动信号上升沿 | 必须 |
| FR-CMD-02 | 启动成功后,解除启动条件不会影响当前任务 | 必须 |
| FR-CMD-03 | 已经接受的任务必须锁存执行参数,不受原参数区修改影响 | 必须 |
禁止:
系统至少应支持以下命令:
| 命令 | 行为 | 优先级 |
|---|---|---|
| START | 校验并启动任务 | 必须 |
| STOP_DECEL | 按减速曲线停止 | 必须 |
| STOP_IMMEDIATE | 完成本次有效脉冲后关闭输出 | 必须 |
| PAUSE | 减速暂停并保存剩余路径 | 必须 |
| RESUME | 从暂停状态继续 | 必须 |
| SET_POSITION | 设置逻辑当前位置 | 必须 |
| CLEAR_POSITION | 逻辑当前位置清零 | 必须 |
| CLEAR_TOTAL | 累计脉冲数清零 | 必须 |
| SAVE_CONFIG | 保存稳定配置 | 必须 |
| LOAD_CONFIG | 加载已保存配置 | 必须 |
| RESET_ERROR | 清除可恢复错误 | 必须 |
| SELF_TEST | 执行内部自测 | 必须 |
命令边界行为:
运行过程中参数修改规则:
| 参数 | 运行中修改 |
|---|---|
| 目标频率 | 允许,立即生效 |
| STOP命令 | 允许 |
| PAUSE命令 | 允许 |
| 方向 | 禁止 |
| 脉冲数量 | 禁止 |
| 路径段数据 | 禁止 |
| 输出模式 | 禁止 |
| 输出点配置 | 禁止 |
| 加减速参数 | 下一次启动生效 |
启动时必须生成不可变运行快照。
FR-PUL-23: 运行过程中禁止直接修改方向;必须终止当前任务后重新提交并启动。
暂停要求:
恢复:
减速停止:
立即停止:
PLSR 至少应包含以下状态:
UNINITIALIZED 未初始化
IDLE 空闲
ACCEL 加速
RUN 运行
DECEL 减速
WAIT 段间等待
PAUSED 暂停
COMPLETED 完成
STOPPED 停止
ERROR 错误
上位机至少能够读取:
绝对模式目标等于当前累计位置时不得输出脉冲;完成状态不得依赖必须出现一次
“运行标志下降沿”,应直接返回零位移完成结果。
增加 PLC 用户可观察状态:
| 状态 | 说明 |
|---|---|
| BUSY | 当前轴存在已接受但尚未终止的任务,包括运动、WAIT和PAUSED |
| PULSE_ACTIVE | 当前物理脉冲正在输出;WAIT和PAUSED期间为0 |
| DONE | 当前任务正常完成并锁存 |
| WAIT | 当前任务正在等待段条件 |
| ERROR | 当前任务异常结束并锁存错误 |
采用方案A:
FR-STA-01: DONE只表示正常完成,并按上述方案A产生、保持和清零。
现有 USART1 Modbus RTU 从站作为配置和监控通道。
系统应支持:
协议规则如下:
PLSR内存地址、数据类型和固定占用规则见
PLSR地址映射。地址分配必须避开现有演示、
Backup
SRAM保持区。原Modbus通信历史功能不纳入PLSR版本,原历史寄存器区域释放给
S0/S1动态数据池使用。
需要保存:
保存规则如下:
position_valid。测试报告应记录板卡是否安装 VBAT 以及最终采用的数据恢复等级。 XDM-60T4-E
已确认安装有效 VBAT,Backup SRAM 可用于保持动态检查点;
当前逻辑位置必须具有独立的 position_valid 标志。
每个轴必须提供以下与PLSR直接相关的公共参数,字段地址严格采用
PLSR地址映射中的信捷原地址,不得采用自定义轴块偏移:
工程单位必须在内核换算层支持,不再限定为上位机换算。换算应保存小数余数,
避免多段或重复运动的累计舍入漂移。
软限位按当前逻辑位置判断。到达对应软限位时执行减速停止,禁止继续向越界方向
启动,但允许反向离开。软限位和硬限位可同时启用。
发生运动方向反转时,应按配置加入对应方向的齿隙补偿脉冲,并使用补偿加减速时间;
补偿脉冲、指令位置和累计脉冲的统计口径必须在设计书中分别定义。
内部自测至少包括:
外部诊断和测试至少包括:
使用示波器或逻辑分析仪测量输出频率。
统计实际脉冲边沿数量。
检查占空比和方向建立时间。
检查梯形、S 形和正弦曲线。
进行连续运行和频繁启停压力测试。
| 诊断项 | 要求 |
|---|---|
| 软件累计脉冲 | 记录实际发送数量 |
| 硬件边沿计数 | 记录输出实际边沿 |
| 差值诊断 | 判断输出异常 |
| 频率记录 | 保存当前和最高频率 |
| 段事件记录 | 记录结束原因 |
用于定位:
至少应定义以下错误:
参数未初始化
输出点非法或冲突
频率为零或超限
脉冲数或段数非法
段参数冲突
跳转段号非法
路径循环超限
绝对位置未建立
模块忙
非法状态命令
定时器初始化失败
Flash数据无效或保存失败
等待输入超时
立即停止
累计计数溢出
内部计数异常
运动控制事件优先级:
急停
>
硬限位
>
STOP_IMMEDIATE
>
STOP_DECEL
>
PAUSE
>
正常运行
要求:
新增:
| 错误码 | 说明 |
|---|---|
| DEFAULT_SPEED_INVALID | 默认速度非法 |
| SEGMENT_OVERFLOW | 路径段数超过100 |
| OUTPUT_MODE_INVALID | 输出模式非法 |
| RESOURCE_CONFLICT | 输出资源冲突 |
| PARAMETER_LOCKED | 运行参数禁止修改 |
| DONE_STATE_ERROR | 完成状态异常 |
| 编号 | 性能项 | 验收指标 |
|---|---|---|
| PR-01 | 保证频率范围 | 1 Hz~100 kHz |
| PR-02 | 固定频率误差 | 使用可实现的最佳定时器分频值,记录目标值、实际值及误差,不设统一百分比限值 |
| PR-03 | 正常完成脉冲误差 | 0 个脉冲 |
| PR-04 | 占空比 | 目标 50%,满足驱动器最小高低电平时间 |
| PR-05 | 方向建立时间 | 不小于配置值 |
| PR-06 | 运行调频开始生效 | 不超过当前 S2 配置的 1 ms 或 0.1 ms |
| PR-07 | 段边界 | 不得产生非配置停顿、窄脉冲或重复边沿 |
以下是 V1.0 初始预算,首次 100 kHz 压力测试后可根据实测调整,但必须经过
设计评审并记录原因:
| 编号 | 性能项 | 初始指标 |
|---|---|---|
| PR-RT-01 | 控制更新周期 | S2 可配置为 1 ms 或 0.1 ms |
| PR-RT-02 | 脉冲产生 | 由硬件定时器维持,不受 OS 调度影响 |
| PR-RT-03 | 脉冲级中断最坏执行时间 | 实测并记录,不得导致脉冲数量错误 |
| PR-RT-04 | PLSR CPU 占用率 | 四轴 100 kHz 并发时以实测记录并验证不影响系统实时性 |
| PR-RT-05 | PLSR 静态 RAM | 实测并记录,不设固定8 KiB限制 |
| PR-RT-07 | 共享数据 | 使用原子快照或临界区保护 |
| PR-RT-08 | 通信压力 | Modbus/USB 压力下脉冲计数误差仍为 0 |
| 编号 | 性能项 | 验收指标 |
|---|---|---|
| PR-REL-01 | 连续运行 | 测试时长由测试方案确定,运行期间不得出现计数错误或任务失联 |
| PR-REL-02 | 频繁启停 | 不产生额外脉冲和非法状态转换 |
| PR-REL-03 | 异常参数 | 拒绝执行且不影响当前合法任务 |
| PR-REL-04 | 重新上电 | 输出安全,不自动恢复运动 |
| PR-REL-05 | 参数恢复 | 已成功保存的固定配置和Backup SRAM动态数据能够按定义恢复 |
| PR-REL-06 | 通信并发 | 连续读写状态时运动结果保持准确 |
| 编号 | 验收项 | 合格标准 |
|---|---|---|
| AT-01 | 固定频率 | 1 Hz~100 kHz 使用最佳定时器分频值,并记录实际误差 |
| AT-02 | 固定脉冲数 | 正常完成误差为 0 个 |
| AT-03 | 正反转 | 方向电平和脉冲数量正确 |
| AT-04 | 相对定位 | 连续相对运动位置累计正确 |
| AT-05 | 绝对定位 | 从不同当前位置到同一目标位置结果正确 |
| AT-06 | 加减速 | 曲线、起止频率和脉冲总数正确 |
| AT-07 | 多段路径 | 段顺序、频率、数量和等待条件正确 |
| AT-08 | 完成方式 | 段结束后才向下一段频率变化 |
| AT-09 | 后续方式 | 段结束时已经达到下一段目标频率 |
| AT-10 | 动态调频 | 在 S2 配置的 1 ms 或 0.1 ms 内开始生效且无异常脉冲 |
| AT-11 | 停止控制 | 减速停止和立即停止符合定义 |
| AT-12 | 重复命令 | 相同命令序号不产生重复运动 |
| AT-13 | 掉电恢复 | 不自动运动,位置有效性符合恢复等级 |
| AT-14 | 上电安全 | 上电和复位期间无意外脉冲 |
| AT-17 | 四轴独立运行 | 四轴同时以100 kHz运行时无丢脉冲、重复脉冲和异常周期,且状态和累计数据互不串扰 |
| AT-18 | AB 相输出 | 两个AB轴可独立运行;一个完整正交周期计1个指令脉冲,周期频率、相位方向和数量正确 |
| AT-19 | S0等待与跳转 | 六种等待条件、动态参数来源、提前/延后触发和0/指定/自身跳转语义与信捷一致 |
| AT-20 | 公共参数 | 单位换算、软限位、方向延时、齿隙补偿和FOLLOW参数均通过测试 |
| AT-21 | 零值及边界 | INT32最小值、频率0、脉冲数0跳段和绝对零位移行为符合本规格 |
| AT-22 | 段事件和监控 | 每段事件、运行标志、当前段计数和累计计数可被稳定读取 |
新增测试:
正式测试应使用开发板、逻辑分析仪和PC Modbus测试工具,并记录测试固件、
参数、接线、测量设备、原始波形和测试结论。
以下事项不改变V1.0需求范围,属于设计、实现和上板验收阶段需要验证的内容:
Core、Modbus、Middlewares、EWARM 和 HostComputer