在前面一節,我們簡單介紹了通過PLC+HMI實現完整控制松下伺服的上使能-運動,采集位置,速度等功能,這里我們會大量簡化用到的貝福功能塊(為了更加實用)。首先依然是對單個軸的封裝,我們之前的做法,例如伺服上使能,使用了MC_Power模塊,這個模塊的輸入和輸出引腳都是自己定義的變量,比如是否上電成功我們是靠AxisPowerReady的信號來判斷的,如果有兩個甚至多個伺服的時候,這樣做就很不方便管理了,所有的同類型變量都應該用數組統一管理。
改變之后的上使能,就變成了調用一個模塊(我們把AxisPowerModule定義成一個數組,當TargetID是0的時候就表示給數組的第一個元素執行,與之對應的輸出引腳,比如是否上電成功,是否ExtFeed成功,也全部是在一個數組里面)
這樣我們可以在一個全局文件中對所有軸的輸入輸出參數統一管理(定義成0..10的這么長數組是為了以后方便擴展,雖然目前是控制兩個模組,但是如果要控制多個電機,就無需再增減變量了,主程序可以保持結構完整)
講到主程序,我們還需要區分針對單個軸和針對整個項目的變量區分。例如初始化,讀寫偏移值(后續會增加更多功能,比如PTP運動)都是針對整個項目,或者說整個機器的,不同的項目也 不一樣。而針對單個軸的卻都是有限的,無非是上使能,采集位置,速度,錯誤等等。所以J0和J1可以用一個Groupbox封起來,以后不管什么項目這些單關節的完整功能都是應該具備而且不變的(當整個項目的某個功能不能用了,我們可以馬上切換到單個關節的頁面,測試是否可以單關節運動)
在讀寫偏移值的方面,我個人認為寫入文件的方式更加合理和方便。跟上一講類似,調用貝福的模塊需要當前周期為FALSE,下個周期為TRUE,模塊才能執行成功(一共用到了FileClose,Open,Read,Write四個模塊),本質上讀取文件是OPEN-READ-CLOSE三步,寫入文件是OPEN-WRITE-CLOSE三步(不能寫完直接讀,要有一個周期讓這些模塊都是FALSE)
當然讀寫偏移值有其他的實現方式,比如在每個軸的Enc參數里面人為地改寫Position Bias,然后激活配置,這樣也可以,但是比較繁瑣,或者無法交給用戶,你不可能告訴客戶你要這樣點開,然后寫一個值,所以最好還是一個按鈕搞定。(實現的功能就是標記零點,本質上使用了絕對值編碼器的松下伺服位置是絕對的,我們標記零點只是標記一個偏移值,真正要讓電機回到零點就要走到讀取電機位置的數值是0點的位置,而實際上一般做不到或者很難做到,所以最簡單的方法是用一個偏移值,我們項目上認為當前關節的位置=從電機讀取的位置+偏移值,這樣就可以在任意位置把當前位置作為零點了)
在運動控制方面,我們丟棄了之前的絕對運動,相對運動,勻速運動這些模塊,而是只使用唯一的ExtFeed模塊,不斷給位置來控制電機運動(這樣做最大的好處是當我們需要使用自定義算法,比如規划一個圓弧,不規則曲線的時候,我們算法必然只能得到每個周期的每個關節的位置,那么就可以直接把算法得到的位置灌入這個模塊,非常方便,這是使用貝福的封閉的模塊做不到的)。當然讀取位置,速度,錯誤這些模塊仍然要保留,目前沒有別的好方法。不難想象,JOG+和JOG-本質就是勻速運動(當然啟停的時候不是勻速的),MOVE的本質就是絕對運動(走到目標位置,只不過沒有空間軌跡規划,只是簡單的判斷了當前位置和目標位置是否很小了,很小就停住了,這樣做也會有問題)
還是說運動部分,為了降低難度,我們只測試了最簡單的ExtFeed給位置的情況(每個時間周期的新位置=老的位置+速度*時間),這種方式實際上對電機的啟停都是有損害的(位置曲線是一條折線,對位置求導速度曲線在啟動和停止的時候是無窮大的,加速度也是)。比較重要的一個學習內容是監控軸的位置,速度,加速度曲線,這里我們簡單演示了采集位置和速度,當然機器看起來沒什么問題(如果機械方面有緩沖件也是可以降低沖擊力的)
最后需要注意的一點是我們把電機位置,電機速度轉換到了關節位置,關節速度(機械部分不一樣,轉換的比例也不一樣,但是不管是模組只是加了一個聯軸器,滾珠絲杠,還是加了減速機,減速比可能1:50,1:100,對程序來說都需要一個固定的轉換,如果項目變了,直接改這個比例就行了)。我們不關心電機位置和速度,只關心輸出的關節位置和速度(最直接的用途就是做軟件的限位,比如J0這個關節在當前項目允許的位置是-1000度到2000度,速度允許的是300度每秒)當然逆向的轉換也是必要的,算法生成的針對關節的位置,最后要傳入電機還是需要轉換成電機的位置(這里我們並沒有把限位加上去,因為針對單個關節的點動,JOG+,JOG-是不應該受到項目的軟限位約束的,單關節的點動就是點動,萬一超限位了項目上的功能已經不能用了還是要用這組基本點動功能讓他恢復正常狀態,你可以理解針對單個關節的功能就是倍福自帶的NC功能或者松下伺服軟件自帶的功能,這部分功能是獨立於你的項目,才是合理的。我對CurrentJob里面針對單個關節的運動都定義成了-30,-24這種都是負的數值,后續項目上的功能狀態都是正值,就很好區分了)
更多教學視頻和資料下載,歡迎關注以下信息:
我的優酷空間:
http://i.youku.com/acetaohai123
我的在線論壇:
http://csrobot.gz01.bdysite.com/
問題交流:
QQ:910358960