技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動(dòng)網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > C#之Delta并聯(lián)機(jī)械手的視覺同步分揀

C#之Delta并聯(lián)機(jī)械手的視覺同步分揀

時(shí)間:2024-07-05 10:44:46來源:深圳市正運(yùn)動(dòng)技術(shù)有限公司

導(dǎo)語:?前面兩節(jié)課程我們介紹了怎么建立Delta并聯(lián)機(jī)械手的正逆解以及如何通過視覺進(jìn)行匹配定位。本節(jié)課程給大家分享如何通過C#語言開發(fā)正運(yùn)動(dòng)Delta并聯(lián)機(jī)械手傳送帶同步的視覺分揀。

  前面兩節(jié)課程我們介紹了怎么建立Delta并聯(lián)機(jī)械手的正逆解以及如何通過視覺進(jìn)行匹配定位。本節(jié)課程給大家分享如何通過C#語言開發(fā)正運(yùn)動(dòng)Delta并聯(lián)機(jī)械手傳送帶同步的視覺分揀。

  VPLC711硬件介紹

  VPLC711是正運(yùn)動(dòng)推出的一款基于x86平臺(tái)和Windows操作系統(tǒng)的高性能機(jī)器視覺EtherCAT運(yùn)動(dòng)控制器,具備強(qiáng)大的運(yùn)算能力和靈活性。它具有出色的實(shí)時(shí)性能和多路高速硬件輸入與多路高速PSO輸出,能夠精準(zhǔn)控制多軸同步運(yùn)動(dòng),并與外部設(shè)備實(shí)現(xiàn)多協(xié)議的高速通信。

正運(yùn)動(dòng)

  VPLC711支持多種硬件接口和通信協(xié)議,方便與其他設(shè)備的連接和集成。除此之外,VPLC711還具備視覺處理功能,能夠?qū)崟r(shí)處理圖像數(shù)據(jù),實(shí)現(xiàn)視覺檢測(cè)、測(cè)量和定位等應(yīng)用。

正運(yùn)動(dòng)

  VPLC711內(nèi)置Windows運(yùn)動(dòng)控制實(shí)時(shí)內(nèi)核MotionRT7,形成一種開放式IPC形態(tài)實(shí)時(shí)軟控制器/軟PLC,為用戶提供靈活集成的運(yùn)動(dòng)控制+視覺一體化解決方案。

正運(yùn)動(dòng)

  VPLC711硬件參數(shù)

  1.采用x86高性能CPU,EtherCAT可支持1ms 64軸同步運(yùn)行;

  2.板載RS232,RS485,EtherNet*5,EtherCAT,USB3.0*4硬件接口;

       3.板載20DI,其中4個(gè)高速色標(biāo)鎖存,2組高速單端編碼器;

       4.板載20DO,其中4個(gè)高速單端脈沖軸,4組高速PWM;

  5.支持DVI-D,HDMI顯示,支持雙網(wǎng)口不同IP設(shè)置。

  

  C#語言進(jìn)行Delta并聯(lián)機(jī)械手的開發(fā)之運(yùn)動(dòng)庫和視覺庫的添加

  1.在VS2010菜單“文件”→“新建”→“項(xiàng)目”,啟動(dòng)創(chuàng)建項(xiàng)目向?qū)А?/p>

正運(yùn)動(dòng)

  2.選擇開發(fā)語言為“Visual C#”和.NET Framework 4以及Windows窗體應(yīng)用程序。

正運(yùn)動(dòng)

  3.找到廠家提供的光盤資料里面的C#函數(shù)庫,路徑如下(32位庫為例)。

  1)進(jìn)入廠商提供的光盤資料找到“04PC函數(shù)”文件夾,并點(diǎn)擊進(jìn)入。

正運(yùn)動(dòng)

  2)選擇“函數(shù)庫2.1”文件夾。

正運(yùn)動(dòng)

  3)選擇“Windows平臺(tái)”文件夾。

正運(yùn)動(dòng)

  4)根據(jù)需要選擇對(duì)應(yīng)的函數(shù)庫,這里選擇32位庫。

正運(yùn)動(dòng)

  5)解壓C#壓縮包,里面有C#對(duì)應(yīng)的函數(shù)庫。

正運(yùn)動(dòng)

  6)函數(shù)庫具體路徑如下。

正運(yùn)動(dòng)

  4.將廠商提供的C#庫文件以及相關(guān)文件復(fù)制到新建的項(xiàng)目中(注意這里面的PC函數(shù)庫默認(rèn)提供的是運(yùn)動(dòng)庫,如果使用視覺功能還需要獲取視覺庫,視覺庫可以找廠商的相關(guān)銷售或技術(shù)人員獲取)。

       1)將Zmcaux.cs(運(yùn)動(dòng)庫)和Zvision.cs(視覺庫)文件復(fù)制到新建的項(xiàng)目里面中。

正運(yùn)動(dòng)

  2)將zauxdll.dll、zmotion.dll和zvision.dll文件放入bin\debug文件夾中。

正運(yùn)動(dòng)

  5.用vs打開新建的項(xiàng)目文件,在右邊的解決方案資源管理器中點(diǎn)擊顯示所有文件,然后鼠標(biāo)右擊Zmcaux.cs與 Zvision.cs文件,點(diǎn)擊包括在項(xiàng)目中。

正運(yùn)動(dòng)

  6.雙擊Form1.cs里面的Form1,出現(xiàn)代碼編輯界面,在文件開頭寫入using cszmcaux,using ZVision并聲明控制器句柄g_handle。

正運(yùn)動(dòng)

  PC函數(shù)介紹

  1. 鏈接控制器,獲取鏈接句柄。

正運(yùn)動(dòng)

  2. 皮帶同步指令。

正運(yùn)動(dòng)

正運(yùn)動(dòng)

  Basic腳本快速驗(yàn)證指令用法

  1.編寫B(tài)asic測(cè)試腳本進(jìn)行MoveSync指令的用法測(cè)試。

  ·

  '**************************************************************************************'背景:假設(shè)有一對(duì)對(duì)射型的光電傳感器固定在流水線的兩端,來實(shí)時(shí)檢測(cè)流水線上的產(chǎn)品到位情況'MOVESYNC指令參數(shù)填寫說明:'syncposition:物體到感應(yīng)點(diǎn)時(shí)皮帶軸的位置,需要通過編碼器鎖存把產(chǎn)品的對(duì)應(yīng)位置記錄下來。'pos1:跟隨軸1原點(diǎn)到光電傳感器感應(yīng)點(diǎn)的位置,對(duì)于每個(gè)產(chǎn)品都是固定的。'**************************************************************************************GLOBAL CONST BeltAxis=4 '皮帶軸是軸4GLOBAL CONST FollowAxis1=0 '跟隨軸1是軸0GLOBAL CONST InducPos1=30 '跟隨軸1原點(diǎn)到光電傳感器感應(yīng)點(diǎn)的位置GLOBAL CONST StandbyPos1=50'跟隨軸1的待機(jī)位GLOBAL CONST EmptyPos1=400 '跟隨軸1的放料位'停止所有軸RAPIDSTOP(2)WAIT IDLE '初始化相關(guān)軸的軸參數(shù)BASE(FollowAxis1, BeltAxis)ATYPE = 1,1UNITS = 1000,1000SPEED = 50,100DPOS = 0,0'觸發(fā)示波器采集波形TRIGGERDELAY(1000)'跟隨軸先運(yùn)動(dòng)到待機(jī)位BASE(FollowAxis1)MOVEABS(StandbyPos1)'皮帶軸開始運(yùn)動(dòng)VMOVE(1) AXIS(BeltAxis)'假設(shè)皮帶運(yùn)動(dòng)到200的位置時(shí),有一個(gè)產(chǎn)品被檢測(cè)到BASE(FollowAxis1)Wait UNTIL MPOS(BeltAxis)> 200MOVESYNC(0, 2000, 200, BeltAxis, InducPos1) '跟隨軸加速同步段該指令執(zhí)行完后將同步上產(chǎn)品MOVE_OP(0, ON) '同步上后打開真空吸 MOVESYNC(0, 1000, 200, BeltAxis, InducPos1) '繼續(xù)同步1sMOVESYNC(-1, 0, 0, -1, EmptyPos1) '走到放料位置MOVE_OP(0, OFF) '到放料位后關(guān)閉真空吸

  2.通過RTSys軟件的示波器觀察波形,分析同步過程。

正運(yùn)動(dòng)

正運(yùn)動(dòng)

  根據(jù)示波器的數(shù)據(jù)分析

  1、產(chǎn)品剛剛被檢測(cè)到時(shí),皮帶的位置是200,跟隨軸的位置是50。

  2、跟隨軸追上產(chǎn)品,并保持速度和皮帶軸同步時(shí)皮帶的位置是400,跟隨軸1的位置是230。

  3、由1和2可知,產(chǎn)品在同步過程中前進(jìn)了200(400-200)。

  4、因?yàn)楦S軸1原點(diǎn)到光電傳感器感應(yīng)點(diǎn)的位置InducPos1我們給的數(shù)據(jù)是30,所以在跟隨軸1和皮帶平行的情況下,皮帶帶著產(chǎn)品往前跑了200后,此時(shí)此刻跟隨軸1原點(diǎn)到光產(chǎn)品的實(shí)際距離是230(200+30)。

  5、那么第4點(diǎn)計(jì)算的結(jié)果和第2的同步完成后跟隨軸1的實(shí)際位置是一致的,所以流水線同步指令測(cè)試正常。

  C#例程建設(shè)之視覺流水線同步分揀

  1.皮帶同步指令關(guān)鍵參數(shù)詳細(xì)介紹。ZAux_Direct_MoveSync(ZMC_HANDLE handle,float imode,int synctime,float syncposition,int syncaxis,int imaxaxises,int *piAxislist,float *pfDisancelist).(1)參數(shù)imode:imode = 0+angle,表示同步模式,如果皮帶和X軸平行,填0即可。

  imode = -1,表示結(jié)束同步模式,可運(yùn)動(dòng)到指定的絕對(duì)位置,一般同步上抓取完物料后運(yùn)動(dòng)到放料位使用。

  (2)參數(shù)synctime: 同步時(shí)間,ms單位.運(yùn)動(dòng)在指定時(shí)間內(nèi)完成,完成時(shí)軸跟皮帶軸上物體保持速度一致。0表示根據(jù)運(yùn)動(dòng)軸的速度加速度來估計(jì)同步時(shí)間。

  (3)參數(shù)syncposition: 視覺或傳感器識(shí)別到皮帶是的產(chǎn)品時(shí),皮帶此時(shí)此刻的位置信息MPOS。

  (4)參數(shù)pfDisancelist:如果是視覺定位產(chǎn)品時(shí),這個(gè)參數(shù)直接填視覺識(shí)別到產(chǎn)品時(shí)產(chǎn)品的世界坐標(biāo)。

  如果用光電傳感器檢測(cè)產(chǎn)品時(shí),這個(gè)參數(shù)是固定的,在傳感器剛剛好感應(yīng)到產(chǎn)品時(shí),產(chǎn)品當(dāng)前位置的絕對(duì)坐標(biāo)??梢栽诖藭r(shí)此刻手動(dòng)運(yùn)動(dòng)從軸來定位到產(chǎn)品處來獲取位置信息。

  2.視覺流水線同步分揀流程圖。

正運(yùn)動(dòng)

  (1)視覺匹配定位代碼詳情。

  ·

  /************************************************************************************'任務(wù)編號(hào): 無'函數(shù)功能: 視覺定位產(chǎn)品'Input: 無'Output: 無 '返回值: 子線程---進(jìn)行視覺定位 **************************************************************************************/public void RunSubTaskVisua(){ int TempArrid = 0; float TempVar = 0; WriteLog("視覺功能正常啟動(dòng)"); while (SysRunFlag > 0) { //暫停按鈕沒有按下時(shí) while (SysRunFlag == 1) { //采集圖像 VisuaOper.CameAcquisition(); //進(jìn)行模板匹配 RTDisplay.Image = VisuaOper.ShapeFind(); if (MainWindows.BeltMpos != 0)//如果采集照片的時(shí)候皮帶編碼器位置獲取正常 { //操作MoveSyncBuff數(shù)據(jù)先加鎖 while (true) { if (MainWindows.SetMoveSyncFlag == 0) { MainWindows.SetMoveSyncFlag = 1; break; } } //找到可以存儲(chǔ)數(shù)據(jù)的數(shù)組起始下標(biāo) int ArrId = 0; for (int i = 0; i < 50; i++) { if (MainWindows.MoveSyncBuff[i, 0] == 0) { ArrId = i; break; } } //開始存儲(chǔ)數(shù)據(jù) 一次匹配最多10個(gè)結(jié)果 TempArrid = ArrId; for (int i = 0; i < 10; i++) { //如果分?jǐn)?shù)滿足要求 if (MainWindows.VisionRst[i, 0] >= MainWindows.VisionScore) { int j; //如果有重復(fù)的目標(biāo)需要剔除 for (j = 0; j < TempArrid; j++) { TempVar = MainWindows.VisionRst[i, 1] - MainWindows.BeltMpos - MainWindows.MoveSyncBuff[j, 1] + MainWindows.MoveSyncBuff[j, 4]; if (((TempVar) <= 10) && (TempVar >= -10)) { j = -10; break; } } if (j >= 0) { MainWindows.MoveSyncBuff[ArrId, 0] = 1; MainWindows.MoveSyncBuff[ArrId, 1] = MainWindows.VisionRst[i, 1]; //存儲(chǔ)匹配結(jié)果的X坐標(biāo) MainWindows.MoveSyncBuff[ArrId, 2] = MainWindows.VisionRst[i, 2]; //存儲(chǔ)匹配結(jié)果的Y坐標(biāo) MainWindows.MoveSyncBuff[ArrId, 3] = MainWindows.VisionRst[i, 3]; //存儲(chǔ)匹配結(jié)果的角度偏移 MainWindows.MoveSyncBuff[ArrId, 4] = MainWindows.BeltMpos; //存儲(chǔ)匹配到產(chǎn)品時(shí),傳送帶的位置信息 ArrId = ArrId + 1; IdentiNum.Text = (Convert.ToInt32(IdentiNum.Text) + 1).ToString(); WriteLog("視覺目標(biāo):" + "(" + MainWindows.VisionRst[i, 1].ToString("0,0") + "," + MainWindows.VisionRst[i, 2].ToString("0,0") + ")"); } } //分?jǐn)?shù)清空 MainWindows.VisionRst[i, 0] = 0; } //解鎖 MainWindows.SetMoveSyncFlag = 0; } } Thread.Sleep(100); }}

  (2)流水線同步分揀代碼詳情。

  ·

  /************************************************************************************'任務(wù)編號(hào): 無'函數(shù)功能: 流水線同步分揀'Input: 無'Output: 無 '返回值: 無 **************************************************************************************/public void RunSubTaskMotion(){ float[] MoveSyncTemp = new float[5]; float TempMpos = 0; while (SysRunFlag > 0) { while (SysRunFlag == 1) { if (MainWindows.MoveSyncBuff[0, 0] == 1) { MainWindows.ZauxErr = zmcaux.ZAux_Direct_GetMpos(MainWindows.g_Handle, MainWindows.ConveyorAxisId, ref TempMpos); //如果編碼器位置抓取正確 if (0 == MainWindows.ZauxErr) { //編碼器往前運(yùn)動(dòng)了多少 TempMpos = TempMpos - MainWindows.MoveSyncBuff[0, 4];

  //判斷是否處于同步起始區(qū) if (((MainWindows.MoveSyncBuff[0, 1] + TempMpos) >= MainWindows.SyncReX[0]) && ((MainWindows.MoveSyncBuff[0, 1] + TempMpos) <= MainWindows.SyncReX[1])) { WriteLog("開始同步抓取"); //取一組數(shù)據(jù) MoveSyncTemp[0] = MainWindows.MoveSyncBuff[0, 1] ; //X MoveSyncTemp[1] = MainWindows.MoveSyncBuff[0, 2] ; //Y MoveSyncTemp[2] = MainWindows.GetBinHigt; //取料高度 MoveSyncTemp[3] = MainWindows.MoveSyncBuff[0, 3]; //Aanle MoveSyncTemp[4] = MainWindows.MoveSyncBuff[0, 4]; //Mpos //下發(fā)同步運(yùn)動(dòng)的指令 //0、復(fù)位輸出口 zmcaux.ZAux_Direct_MoveOp(MainWindows.g_Handle, MainWindows.gVAxisList[0], MainWindows.VacSucIo, 0); //1、先同步上傳送帶 zmcaux.ZAux_Direct_MoveSync(MainWindows.g_Handle, 0, 0, MainWindows.MoveSyncBuff[0, 4], MainWindows.ConveyorAxisId, 4, MainWindows.gVAxisList, MoveSyncTemp); //2、同步一段時(shí)間(關(guān)節(jié)軸有滯后) 50ms zmcaux.ZAux_Direct_MoveSync(MainWindows.g_Handle, 0, 50, MainWindows.MoveSyncBuff[0, 4], MainWindows.ConveyorAxisId, 4, MainWindows.gVAxisList, MoveSyncTemp); //3、打開真空吸嘴 zmcaux.ZAux_Direct_MoveOp(MainWindows.g_Handle, MainWindows.gVAxisList[0], MainWindows.VacSucIo, 1); //4、同步一段時(shí)間 1500ms zmcaux.ZAux_Direct_MoveSync(MainWindows.g_Handle, 0, 700, MainWindows.MoveSyncBuff[0, 4], MainWindows.ConveyorAxisId, 4, MainWindows.gVAxisList, MoveSyncTemp); //5、同步段把Z軸提升到安全高度,選擇軸到放料角度 MoveSyncTemp[2] = MainWindows.StandPos[2]; //取料高度 zmcaux.ZAux_Direct_MoveSync(MainWindows.g_Handle, 0, 100, MainWindows.MoveSyncBuff[0, 4], MainWindows.ConveyorAxisId, 4, MainWindows.gVAxisList, MoveSyncTemp); //4、解除同步去放料點(diǎn) MoveSyncTemp[0] = MainWindows.EmptPos[0]; //X MoveSyncTemp[1] = MainWindows.EmptPos[1]; //Y MoveSyncTemp[2] = MainWindows.EmptPos[2]; //放料高度 MoveSyncTemp[3] = MainWindows.EmptPos[3]; //Aanle zmcaux.ZAux_Direct_MoveSync(MainWindows.g_Handle, -1, 0, 0, -1, 4, MainWindows.gVAxisList, MoveSyncTemp); //5、關(guān)閉真空吸嘴放料,Delay100ms zmcaux.ZAux_Direct_MoveOp(MainWindows.g_Handle, MainWindows.gVAxisList[0], MainWindows.VacSucIo, 0); zmcaux.ZAux_Direct_MoveDelay(MainWindows.g_Handle, MainWindows.gVAxisList[0], 100); //6、去安全高度 MoveSyncTemp[0] = MainWindows.EmptPos[0]; //X MoveSyncTemp[1] = MainWindows.EmptPos[1]; //Y MoveSyncTemp[2] = MainWindows.StandPos[2]; //放料高度 MoveSyncTemp[3] = MainWindows.EmptPos[3]; //Aanle zmcaux.ZAux_Direct_MoveAbs(MainWindows.g_Handle, 4, MainWindows.gVAxisList, MoveSyncTemp);

  //操作MoveSyncBuff數(shù)據(jù)先加鎖 while (true) { if (MainWindows.SetMoveSyncFlag == 0) { MainWindows.SetMoveSyncFlag = 1; break; } } //視覺匹配緩沖區(qū)數(shù)據(jù)往前覆蓋 for (int k = 0; k < 49; k++) { MainWindows.MoveSyncBuff[k, 0] = MainWindows.MoveSyncBuff[k + 1, 0]; MainWindows.MoveSyncBuff[k, 1] = MainWindows.MoveSyncBuff[k + 1, 1]; MainWindows.MoveSyncBuff[k, 2] = MainWindows.MoveSyncBuff[k + 1, 2]; MainWindows.MoveSyncBuff[k, 3] = MainWindows.MoveSyncBuff[k + 1, 3]; MainWindows.MoveSyncBuff[k, 4] = MainWindows.MoveSyncBuff[k + 1, 4]; } //解鎖 MainWindows.SetMoveSyncFlag = 0; //等待輸出口打開 int TimeOut = 10000; TimeOut = 100000; //等待軸停止 int AxisIdle = 0; //軸停止?fàn)顟B(tài) while (TimeOut > 0) { zmcaux.ZAux_Direct_GetIfIdle(MainWindows.g_Handle, MainWindows.gVAxisList[0], ref AxisIdle); if (AxisIdle == (-1)) { break; } Thread.Sleep(10); TimeOut = TimeOut - 10; } if (TimeOut <= 0) { //超時(shí)要報(bào)錯(cuò),程序要停止 WriteLog("等待軸停止超時(shí)"); //Thread.Sleep(100); SysRunFlag = 0; break; } SortNum.Text = (Convert.ToInt32(SortNum.Text) + 1).ToString(); WriteLog("放料成功"); //退出while 單次循環(huán) continue; } else if ((MainWindows.MoveSyncBuff[0, 1] + TempMpos) > MainWindows.SyncReX[1]) { //操作MoveSyncBuff數(shù)據(jù)先加鎖 while (true) { if (MainWindows.SetMoveSyncFlag == 0) { MainWindows.SetMoveSyncFlag = 1; break; } } //視覺匹配緩沖區(qū)數(shù)據(jù)往前覆蓋 for (int k = 0; k < 49; k++) { MainWindows.MoveSyncBuff[k, 0] = MainWindows.MoveSyncBuff[k + 1, 0]; MainWindows.MoveSyncBuff[k, 1] = MainWindows.MoveSyncBuff[k + 1, 1]; MainWindows.MoveSyncBuff[k, 2] = MainWindows.MoveSyncBuff[k + 1, 2]; MainWindows.MoveSyncBuff[k, 3] = MainWindows.MoveSyncBuff[k + 1, 3]; MainWindows.MoveSyncBuff[k, 4] = MainWindows.MoveSyncBuff[k + 1, 4]; } //解鎖 MainWindows.SetMoveSyncFlag = 0; //如果視覺匹配緩沖區(qū)沒有數(shù)據(jù)了 if (MainWindows.MoveSyncBuff[0, 0] == 0) { //Delta去待機(jī)位 zmcaux.ZAux_Direct_MoveAbs(MainWindows.g_Handle, 4, MainWindows.gVAxisList, MainWindows.StandPos); WriteLog("去待機(jī)位"); } } } } else { //Delta去待機(jī)位 zmcaux.ZAux_Direct_MoveAbs(MainWindows.g_Handle, 4, MainWindows.gVAxisList, MainWindows.StandPos); } Thread.Sleep(50); } //停止傳送帶 zmcaux.ZAux_Direct_Single_Cancel(MainWindows.g_Handle, MainWindows.ConveyorAxisId, 2); }}

  演示視頻

  本次,正運(yùn)動(dòng)技術(shù)C#之Delta并聯(lián)機(jī)械手的視覺同步分揀,就分享到這里。

  更多精彩內(nèi)容請(qǐng)關(guān)注“正運(yùn)動(dòng)小助手”公眾號(hào),需要相關(guān)開發(fā)環(huán)境與例程代碼,請(qǐng)咨詢正運(yùn)動(dòng)技術(shù)銷售工程師:400-089-8936。

  本文由正運(yùn)動(dòng)技術(shù)原創(chuàng),歡迎大家轉(zhuǎn)載,共同學(xué)習(xí),一起提高中國智能制造水平。文章版權(quán)歸正運(yùn)動(dòng)技術(shù)所有,如有轉(zhuǎn)載請(qǐng)注明文章來源。

標(biāo)簽: 正運(yùn)動(dòng)

點(diǎn)贊

分享到:

上一篇:方案分享 - 保壓機(jī)

下一篇:三菱伺服用什么總線控制

中國傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:中國傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動(dòng)網(wǎng)(www.treenowplaneincome.com)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來源“中國傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

網(wǎng)站簡介|會(huì)員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

中國傳動(dòng)網(wǎng)-工業(yè)自動(dòng)化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺(tái)

網(wǎng)站客服服務(wù)咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 版權(quán)所有 粵ICP備 14004826號(hào) | 營業(yè)執(zhí)照證書 | 不良信息舉報(bào)中心 | 粵公網(wǎng)安備 44030402000946號(hào)