2015-04-03 124 views
1

我想要推導出一種算法,該算法將允許我計算圓周運動中的角位移。這是一個我正在編程的物理設備,所以我確實有0到2pi的當前角度位置的反饋。我附上了一張照片,可以幫助您瞭解我正在嘗試實現的內容(請參見下文)。每次處理器掃描程序時都會更新標籤,然後通過取得Theta2-Theta1來計算delta delta值,然後將其存儲到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

你只需要添加:

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

保持DeltaTheta = Theta2-Theta1,然後實現這個條件? – Dustin11h3 2015-04-03 17:20:03

+0

是的。只需將此添加到您的原始3行。 – stark 2015-04-03 17:21:03

+0

謝謝@stark – Dustin11h3 2015-04-06 13:29:01