计算圆周运动的角度变化

时间:2015-04-03 17:11:03

标签: algorithm plc

我试图推导出一种能够计算圆周运动角位移的算法。这是我正在编程的物理设备,所以我确实有从0到2pi的当前角度位置的反馈。我附上了一张照片,可以帮助你看到我想要实现的目标(见下文)。每次处理器扫描程序时,都会更新标签,然后通过取Theta2-Theta1计算delta theta,然后将其存储到DeltaTheta标签中。问题在于,当我完成一次旋转时,Theta 2变为0而Theta 1仍然是3pi / 2左右,因此我获得了比我应该更大的Delta Theta。每次角度达到2 pi标记时,它都会重置为零。我正在使用该程序在Rockwell CompactLogix PLC上实现傅立叶分析算法。对于那些关心你的人,我使用“结构化文本”语言在RSLogix5000中进行编程。如果需要,请查看本网站以获取该语言的手册。 Structured Text  请参阅下面的示例代码。

ThetaOld = Theta;
Theta = SpindleActPosition; //This is feedback from the motor 0-2*pi
DeltaTheta = Theta2 - Theta1; //This is the "algorithm" I need help with

我也尝试过这种算法,但在其中发现了一个不允许它工作的循环孔。

DeltaTheta = [(Theta2 - Theta1) + 2*pi] MOD(2*pi)

我相信MOD运营商将成为我们的朋友,但我无法找到问题的解决方案。

其余代码与解决此问题无关。不幸的是,这台机器本质上,角度从12点钟位置开始,然后顺时针旋转。我无法改变这一点。

Generic System Diagram

1 个答案:

答案 0 :(得分:1)

你只需要添加:

IF DeltaTheta < 0 THEN
    DeltaTheta = DeltaTheta + 2*pi;
END_IF;