戰(zhàn)指南)
1. 項(xiàng)目緣起與整體方案設(shè)計(jì)1.1 為什么選H5U加EtherCAT這套組合匯川H5U這臺(tái)PLC在小型自動(dòng)化設(shè)備里出鏡率很高本體自帶EtherCAT主站口不用額外插模塊就能掛總線伺服這一點(diǎn)對(duì)成本敏感的產(chǎn)線改造項(xiàng)目來說非常關(guān)鍵。我最早接觸H5U是在一條包裝線上原來用的是脈沖控制四軸聯(lián)動(dòng)的時(shí)候接線一大堆調(diào)試時(shí)稍微有點(diǎn)干擾就丟脈沖后來換成EtherCAT總線方案一根網(wǎng)線串起四臺(tái)伺服接線量直接砍掉大半定位精度也穩(wěn)了。EtherCAT本身是實(shí)時(shí)工業(yè)以太網(wǎng)協(xié)議采用主從架構(gòu)主站發(fā)送數(shù)據(jù)幀經(jīng)過每個(gè)從站時(shí)從站芯片在數(shù)據(jù)幀“路過”的瞬間就把自己的數(shù)據(jù)讀寫完成不需要整幀接收再處理所以循環(huán)周期可以做到很短。H5U作為主站典型循環(huán)周期能跑到1ms甚至更低對(duì)于大多數(shù)點(diǎn)位控制和速度控制場(chǎng)景完全夠用。AutoShop是匯川自家的編程軟件把EtherCAT組態(tài)、軸配置、功能塊調(diào)用都集成在一個(gè)界面里不用在多個(gè)工具之間來回切換這是它比一些通用方案省心的地方。這套方案適合誰如果你手上有H5U要控制匯川SV660系列或者其他支持EtherCAT的伺服做位置控制或者速度控制那這篇內(nèi)容基本可以照著走。就算你用的是別的品牌伺服只要支持標(biāo)準(zhǔn)EtherCAT協(xié)議組態(tài)思路也是一樣的區(qū)別主要在PDO映射和對(duì)象字典的細(xì)節(jié)上。1.2 整體控制架構(gòu)拆解整個(gè)系統(tǒng)的數(shù)據(jù)流是這樣的AutoShop里配置好EtherCAT網(wǎng)絡(luò)掃描到從站伺服然后建立軸對(duì)象軸對(duì)象通過PDO過程數(shù)據(jù)對(duì)象和伺服驅(qū)動(dòng)器交換數(shù)據(jù)。主站每個(gè)循環(huán)周期發(fā)一次過程數(shù)據(jù)里面包含控制字、目標(biāo)位置、目標(biāo)速度這些從站返回狀態(tài)字、實(shí)際位置、實(shí)際速度這些。程序里調(diào)用運(yùn)動(dòng)控制功能塊功能塊把指令翻譯成PDO數(shù)據(jù)主站硬件負(fù)責(zé)發(fā)出去。位置控制和速度控制的區(qū)別在于工作模式。位置模式走的是CSP循環(huán)同步位置或者PP輪廓位置模式速度模式走的是CSV循環(huán)同步速度或者PV輪廓速度模式。H5U的軸配置里可以直接選模式選完之后PDO映射會(huì)自動(dòng)調(diào)整不需要手動(dòng)去改對(duì)象字典這是AutoShop比較人性化的一點(diǎn)。提示EtherCAT組態(tài)之前先把伺服的站號(hào)設(shè)好。匯川伺服默認(rèn)站號(hào)是1如果掛多臺(tái)每臺(tái)都要改站號(hào)不能重復(fù)。站號(hào)一般在伺服面板里改改完斷電重啟才生效。2. 硬件接線與軟件環(huán)境準(zhǔn)備2.1 硬件清單與接線要點(diǎn)先列一下需要的東西。PLC用H5U任意型號(hào)只要帶EtherCAT口就行一般本體上標(biāo)著“EtherCAT”的那個(gè)網(wǎng)口就是。伺服方面匯川SV660N或者SV670N都支持EtherCAT選型的時(shí)候注意看型號(hào)里有沒有“N”后綴有N的才是總線型。電機(jī)按實(shí)際負(fù)載選選型手冊(cè)里根據(jù)扭矩和轉(zhuǎn)速查就行這里不展開。接線就簡(jiǎn)單了H5U的EtherCAT口接到第一臺(tái)伺服的IN口第一臺(tái)伺服的OUT口接到第二臺(tái)伺服的IN口依次串下去。最后一臺(tái)的OUT口空著或者接終端電阻。網(wǎng)線用標(biāo)準(zhǔn)超五類屏蔽網(wǎng)線長(zhǎng)度別超過100米實(shí)際項(xiàng)目里一般幾米到十幾米完全沒問題。注意EtherCAT網(wǎng)線一定要用屏蔽線屏蔽層要可靠接地。我遇到過因?yàn)榫W(wǎng)線沒屏蔽導(dǎo)致通訊偶發(fā)丟幀的情況換了屏蔽線立馬就好了。另外伺服的動(dòng)力線和編碼器線盡量遠(yuǎn)離通訊線走線槽里分開走減少干擾。電源方面H5U用24V直流供電伺服主回路根據(jù)電機(jī)功率接三相或單相交流控制回路也是24V。上電順序建議先給伺服控制電再給PLC電最后給伺服主電這樣避免上電瞬間通訊異常。2.2 AutoShop軟件安裝與工程創(chuàng)建AutoShop在匯川官網(wǎng)可以下載安裝過程沒什么坑一路下一步就行。裝完之后打開新建工程選擇對(duì)應(yīng)的PLC型號(hào)H5U系列選“H5U”就行。工程建好之后左邊項(xiàng)目樹里能看到“EtherCAT配置”這一項(xiàng)雙擊進(jìn)去就是總線組態(tài)界面。軟件版本建議用比較新的老版本可能不支持某些伺服型號(hào)的XML文件。匯川伺服的EtherCAT XML文件ESI文件在官網(wǎng)下載或者隨伺服附帶的光盤里都有AutoShop組態(tài)的時(shí)候需要加載這個(gè)文件才能識(shí)別到伺服。如果掃描不到從站八成是ESI文件沒裝或者版本不對(duì)。2.3 EtherCAT從站掃描與組態(tài)在EtherCAT配置界面里點(diǎn)“掃描”按鈕軟件會(huì)自動(dòng)掃描總線上掛的從站。掃描之前確保PLC和伺服都上電網(wǎng)線接好。掃描到之后從站會(huì)出現(xiàn)在列表里顯示站號(hào)、名稱、版本這些信息。掃描到從站之后需要把從站添加到組態(tài)里。選中從站點(diǎn)“添加”然后配置PDO映射。AutoShop一般會(huì)自動(dòng)加載默認(rèn)的PDO映射對(duì)于位置和速度控制默認(rèn)映射通常就夠用了。如果不夠用可以手動(dòng)添加對(duì)象比如要讀伺服的實(shí)際扭矩就得把扭矩對(duì)象加到輸入PDO里。配置項(xiàng)位置模式速度模式工作模式CSP或PPCSV或PV控制字0x60400x6040狀態(tài)字0x60410x6041目標(biāo)位置0x607A不適用目標(biāo)速度0x60FF0x60FF實(shí)際位置0x60640x6064實(shí)際速度0x606C0x606C這張表是核心PDO映射就是圍繞這些對(duì)象來的。位置模式下重點(diǎn)看0x607A和0x6064速度模式下重點(diǎn)看0x60FF和0x606C。控制字和狀態(tài)字兩種模式都要用控制字用來使能、啟動(dòng)、停止?fàn)顟B(tài)字用來讀伺服當(dāng)前狀態(tài)。3. 軸配置與功能塊編程實(shí)操3.1 建立軸對(duì)象與參數(shù)設(shè)置組態(tài)完從站之后下一步是建立軸對(duì)象。在項(xiàng)目樹里找到“運(yùn)動(dòng)控制”或者“軸配置”新建一個(gè)軸綁定到剛才組態(tài)的EtherCAT從站。一個(gè)從站對(duì)應(yīng)一個(gè)軸幾臺(tái)伺服就建幾個(gè)軸。軸參數(shù)里幾個(gè)關(guān)鍵項(xiàng)要設(shè)對(duì)。一個(gè)是“軸類型”選“總線軸”或者“EtherCAT軸”不同版本叫法可能不一樣。另一個(gè)是“單位換算”這個(gè)很重要要把脈沖數(shù)換算成毫米或者度。比如伺服編碼器是23位一圈是8388608個(gè)脈沖絲杠導(dǎo)程是10mm那一個(gè)脈沖對(duì)應(yīng)的距離就是10除以8388608約等于0.00000119mm。在軟件里填好“每轉(zhuǎn)脈沖數(shù)”和“每轉(zhuǎn)距離”軟件會(huì)自動(dòng)算。提示單位換算設(shè)錯(cuò)了位置就會(huì)差一個(gè)比例系數(shù)。調(diào)試的時(shí)候先用手動(dòng)模式走一段固定距離量一下實(shí)際走了多少反推一下比例對(duì)不對(duì)。這個(gè)步驟別省省了后面程序里怎么調(diào)都調(diào)不準(zhǔn)。速度參數(shù)方面要設(shè)最大速度、加減速時(shí)間這些。最大速度根據(jù)電機(jī)額定轉(zhuǎn)速和機(jī)械結(jié)構(gòu)算加減速時(shí)間根據(jù)負(fù)載慣量來一般先設(shè)個(gè)保守值調(diào)試的時(shí)候再優(yōu)化。3.2 位置控制功能塊的使用AutoShop里位置控制常用的功能塊有MC_Power、MC_MoveAbsolute、MC_MoveRelative、MC_MoveVelocity、MC_Stop這些跟PLCopen標(biāo)準(zhǔn)運(yùn)動(dòng)控制功能塊是一致的。用起來跟西門子、三菱的類似學(xué)過其他品牌的話上手很快。MC_Power是使能功能塊Enable引腳給TRUE軸就使能了。使能之后Status引腳變TRUEBusy變FALSE表示軸準(zhǔn)備好了。如果使能不了看Error引腳和ErrorID常見原因是伺服沒上電、通訊沒建立、或者伺服有報(bào)警沒復(fù)位。MC_MoveAbsolute是絕對(duì)定位給定目標(biāo)位置、速度、加減速功能塊執(zhí)行完Done引腳變TRUE。Execute引腳用上升沿觸發(fā)觸發(fā)一次走一次。目標(biāo)位置是絕對(duì)坐標(biāo)相對(duì)于原點(diǎn)。原點(diǎn)怎么定可以用回零功能塊MC_Home也可以用伺服自己的原點(diǎn)開關(guān)?;亓惴绞皆谳S參數(shù)里選有找Z相信號(hào)、找原點(diǎn)開關(guān)加Z相、直接設(shè)當(dāng)前位置為零點(diǎn)等幾種。MC_MoveRelative是相對(duì)定位走的是相對(duì)于當(dāng)前位置的距離。Execute上升沿觸發(fā)走完Done變TRUE。相對(duì)定位適合那種不需要知道絕對(duì)位置、只走固定距離的場(chǎng)景比如送料、推料。MC_MoveVelocity是速度控制功能塊給定速度值軸就按這個(gè)速度一直轉(zhuǎn)直到收到停止指令或者觸發(fā)其他條件。Direction引腳控制方向0是正轉(zhuǎn)1是反轉(zhuǎn)。這個(gè)功能塊在速度模式下用位置模式下也能用但底層實(shí)現(xiàn)不一樣。3.3 速度控制功能塊的使用速度控制比位置控制簡(jiǎn)單一些核心就是MC_MoveVelocity。使能軸之后調(diào)用MC_MoveVelocity給個(gè)速度值軸就轉(zhuǎn)起來了。速度值單位是用戶單位每秒比如mm/s或者度/s取決于軸參數(shù)里的單位換算。速度模式下如果要讀實(shí)際速度用MC_ReadActualVelocity功能塊輸出就是當(dāng)前速度。要讀實(shí)際位置用MC_ReadActualPosition速度模式下位置也會(huì)變只是不控制位置而已。速度控制的一個(gè)典型應(yīng)用是收放卷。收卷軸用速度模式根據(jù)卷徑變化調(diào)整速度保持線速度恒定。這時(shí)候需要實(shí)時(shí)讀卷徑算目標(biāo)速度然后寫給MC_MoveVelocity。卷徑怎么算可以用超聲波測(cè)距也可以用編碼器算看具體機(jī)械結(jié)構(gòu)。注意速度模式下切換方向的時(shí)候最好先減速到零再反向直接反向?qū)C(jī)械沖擊很大。我見過直接反向把聯(lián)軸器擰斷的案例減速時(shí)間設(shè)長(zhǎng)一點(diǎn)讓電機(jī)有個(gè)緩沖。3.4 功能塊調(diào)用順序與狀態(tài)機(jī)設(shè)計(jì)功能塊不能亂調(diào)要有順序。典型的狀態(tài)機(jī)是這樣的先MC_Power使能等Status為TRUE然后判斷是位置模式還是速度模式位置模式調(diào)MC_MoveAbsolute或MC_MoveRelative速度模式調(diào)MC_MoveVelocity運(yùn)行過程中監(jiān)控Error和Status要停的時(shí)候調(diào)MC_Stop或者把速度給零。每個(gè)功能塊的Execute引腳都要用上升沿觸發(fā)不能一直給TRUE否則功能塊會(huì)反復(fù)執(zhí)行。用PLC的上升沿指令比如上升沿觸點(diǎn)或者功能塊自帶的Execute上升沿檢測(cè)。AutoShop里功能塊的Execute引腳本身就是上升沿有效的給一個(gè)掃描周期的脈沖就行。狀態(tài)機(jī)用梯形圖或者ST語言寫都行。梯形圖直觀適合邏輯簡(jiǎn)單的場(chǎng)景ST語言適合復(fù)雜邏輯寫起來緊湊。我一般用ST寫狀態(tài)機(jī)用CASE語句分狀態(tài)每個(gè)狀態(tài)里調(diào)對(duì)應(yīng)的功能塊清晰好維護(hù)。4. 調(diào)試過程與常見問題排查4.1 通訊建立與軸使能調(diào)試第一次調(diào)試先別急著寫程序先把通訊和使能調(diào)通。上電之后在AutoShop的EtherCAT配置界面看從站狀態(tài)正常應(yīng)該是“OP”狀態(tài)如果是“INIT”或者“PREOP”說明通訊沒建立。檢查網(wǎng)線、站號(hào)、ESI文件這三個(gè)是最常見的原因。通訊正常之后在軸配置界面點(diǎn)“使能”按鈕看伺服能不能使能。使能成功的話伺服面板上會(huì)顯示“run”或者類似的指示。如果使能失敗看錯(cuò)誤碼匯川伺服的錯(cuò)誤碼手冊(cè)里有常見的有編碼器故障、過載、欠壓這些。使能之后用手動(dòng)模式點(diǎn)動(dòng)一下看電機(jī)轉(zhuǎn)不轉(zhuǎn)方向?qū)Σ粚?duì)速度對(duì)不對(duì)。手動(dòng)模式在軸配置界面里有給個(gè)速度值點(diǎn)正轉(zhuǎn)反轉(zhuǎn)電機(jī)應(yīng)該按預(yù)期轉(zhuǎn)動(dòng)。如果方向反了改軸參數(shù)里的方向取反或者改伺服參數(shù)里的方向。4.2 位置控制精度問題排查位置控制最常見的問題是定位不準(zhǔn)。原因可能有幾個(gè)一是單位換算錯(cuò)了這個(gè)前面說過用手動(dòng)模式驗(yàn)證二是機(jī)械間隙絲杠或者齒輪有間隙反向的時(shí)候會(huì)有偏差這個(gè)靠程序補(bǔ)償或者機(jī)械調(diào)整三是伺服增益沒調(diào)好定位的時(shí)候有超調(diào)或者振蕩用AutoShop的伺服調(diào)試工具調(diào)增益。還有一個(gè)容易被忽略的是原點(diǎn)偏移?;亓阒笤c(diǎn)位置和機(jī)械零點(diǎn)可能差一點(diǎn)可以在軸參數(shù)里設(shè)原點(diǎn)偏移量補(bǔ)償這個(gè)差值。偏移量怎么定回零之后手動(dòng)走到機(jī)械零點(diǎn)讀當(dāng)前位置把這個(gè)值填到偏移量里。提示調(diào)試位置精度的時(shí)候用千分表或者激光測(cè)距儀量實(shí)際位置別靠眼睛看。眼睛看誤差至少0.5mm千分表能到0.01mm差別很大。4.3 速度控制穩(wěn)定性問題排查速度控制常見的問題是速度波動(dòng)。原因可能是負(fù)載變化、增益不夠、或者速度指令本身在變。如果是負(fù)載變化導(dǎo)致的調(diào)大速度環(huán)增益或者加前饋補(bǔ)償。如果是速度指令在變檢查程序里速度值的來源是不是有干擾或者計(jì)算錯(cuò)誤。速度模式下還有一個(gè)問題是低速爬行。電機(jī)在很低的速度下轉(zhuǎn)不平穩(wěn)一頓一頓的。這是伺服低速特性決定的可以調(diào)小速度環(huán)積分時(shí)間或者用位置模式代替速度模式位置模式低速性能通常更好。問題現(xiàn)象可能原因排查方法解決措施通訊不上網(wǎng)線、站號(hào)、ESI檢查接線和站號(hào)換屏蔽網(wǎng)線改站號(hào)重裝ESI軸使能失敗伺服報(bào)警、通訊未建立看伺服面板和錯(cuò)誤碼復(fù)位報(bào)警檢查通訊狀態(tài)定位不準(zhǔn)單位換算、機(jī)械間隙手動(dòng)模式驗(yàn)證改換算參數(shù)機(jī)械調(diào)整速度波動(dòng)增益、負(fù)載變化監(jiān)控速度曲線調(diào)增益加前饋低速爬行伺服低速特性低速測(cè)試調(diào)積分時(shí)間改位置模式這張表是我調(diào)試時(shí)總結(jié)的基本上覆蓋了八成以上的問題。遇到問題先查表查不到再深入分析。4.4 實(shí)操心得與避坑經(jīng)驗(yàn)說幾個(gè)我踩過的坑。第一個(gè)是ESI文件版本匯川伺服不同批次的ESI文件可能不一樣用錯(cuò)了版本組態(tài)會(huì)報(bào)錯(cuò)。解決辦法是每次都用隨伺服附帶的ESI文件別圖省事用舊的。第二個(gè)是PDO映射默認(rèn)映射有時(shí)候不夠用比如要讀扭矩默認(rèn)映射里沒有。這時(shí)候要手動(dòng)加加完之后要重新下載組態(tài)不然不生效。加PDO的時(shí)候注意輸入輸出別搞反了輸入是從站到主站輸出是主站到從站。第三個(gè)是循環(huán)周期H5U的EtherCAT循環(huán)周期設(shè)太小了CPU負(fù)載高設(shè)太大了響應(yīng)慢。一般1ms到4ms之間根據(jù)軸數(shù)和程序復(fù)雜度調(diào)。軸多、程序復(fù)雜就設(shè)大一點(diǎn)軸少、要求高就設(shè)小一點(diǎn)。第四個(gè)是接地EtherCAT通訊對(duì)干擾敏感接地不好容易丟幀。PLC和伺服的PE端子都要可靠接地接地電阻小于4歐姆。網(wǎng)線屏蔽層兩端都要接地別只接一端。5. 程序優(yōu)化與擴(kuò)展應(yīng)用5.1 程序結(jié)構(gòu)優(yōu)化建議程序?qū)懘罅酥笠帜K。我一般把軸控制封裝成功能塊每個(gè)軸一個(gè)功能塊實(shí)例輸入輸出用結(jié)構(gòu)體這樣主程序里看起來很清爽。功能塊內(nèi)部處理使能、定位、速度、停止這些邏輯外部只需要給指令和讀狀態(tài)。狀態(tài)機(jī)用ST寫每個(gè)軸一個(gè)CASE語句狀態(tài)包括Idle、PowerOn、Homing、Moving、Stopping、Error。狀態(tài)之間用條件跳轉(zhuǎn)比如PowerOn狀態(tài)等Status為TRUE就跳到IdleIdle狀態(tài)收到定位指令就跳到MovingMoving狀態(tài)等Done為TRUE就跳回Idle。Error狀態(tài)處理錯(cuò)誤錯(cuò)誤清除后跳回Idle。提示功能塊實(shí)例要放在靜態(tài)變量區(qū)別放在臨時(shí)變量區(qū)否則每個(gè)掃描周期都重新初始化狀態(tài)保持不住。這個(gè)坑我踩過調(diào)了半天才發(fā)現(xiàn)是變量類型的問題。5.2 多軸同步與插補(bǔ)應(yīng)用H5U支持多軸同步可以做簡(jiǎn)單的插補(bǔ)。比如XY平臺(tái)走直線兩個(gè)軸同時(shí)動(dòng)保持速度比例。用MC_MoveLinearAbsolute功能塊給定終點(diǎn)坐標(biāo)和速度兩個(gè)軸會(huì)自動(dòng)協(xié)調(diào)。插補(bǔ)精度取決于循環(huán)周期和伺服響應(yīng)周期越小精度越高。多軸同步的難點(diǎn)是軸之間的耦合。比如一個(gè)軸是主軸另一個(gè)是從軸從軸位置跟隨主軸。這種用電子齒輪或者電子凸輪功能H5U支持這些。電子齒輪就是從軸速度等于主軸速度乘以一個(gè)比例比例可以實(shí)時(shí)改。電子凸輪是從軸位置是主軸位置的函數(shù)函數(shù)關(guān)系用凸輪表定義。5.3 與上位機(jī)通訊和數(shù)據(jù)采集H5U本身支持Modbus TCP和EtherNet/IP可以和上位機(jī)通訊。上位機(jī)讀PLC的數(shù)據(jù)包括軸狀態(tài)、實(shí)際位置、實(shí)際速度、報(bào)警信息這些。寫數(shù)據(jù)可以改速度、改目標(biāo)位置、啟動(dòng)停止。數(shù)據(jù)采集用PLC的變量記錄功能或者上位機(jī)輪詢。輪詢周期別太快100ms到500ms就行太快了PLC通訊負(fù)載高。要高速采集的話用PLC內(nèi)部的高速記錄功能先存到PLC內(nèi)存再批量傳給上位機(jī)。5.4 后續(xù)擴(kuò)展方向這套方案后續(xù)可以擴(kuò)展的地方不少。比如加視覺視覺定位之后把坐標(biāo)給PLCPLC控制軸走到位置。或者加力控讀伺服扭矩做力位混合控制。再或者加安全功能接安全PLC或者安全繼電器做安全停止。EtherCAT本身也支持更多從站類型除了伺服還可以掛IO模塊、編碼器模塊、閥島這些。H5U的EtherCAT主站能力有限掛太多從站循環(huán)周期會(huì)變長(zhǎng)一般掛十幾二十個(gè)從站沒問題再多就要考慮換更高級(jí)的PLC了。我個(gè)人在實(shí)際操作中的體會(huì)是這套方案最大的優(yōu)勢(shì)是省心。接線省心組態(tài)省心編程也省心。AutoShop把很多底層細(xì)節(jié)封裝好了不用去啃EtherCAT協(xié)議棧也不用去記對(duì)象字典選好模式調(diào)好參數(shù)就能跑。當(dāng)然省心的代價(jià)是靈活性差一點(diǎn)有些特殊需求可能實(shí)現(xiàn)不了但對(duì)于大多數(shù)常規(guī)應(yīng)用來說完全夠用了。