一.硬件介紹
PCIE464運動控制卡是正運動推出的一款EtherCAT總線+脈沖型、PCIE接口式的運動控制卡,可選6-64軸運動控制,支持多路高速數(shù)字輸入輸出,可輕松實現(xiàn)多軸同步控制和高速數(shù)據(jù)傳輸。
PCIE464運動控制卡適合于多軸點位運動、插補運動、軌跡規(guī)劃、手輪控制、編碼器位置檢測、IO控制、位置鎖存等功能的應(yīng)用。PCIE464運動控制卡適用于3C電子加工、檢測設(shè)備、半導體設(shè)備、SMT加工、激光加工、光通訊設(shè)備、鋰電及光伏設(shè)備、以及非標自動化設(shè)備等高速高精應(yīng)用場合。
PCIE4系列控制卡的應(yīng)用程序可以使用VC,VB,VS,C++,C#等軟件開發(fā),程序運行時需要動態(tài)庫zmotion.dll,調(diào)試時可以將RTSys軟件同時連接控制器,從而方便調(diào)試、方便觀察。
PCIE464產(chǎn)品介紹可點擊→“【EtherCAT同步周期快至100us】超高實時性PCIe EtherCAT控制卡PCIE464”查看。
更多關(guān)于PCIE464的詳情介紹,點擊“PCIE464 — 高速高精,超高實時性的PCIe EtherCAT實時運動控制卡”查看。
二.接線參考
1.IN數(shù)字量輸入接口
數(shù)字輸入分布在J400(IN0-IN7)和X400(IN8-IN39)信號接口中。
2.OUT數(shù)字量輸出接口
數(shù)字輸出分布在J400(OUT0-7)和X400(OUT8-OUT39)信號接口中。
3.單端編碼器及單端脈沖接線
單端脈沖接線圖
差分脈沖接線圖
單端編碼器接線圖
差分編碼器接線圖
注:PCIE464的J400接口中有一個差分脈沖軸接口和三個單端脈沖軸接口,兩個差分編碼器接口(其中一個與差分脈沖軸接口復用,取決于固件設(shè)定)和兩個單端編碼器接口,具體引腳定義參見PCIE464硬件手冊。
三.同步指令解析及技巧解釋
1.同步過程
同步跟隨過程分為三部分:加速追趕、同步加工、結(jié)束歸位。
(1)加速追趕:動作機構(gòu)加速追上產(chǎn)品位置,并保持追趕末端速度與產(chǎn)品速度一致的過程。
(2)同步加工:動作機構(gòu)加速追趕上之后,繼續(xù)保持與產(chǎn)品同樣的速度運動的過程,即兩者相對靜止的過程;加工動作常在此過程中進行。
(3)結(jié)束歸位:加工完成后,打斷跟隨過程,回歸待機位的過程。
? 正運動技術(shù)提供了成熟的同步跟隨執(zhí)行指令MOVESYNC完成上述過程。
2.同步指令
MOVESYNC -- 同步運動,皮帶上物體跟隨
語法:
MOVESYNC(mode,synctime,syncposition,syncaxis,pos1[,pos2, pos3…])
參數(shù)解釋:
(1)mode:mode=0 + angle,angle:皮帶旋轉(zhuǎn)角度,角度=皮帶軸dpos正向與BASE軸正向的夾角。使用時需要將角度轉(zhuǎn)換為弧度(0~2PI)。
(2)synctime:同步時間,ms單位。
(3)syncposition:皮帶軸物體被感應(yīng)到時皮帶軸的位置。
(4)syncaxis:皮帶軸軸號,-1表示沒有皮帶軸。
(5)pos1:皮帶軸物體被感應(yīng)到時的BASE第1個軸絕對位置。
(6)posn:皮帶軸物體被感應(yīng)到時的BASE第n個軸絕對位置。
上位機指令參數(shù)排列一樣。
3.使用疑難點解析
(1)如何獲知syncposition:皮帶軸物體被感應(yīng)到時皮帶軸的位置?
首先,我們先了解跟隨的完整實現(xiàn)流程,如下:
光電傳感器產(chǎn)生信號→控制器收到信號,鎖存獲取跟隨坐標→產(chǎn)品流到到位,跟隨觸發(fā)→追趕產(chǎn)品,進入同步加工,走軌跡→進入下一次跟隨。
那么按照流程看,物體被感應(yīng)到時的位置就由鎖存產(chǎn)生并記錄,我們只需要將鎖存數(shù)據(jù)記錄就獲取到了參數(shù)syncposition的值。
(2)如何獲知同步跟隨所需的POSN:皮帶軸物體被感應(yīng)到時跟隨軸的位置?
syncposition與POSN都是在物體被感應(yīng)到時的位置,兩者的關(guān)系是同時相對靜止的;所以此處的POSN:皮帶軸物體被感應(yīng)到時跟隨軸的位置并不是感應(yīng)到產(chǎn)品時跟隨軸所處的位置,而是感應(yīng)到產(chǎn)品時跟隨軸應(yīng)該走到的位置,也就是我們想要的產(chǎn)品同步跟隨位置點。
在上一步,我們獲知了皮帶軸的感應(yīng)位置是在鎖存的時候獲取到,那么可以在程序中設(shè)計,產(chǎn)品經(jīng)過傳感器后停下來,獲取當前皮帶軸位置,用鎖存到的值-皮帶軸當前位置=跟隨方向的位移量→移動歸零后的跟隨軸組到產(chǎn)品上標記的需要加工的起點位置,記錄下軸組位置數(shù)據(jù)→將軸組中跟隨方向軸的坐標-計算出來的跟隨方向的位移量=鎖存時跟隨軸組中跟隨方向的軸位置→記錄下數(shù)據(jù)就得到了皮帶軸物體被感應(yīng)到時跟隨軸的位置POSN。
(3)跟隨三個過程中的數(shù)據(jù)怎么填?是否需要重新計算?
跟隨三個過程中的參數(shù)數(shù)據(jù)不需要重新計算;三個過程中唯一需要變化的參數(shù)是synctime,其他的參數(shù)保持不變;而synctime參數(shù)根據(jù)實際加工需要設(shè)定即可,一般會將同步加工時間設(shè)置大。
(4)在同步加工段中,怎么去走加工軌跡?能直接控制跟隨軸組走軌跡嗎?
在同步過程中一般是不能直接使用運動指令去操控跟隨軸組走軌跡的,不然會打斷跟隨的狀態(tài);可以使用疊加運動的方式間接走軌跡;通過addax指令將幾個沒有用到的虛擬軸,疊加到跟隨軸組上,使用運動指令控制虛擬軸執(zhí)行加工軌跡,就能實現(xiàn)在保持跟隨狀態(tài)下走加工軌跡。
(5)不同產(chǎn)品軌跡所需時間不一樣,同步加工段的時間怎么計算?
其實在實際應(yīng)用中,同步加工段的時間通常會設(shè)置一個很大很大的時間值確保加工完成,加工完成后,用MOVESYNC的-2模式強制結(jié)束即可。
(6)加工中產(chǎn)品不斷進來,怎么實現(xiàn)跟隨軸組不回待機,連續(xù)跟隨加工產(chǎn)品?
只需要注意不要在程序中每一段的跟隨加工返回待機位的后面加入等待或者其他進運動緩沖的指令即可;因為復位用-1模式時,其會被后面的緩沖MOVESYNC覆蓋,也就是當下一個產(chǎn)品的MOVESYNC跟隨指令已經(jīng)壓進運動緩沖之后,當前產(chǎn)品加工完的復位MOVESYNC就會被覆蓋,無效。
4.擴展用法
MOVE_ADDAX運動緩沖疊加
使用MOVESYNC+MOVE_ADDAX,可以實現(xiàn)在保持跟隨狀態(tài)下直接操作跟隨軸組走軌跡。
四.C#語言進行項目開發(fā)
1.在VS2010菜單“文件”→“新建”→“項目”,啟動創(chuàng)建項目向?qū)А?/p>
2.選擇開發(fā)語言為“Visual C#”和.NET Framework 4以及Windows窗體應(yīng)用程序。
3.找到廠家提供的光盤資料里面的C#函數(shù)庫,路徑如下(32位庫為例)。
1)進入廠商提供的光盤資料找到“04PC函數(shù)”文件夾,并點擊進入。
2)選擇“01PC函數(shù)庫V2.1”文件夾。
3)選擇“Windows平臺”文件夾。
4)選擇“C#”文件夾。
5)根據(jù)需要選擇對應(yīng)的函數(shù)庫,這里選擇32位庫。
4.將廠商提供的C#的庫文件以及相關(guān)文件復制到新建的項目中。
1)將zmcaux.cs文件復制到新建的項目里面中。
2)將zauxdll.dll和zmotion.dll文件放入bindebug文件夾中。
5.雙擊Form1.cs里面的Form1,出現(xiàn)代碼編輯界面,在文件開頭寫入using cszmcaux,并聲明控制器句柄g_handle。
6.至此,項目新建完成,可進行C#項目開發(fā)。
C#跟隨主體代碼:
publicvoidSubMoveSync() { intiret =0; int[]iAxisList =newint[2]{0,1} ; int[]iTime =newint[3]; iTime[0] = Convert.ToInt32(TextAccTime.Text); iTime[1] = Convert.ToInt32(TextSyncTime.Text); iTime[2] = Convert.ToInt32(TextBackTime.Text); float[]fWaitPos =newfloat[2]; fWaitPos[0] = Convert.ToSingle (TextXpos.Text); fWaitPos[1] = Convert.ToSingle(TextYpos.Text); floatfOffPos= Convert.ToSingle(TextOffpos.Text); floatfPdAxisPos =0; //當前皮帶軸位置 float[] fMakrPos = newfloat[2]; //當前加工產(chǎn)品鎖存編碼器的位置 intiMaxNum = Convert.ToInt32(Text_TabNum.Text); floatimode =0; imode =0; //X方向跟隨 if(m_SyncMode ==1) //同步軌跡運動 { iret = zmcaux.ZAux_Direct_SetMerge(G_CardHandle,4,1); //打開虛擬X軸連續(xù)插補 iret = zmcaux.ZAux_Direct_Single_Addax(G_CardHandle,0,4); //虛擬4號軸X軸的運動疊加到實際X軸 iret = zmcaux.ZAux_Direct_Single_Addax(G_CardHandle,1,5); //虛擬5號軸Y軸的運動疊加到實際Y軸 } float[] Units =newfloat[2]; zmcaux.ZAux_Direct_GetUnits(G_CardHandle,2,refUnits[0]); zmcaux.ZAux_Direct_GetUnits(G_CardHandle,0,refUnits[1]); float[] ratio =newfloat[1] { Units[0] / Units[1] }; int[] scraxis =newint[1] {2}; while(true) { if( (m_RegistCount !=0) && (iWorkCount iMaxNum) //鎖存坐標已經(jīng)溢出,數(shù)據(jù)保存在鎖存前面 { iWorkCount = iWorkCount - m_RegistCount; //從下個循環(huán)開始取值 if(iWorkCount < m_RegistCount) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? iret = zmcaux.ZAux_Direct_GetTable(G_CardHandle, Convert.ToInt32(Text_TabStart.Text) +?1?+ iWorkCount,?1, fMakrPos); //獲取當前準備加工的鎖存位置 ? ? ? ? ? ? } ? ? ? ? ? ??else ? ? ? ? ? ? { ? ? ? ? ? ? ? ??continue; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ??//鎖存事件未觸發(fā) ? ? ? ??if?(m_RegistCount ==?0?|| m_RegistCount == iWorkCount) ? ? ?? { ? ? ? ? ? ??continue; ? ? ? ? } ? ? ? ??//等待傳送帶位置運動超過開始跟隨位置 ? ? ? ??do ? ? ? ? { ? ? ? ? ? ? iret = zmcaux.ZAux_Direct_GetMpos(G_CardHandle,?2,?ref?fPdAxisPos); ? ? ? ? ? ?//獲取當前編碼軸位置 ? ? ? ? }?while?(fPdAxisPos < fOffPos + fMakrPos[0]); ? ? ? ? iret = zmcaux.ZAux_Direct_MoveSync(G_CardHandle, imode, iTime[0], fMakrPos[0] + fOffPos,?2,?2, iAxisList, fWaitPos); ? ? ?//同步啟動加速段, ? ? ? ??if?(Sync_Mode ==?0) ? ? ? ? { ? ? ? ? ? ??if?(m_SyncMode ==?1) ? ? ? ? ? ? ? ?//同步軌跡運動 ? ? ? ? ? ? { ? ? ? ? ? ? ? ? SubVirAxisMove(); ? ? ? ? ? ? ??//調(diào)用虛擬軸軌跡 ? ? ? ? ? ? ? ? iret = zmcaux.ZAux_Direct_MoveTable(G_CardHandle, (uint)iAxisList[0],?0, (float)1); ? ? ?//寫TABLE數(shù)據(jù)到實際軸緩沖區(qū),速度同步后修改TABLE觸發(fā)虛擬軸 ? ? ? ? ? ? ? ??if?(iret !=?0) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? MessageBox.Show("ZAux_Direct_MoveTable失敗 錯誤碼:"?+ iret.ToString()); ? ? ? ? ? ? ? ? ? ??continue; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? iret = zmcaux.ZAux_Direct_MoveSync(G_CardHandle, imode, iTime[1], fMakrPos[0] + fOffPos,?2,?2, iAxisList, fWaitPos); ? ? ?//同步啟動勻速速段,勻速時間 ? ? ? ? ? ? ? ??//同步結(jié)束 ? ? ? ? ? ? ? ? iret = zmcaux.ZAux_Direct_MoveTable(G_CardHandle, (uint)iAxisList[0],?0, (float)0); ? ? ?//寫TABLE數(shù)據(jù)到實際軸緩沖區(qū),速度同步后修改TABLE觸發(fā)虛擬軸 ? ? ? ? ? ? ? ??//iret = zmcaux.ZAux_Direct_MoveCancel(G_CardHandle, iAxisList[0], 4, 2); ? ? ? ? ? ? ? ? //運動完成強制停止未完成的虛擬軸運動 ? ? ? ? ? ? } ? ? ? ? ? ??else ? ? ? ? ? ? { ? ? ? ? ? ? ? ? iret = zmcaux.ZAux_Direct_MoveSync(G_CardHandle, imode, iTime[1], fMakrPos[0] + fOffPos,?2,?2, iAxisList, fWaitPos); ? ? ?//同步啟動勻速速段,勻速時間 ? ? ? ? ? ? } ? ? ? ? } ? ? ? ??else?if(Sync_Mode ==?1) ? ? ? ? { ? ? ? ? ? ??if?(m_SyncMode ==?1) ? ? ? ? ? ? ? ?//同步軌跡運動 ? ? ? ? ? ? { ? ? ? ? ? ? ? ? iret = Motion_MoveAddax(G_CardHandle, iAxisList[0], iAxisList,?2, ratio, scraxis);?//建立疊加關(guān)系 ? ? ? ? ? ? ? ? SubVirAxisMove_Dirct(); ? ? ? ? ? ? ??//直接控制實際軸走軌跡 ? ? ? ? ? ? ? ??//同步結(jié)束 ? ? ? ? ? ? ? ? iret = zmcaux.ZAux_Direct_MoveTable(G_CardHandle, (uint)iAxisList[0],?0, (float)0); ? ? ?//寫TABLE數(shù)據(jù)到實際軸緩沖區(qū),速度同步后修改TABLE觸發(fā)虛擬軸 ? ? ? ? ? ? ? ? iret = Motion_MoveAddax(G_CardHandle, iAxisList[0], iAxisList,?0, ratio, scraxis); ? ? ? ? ? ? } ? ? ? ? ? ??else ? ? ? ? ? ? { ? ? ? ? ? ? ? ? iret = Motion_MoveAddax(G_CardHandle, iAxisList[0], iAxisList,?2, ratio, scraxis);?//建立疊加關(guān)系 ? ? ? ? ? ? ? ? iret = zmcaux.ZAux_Direct_MoveDelay(G_CardHandle, iAxisList[0], iTime[1]); ? ?//運行延時時間 ? ? ? ? ? ? ? ? iret = Motion_MoveAddax(G_CardHandle, iAxisList[0], iAxisList,?0, ratio, scraxis); ??//取消疊加 ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? iret = zmcaux.ZAux_Direct_MoveSync(G_CardHandle, imode, iTime[2],?0,?-1,?2, iAxisList, fWaitPos); ? ? ?//結(jié)束同步走到待機位置 ? ? ? ??int?Axisidle =?0; ? ? ? ??//此處判斷并實現(xiàn)是否每次都強制回待機位之后再執(zhí)行下一次跟隨動作,由于MOVESYNC在-1模式下的特殊性,會被緊接的MOVESYNC取代,不需要其他邏輯,即可以實現(xiàn)連續(xù)跟隨 ? ? ? ??if?(Force_Back_Flag ==?1) ? ? ? ? { ? ? ? ? ? ??do ? ? ? ? ? ? { ? ? ? ? ? ? ? ? iret = zmcaux.ZAux_Direct_GetIfIdle(G_CardHandle, iAxisList[0],?ref?Axisidle); ? ? ? ? ? ?//等待主軸跟隨完畢 ??? ? ? ? ?}?while?(Axisidle ==?0); ? ? ? ? } ? ? ? ? iWorkCount++; ? ? } }
1.在電腦里新建一個文件夾用來保存即將要建立的工程。打開RTSys編程軟件。
2.新建項目:菜單欄“文件”→“新建工程”。
3.點擊“新建工程”后彈出“另存為”界面,選擇一個文件夾打開,輸入文件名后保存項目,后綴為“.zpj”。
4.新建文件:點擊菜單欄“文件”→“新建”,新建彈出窗口支持Basic/Plc/Hmi混合編程,這里選擇新建的文件類型為Basic后確認。
5.設(shè)置文件自動運行:如下圖,雙擊文件右邊自動運行的位置,輸入任務(wù)號“0”。
Basic跟隨主體代碼:
globalsub reg_Task() '//鎖存線程 REG_INPUTS(belt) = $0000 '//指定皮帶軸的鎖存輸入口,這里R3 R2 R1 R0都用0號輸入口的信號 Reg_Count =0'// 清零鎖存計數(shù)循環(huán)量 WHILE 1 REGIST(4)axis(belt) '//開啟軸鎖存 wait until(MARK(belt)) '//等待軸鎖存觸發(fā) Reg_Array(Reg_Count) = REG_POS(belt) '//將鎖存到的軸位置存放到鎖存數(shù)組中 reg_Flag(Reg_Count) =1 '//標記觸發(fā) if(Reg_Count >= Reg_Space - 1) then '//判斷鎖存緩存數(shù)組是否滿,滿了重新開始計數(shù) Reg_Count =0 else Reg_Count = Reg_Count +1 endif Reg_Count_All = Reg_Count_All +1 WEND endsub globalsub movesync_Task(Mode) '//mode 0- 三段式跟隨 1- 直接跟隨 Sync_Count = 0 '// 清零 跟隨標志 Over_Max_Count =0 Sync_Count_All =0 base(X_sync,Y_sync,Z_sync) moveabs(X_Wait,Y_Wait,Z_Wait) '//移動到待機位 WHILE 1 if(reg_Flag(Sync_Count) = 1) then reg_Flag(Sync_Count) = -1 '//復位標志 wait until(MPOS(belt) >Reg_Array(Sync_Count) + Diff_Pos) '//等待滿足觸發(fā)跟隨距離 if(MPOS(belt) <= Reg_Array(Sync_Count) + Max_Diff) then ? '//滿足跟隨觸發(fā)的最大距離,也就是在跟隨觸發(fā)的最小距離和最大距離之間 ? ? ? ? ? ??if(Mode =?0) then ?? ? ? ? ? ? ? ?base(X_sync,Y_sync,Z_sync) ? ? ? ? ? ? ? ??MOVESYNC(0,catch_time,Reg_Array(Sync_Count),belt,X_POS,Y_POS,Z_POS)axis(X_sync) ??'// 同步追趕段 ?由于MOVESYNC指令會根據(jù)跟隨軸位置控制跟隨從軸,此處填入鎖存時刻的位置即可 ? ? ? ? ? ? ? ? MOVE_TASK(10,rectangel)AXIS(X_sync) ?'//開啟異步線程10,執(zhí)行加工動作 ? ? ? ? ? ? ? ??MOVESYNC(0,work_time,Reg_Array(Sync_Count),belt,X_POS,Y_POS,Z_POS)axis(X_sync) ??'//保持跟隨狀態(tài) ? ? ? ? ? ? ? ? wait until(PROC_STATUS(10) = 1)? ? ? ? ? ? ? ? wait until(PROC_STATUS(10) = 0) ? ? ? ? ? ? ? ? MOVESYNC(-1,back_time,Reg_Array(Sync_Count),-1, X_Wait,Y_Wait,Z_Wait)AXIS(X_sync) ? ? ? ? ? ? ? ? Sync_Count_All = Sync_Count_All + 1 ? ? ? ? ? ? elseif(mode = 1) then ?? ? ? ? ? ? ? ?base(X_sync,Y_sync,Z_sync) ? ? ? ? ? ? ? ? MOVESYNC(0,catch_time,Reg_Array(Sync_Count),belt,X_POS,Y_POS,Z_POS)axis(X_sync) ? '// 同步追趕段 ?由于MOVESYNC指令會根據(jù)跟隨軸位置控制跟隨從軸,此處填入鎖存時刻的位置即可 ? ? ? ? ? ? ? ??MOVE_ADDAX(belt,?1,?UNITS(belt) /?UNITS(X_sync))axis(X_sync) ??'//使用move_addax替代MOVESYNC,使得跟隨動作保持,將皮帶軸的運動疊加到跟隨軸上 ? ? ? ? ? ? ? ? rectangel2 ? '//加工 ? ? ? ? ? ? ? ??MOVESYNC(-1,back_time,Reg_Array(Sync_Count),-1, X_Wait,Y_Wait,Z_Wait)AXIS(X_sync) ? ? ? ? ? ? ? ? Sync_Count_All = Sync_Count_All +?1 ? ? ? ? ? ??endif ?? ? ? ??else ? ? ? ? ? ? ?"位置超出最大觸發(fā)距離"? ? ??'//此處簡單做打印輸出提示,可以根據(jù)自己需求擴展 ? ? ? ? ? ? Over_Max_Count = Over_Max_Count + 1 ? ? ? ? endif ?? ? ? ? if(Sync_Count >= Reg_Space - 1) then '//判斷跟隨觸發(fā)是否讀取完了全部數(shù)據(jù),滿了重新開始計數(shù) Sync_Count =0 else Sync_Count = Sync_Count +1 endif endif wend endsub
六.效果演示
下面以C#代碼跑測試和RTSys示波器抓取波形分析。
C#同步跟隨界面圖
單次觸發(fā)和連續(xù)多次觸發(fā)圖
單次觸發(fā)與連續(xù)多次觸發(fā)速度分析圖
視頻講解可點擊→“PCIe EtherCAT實時運動控制卡PCIE464同步跟隨皮帶跟隨加工應(yīng)用”查看。
完整代碼獲取地址
▼
本次,正運動技術(shù)PCIe EtherCAT實時運動控制卡PCIE464同步跟隨/皮帶跟隨加工應(yīng)用,就分享到這里。
更多精彩內(nèi)容請關(guān)注“正運動小助手”公眾號,需要相關(guān)開發(fā)環(huán)境與例程代碼,請咨詢正運動技術(shù)銷售工程師:400-089-8936。
本文由正運動技術(shù)原創(chuàng),歡迎大家轉(zhuǎn)載,共同學習,一起提高中國智能制造水平。文章版權(quán)歸正運動技術(shù)所有,如有轉(zhuǎn)載請注明文章來源。
審核編輯 黃宇
-
運動控制
+關(guān)注
關(guān)注
4文章
721瀏覽量
33562 -
ethercat
+關(guān)注
關(guān)注
19文章
1124瀏覽量
40042
發(fā)布評論請先 登錄

全球首創(chuàng)!PCIe 6路高性能EtherCAT運動控制卡XPCIE6032H #正運動技術(shù) #運動控制卡
圖像信號分析處理卡設(shè)計原理圖:536-基于FMC接口的XCZU7EV 通用PCIe卡 視覺處理卡 工業(yè)控制卡


PCIe EtherCAT實時運動控制卡PCIE464點膠工藝中的同步/提前/延時開關(guān)膠 #正運動技術(shù)

PCIe EtherCAT實時運動控制卡PCIE464的CAD導圖與刀向跟隨應(yīng)用#正運動技術(shù) #運動控制卡

運動控制看的更清楚細致!RTSys示波器功能簡介 #正運動技術(shù) #運動控制器 #運動控制系統(tǒng) #運動控制卡
pcie接口反射內(nèi)存卡

評論