注释
[佩特里艾莫宁]
来自 `halshow`:<pre> 组件引脚:所有者类型 Dir 值名称 4 位 IN TRUE limit3.0.enable 4 float IN 100 limit3.0.in 4 bit IN FALSE limit3.0.load 4 float IN 50 limit3.0 .max 4 float IN 1e+20 limit3.0.maxa 4 float IN 1e+20 limit3.0.maxv 4 float IN -1e+20 limit3.0.min 4 float OUT 100 limit3.0.out 4 u32 IN 0x00000002 limit3 .0.smooth-steps 4 s32 OUT 3492 limit3.0.time </pre>
查看代码,如果输出引脚更新到最小和最大范围内,似乎是负载引脚控制。也许那里的代码应该移到 if 块之外: if (load) { // Apply first order limit in_pos_lim = fmin(max_, fmax(min_, invalue)); SET_NEXT_STATE(in_pos_lim, in_pos_lim); 返回; 但我并不真正了解代码并且可能误解了一些东西。
|
以下是我重现该问题所遵循的步骤:
运行 HAL 命令:
loadrt limit3
addf limit3.0 伺服
setp limit3.0.max 50
setp limit3.0.in 100
检查信号值
halshow
这是我期望发生的事情:
预计
limit3.0.out
限量50个这是发生了什么:
锯
limit3.0.out
是100。来自
halshow
:如果我设置
limit3.0.maxv
为1000
,它就会开始工作。但是eg10000
不行,所以不是简单的float溢出。版本测试:
在 LinuxCNC 2.8.2 和最新的 git 版本中都不适合我。
@zultron我不太明白limit3.comp中的逻辑。也许您对可能发生的事情有一些了解?