時(shÃ)間:2021-11-11 16:05:56來(lái)æºï¼šæ·±åœ³å¸‚æ£é‹(yùn)å‹•(dòng)技術(shù)有é™å…¬å¸
  今天,æ£é‹(yùn)å‹•(dòng)å°åŠ©æ‰‹çµ¦å¤§å®¶åˆ†äº«ä¸€ä¸‹é‹(yùn)å‹•(dòng)控制å¡ä¹‹ECI3808如何在大é‡å°ç·šæ®µæ•¸(shù)據(jù)的情æ³ä¸‹ä¸€æ¬¡æ€§åŠ è¼‰å¤šæ¢é€£çºŒ(xù)å°ç·šæ®µæ•¸(shù)據(jù)。
  一ECI3808硬件介紹
  1.功能介紹
  ECI3808ç³»åˆ—æŽ§åˆ¶å¡æ”¯æŒæœ€å¤šé”(dá)12軸直線æ’補(bÇ”)ã€ä»»æ„圓弧æ’補(bÇ”)ã€ç©ºé–“圓弧ã€èžºæ—‹æ’補(bÇ”)ã€é›»å凸輪ã€é›»å齒輪ã€åŒæ¥è·Ÿéš¨ã€è™›æ“¬è»¸ã€æ©Ÿ(jÄ«)械手指令ç‰;采用優(yÅu)化的網(wÇŽng)絡(luò)通訊å”(xié)è°å¯ä»¥å¯¦(shÃ)ç¾(xià n)實(shÃ)時(shÃ)çš„é‹(yùn)å‹•(dòng)控制。
  ECI3808系列é‹(yùn)å‹•(dòng)æŽ§åˆ¶å¡æ”¯æŒä»¥å¤ªç¶²(wÇŽng),RS232 通訊接å£å’Œé›»è…¦ç›¸é€£ï¼ŒæŽ¥æ”¶é›»è…¦çš„æŒ‡ä»¤é‹(yùn)行,å¯ä»¥é€šéŽ(guò)CAN總線去連接å„個(gè)æ“´(kuò)展模塊,從而擴(kuò)展輸入輸出點(diÇŽn)數(shù)或é‹(yùn)å‹•(dòng)軸。
  ECI3808系列é‹(yùn)å‹•(dòng)控制å¡çš„æ‡‰(yÄ«ng)用程åºå¯ä»¥ä½¿ç”¨ VC,VB,VS,C++,C#ç‰è»Ÿä»¶ä¾†(lái)é–‹(kÄi)發(fÄ),程åºé‹(yùn)行時(shÃ)需è¦?jiÇŽng)討B(tà i)庫(kù) zmotion.dll。調(dià o)試時(shÃ)å¯ä»¥æŠŠZDevelopè»Ÿä»¶åŒæ™‚(shÃ)連接到控制器,從而方便調(dià o)試和觀察。
  2.硬件接å£
通用輸入å£é›»è·¯
通用輸出å£é›»è·¯
AD/DA接å£èªª(shuÅ)明
本地脈沖軸說(shuÅ)明
3.控制器基本信æ¯
  二ã€C++進(jìn)行é‹(yùn)å‹•(dòng)控制開(kÄi)發(fÄ)
  1.新建MFCé …(xià ng)ç›®å¹¶æ·»åŠ å‡½æ•¸(shù)庫(kù)
  (1)在VS2015èœå–®â€œæ–‡ä»¶â€â†’“新建â€â†’ â€œé …(xià ng)ç›®â€ï¼Œå•Ÿå‹•(dòng)創(chuà ng)å»ºé …(xià ng)ç›®å‘?qÅ«)Ð?/p>
(2)鏿“‡é–‹(kÄi)發(fÄ)語(yÇ”)言為“Visual C++â€å’Œç¨‹åºé¡žåž‹â€œMFC應(yÄ«ng)用程åºâ€ã€‚
  (3)點(diÇŽn)擊下一æ¥å³å¯ã€‚
  (4)鏿“‡é¡žåž‹ç‚ºâ€œåŸºäºŽå°(duì)話框â€ï¼Œä¸‹ä¸€æ¥æˆ–者完æˆã€‚
(5)æ‰¾åˆ°å» å®¶æä¾›çš„光盤(pán)資料,路徑如下(64ä½åº«(kù)為例)。
  A.進(jìn)å…¥å» å•†æä¾›çš„光盤(pán)資料找到“8.PC函數(shù)â€æ–‡ä»¶å¤¾ï¼Œå¹¶é»ž(diÇŽn)擊進(jìn)入。
  B.鏿“‡â€œå‡½æ•¸(shù)庫(kù)2.1â€æ–‡ä»¶å¤¾ã€‚
  C.鏿“‡â€œWindows平臺(tái)â€æ–‡ä»¶å¤¾ã€‚
  D.æ ¹æ“š(jù)需è¦é¸æ“‡å°(duì)應(yÄ«ng)的函數(shù)庫(kù)é€™é‡Œé¸æ“‡64ä½åº«(kù)。
  E.解壓C++的壓縮包,é‡Œé¢æœ‰C++å°(duì)應(yÄ«ng)的函數(shù)庫(kù)。
  F.函數(shù)庫(kù)具體路徑如下。
  (6)å°‡å» å•†æä¾›çš„C++的庫(kù)文件和相關(guÄn)é æ–‡ä»¶å¾©(fù)åˆ¶åˆ°æ–°å»ºçš„é …(xià ng)目里é¢ã€‚
(7)åœ¨é …(xià ng)ç›®ä¸æ·»åŠ éœæ…‹(tà i)庫(kù)和相關(guÄn)é æ–‡ä»¶ã€‚
  A.å…ˆå³æ“Šé …(xià ng)ç›®æ–‡ä»¶ï¼ŒæŽ¥è‘—ä¾æ¬¡é¸æ“‡:â€œæ·»åŠ â€â†’“ç¾(xià n)æœ‰é …(xià ng)â€ã€‚
  B.在彈出的窗å£ä¸ä¾æ¬¡æ·»åŠ éœæ…‹(tà i)庫(kù)和相關(guÄn)é æ–‡ä»¶ã€‚
  (8)è²æ˜Žç”¨åˆ°çš„é æ–‡ä»¶å’Œå®šç¾©æŽ§åˆ¶å™¨é€£æŽ¥å¥æŸ„。
  至æ¤é …(xià ng)目新建完æˆï¼Œå¯é€²(jìn)行MFCé …(xià ng)目開(kÄi)發(fÄ)。
  2.查看PC函數(shù)手冊(cè),熟悉相關(guÄn)函數(shù)接å£ã€‚
(1)PC函數(shù)手冊(cè)也在光盤(pán)資料里é¢ï¼Œå…·é«”路徑如下:“光盤(pán)資料\8.PC函數(shù)\函數(shù)庫(kù)2.1\ZMotion函數(shù)庫(kù)編程手冊(cè) V2.1.pdfâ€
  (2)éˆæŽ¥æŽ§åˆ¶å™¨ï¼Œç²å–éˆæŽ¥å¥æŸ„。
  ZAux_OpenEth()接å£èªª(shuÅ)明:
  (3)利用直接basic命令發(fÄ)é€å¯¦(shÃ)ç¾(xià n)功能函數(shù)。
  ZAux_DirectCommand函數(shù)直接下發(fÄ)命令執(zhÃ)行basic功能塊,指令é‹(yùn)行速度快,但是需è¦åŠ è¼‰ç·©æ²–çš„æŒ‡ä»¤ä¸èƒ½æˆåŠŸåŸ·(zhÃ)è¡Œï¼Œèƒ½å¤ æˆåŠŸåŸ·(zhÃ)行的下發(fÄ)æŒ‡ä»¤æŽ¨è–¦ä½¿ç”¨ï¼ŒåŠ å¿«æ•ˆçŽ‡ã€‚
  ZAux_Execute函數(shù)直接下發(fÄ)命令執(zhÃ)行basic功能塊,執(zhÃ)行指令速度會(huì)阻塞,執(zhÃ)è¡Œé€Ÿåº¦æ…¢ä¸€äº›ï¼Œæ‰€æœ‰èƒ½å¤ åŸ·(zhÃ)行的å—符串命令都å¯ä»¥æˆåŠŸåŸ·(zhÃ)行。
  3.MFCé–‹(kÄi)發(fÄ)控制器硬件外è¨(shè)讀寫(xiÄ›)例程。
(1)例程界é¢å¦‚下。
  (2)例程界é¢ç”±ä¸‰å€‹(gè)部分組æˆã€‚
  A.一是連接部分,用于連接當(dÄng)å‰çš„æŽ§åˆ¶å™¨ï¼Œç²å–åˆ°æŽ§åˆ¶å™¨çš„å¥æŸ„進(jìn)行之åŽçš„æ“ä½œã€‚
  B.二是狀態(tà i)檢測(cè)部分,å¯ä»¥æŸ¥çœ‹åˆ°ç•¶(dÄng)å‰æŽ§åˆ¶å™¨çš„è»¸åæ¨™(biÄo),軸狀態(tà i),é‹(yùn)å‹•(dòng)狀態(tà i)以åŠç·©æ²–å€(qÅ«)剩余大å°ã€‚
  C.ä¸‰æ˜¯åƒæ•¸(shù)è¨(shè)置部分進(jìn)行è¨(shè)置控制器的é‹(yùn)å‹•(dòng)åƒæ•¸(shù)ï¼ŒåŠ æ¸›é€Ÿä»¥åŠé€Ÿåº¦ç‰ã€‚
  (3)éˆæŽ¥æŒ‰éˆ•çš„äº‹ä»¶è™•ç†å‡½æ•¸(shù)ä¸èª¿(dià o)ç”¨éˆæŽ¥æŽ§åˆ¶å™¨çš„æŽ¥å£å‡½æ•¸(shù)ZAux_OpenEth(),與控制器進(jìn)è¡ŒéˆæŽ¥,éˆæŽ¥æˆåŠŸåŽå•Ÿå‹•(dòng)定時(shÃ)器1監(jiÄn)控控制器狀態(tà i)。
  //ç¶²(wÇŽng)å£éˆæŽ¥æŽ§åˆ¶å™¨void CSingle_move_Dlg::OnOpen(){ char buffer[256]; int32 iresult; //如果已經(jÄ«ng)éˆæŽ¥ï¼Œå‰‡å…ˆæ–·é–‹(kÄi)éˆæŽ¥ if(NULL != g_handle) { ZAux_Close(g_handle); g_handle = NULL; } //從IP下拉框ä¸é¸æ“‡ç²å–IPåœ°å€ GetDlgItemText(IDC_IPLIST,buffer,255); buffer[255] = '\0'; //é–‹(kÄi)å§‹éˆæŽ¥æŽ§åˆ¶å™¨ iresult = ZAux_OpenEth(buffer, &g_handle); if(ERR_SUCCESS != iresult) { g_handle = NULL; MessageBox(_T("éˆæŽ¥å¤±æ•—")); SetWindowText("æœªéˆæŽ¥"); return; } //éˆæŽ¥æˆåŠŸé–‹(kÄi)啟定時(shÃ)器1 SetWindowText("å·²éˆæŽ¥"); SetTimer( 1, 100, NULL ); }
  (4)通éŽ(guò)定時(shÃ)器監(jiÄn)控控制器狀態(tà i),定時(shÃ)器1讀å–å„軸當(dÄng)å‰çš„狀態(tà i),定時(shÃ)器2進(jìn)è¡ŒåŠ è¼‰ç•¶(dÄng)å‰çš„é‹(yùn)å‹•(dòng)數(shù)據(jù)并進(jìn)行å°(duì)應(yÄ«ng)é‹(yùn)å‹•(dòng)ï¼Œæ¯æ¬¡é‹(yùn)å‹•(dòng)åŠ è¼‰1000æ¢å°ç·šæ®µæ•¸(shù)據(jù)。
  void CTest_multiMoveDlg::OnTimer(UINT_PTR nIDEvent){ if(NULL == g_handle) { MessageBox(_T("éˆæŽ¥æ–·é–‹(kÄi)")); return ; } uint32 iret = 0 ; if(1 == nIDEvent) { CString AxisPos; CString AxisStatus; CString AxisIdle; CString AxisBuffer; float showpos[4] ={0}; float showstatus[4] ={0}; float showidle[4] ={0}; int showbuff[4] ={0}; iret = ZAux_Direct_GetAllAxisPara( g_handle,"DPOS",4,showpos); //ç²å–ç•¶(dÄng)å‰è»¸ä½ç½® iret = ZAux_Direct_GetAllAxisPara( g_handle,"AXISSTATUS",4,showstatus); //ç²å–ç•¶(dÄng)å‰è»¸ä½ç½® iret = ZAux_Direct_GetAllAxisPara( g_handle,"IDLE",4,showidle); //ç²å–ç•¶(dÄng)å‰è»¸ä½ç½® iret = ZAux_Direct_GetRemain_LineBuffer(g_handle,0,&showbuff[0]); iret = ZAux_Direct_GetRemain_LineBuffer(g_handle,1,&showbuff[1]); iret = ZAux_Direct_GetRemain_LineBuffer(g_handle,2,&showbuff[2]); iret = ZAux_Direct_GetRemain_LineBuffer(g_handle,3,&showbuff[3]); AxisPos.Format("è»¸åæ¨™(biÄo) X: %.2f Y: %.2f Z: %.2f U: %.2f",showpos[0],showpos[1],showpos[2],showpos[3]); AxisStatus.Format("軸狀態(tà i) X: %.0f Y: %.0f Z: %.0f U: %.0f",showstatus[0],showstatus[1],showstatus[2],showstatus[3]); AxisIdle.Format("é‹(yùn)å‹•(dòng)狀態(tà i) X: %s Y: %s Z: %s U: %s",showidle[0]?"åœæ¢":"é‹(yùn)å‹•(dòng)ä¸",showidle[1]?"åœæ¢":"é‹(yùn)å‹•(dòng)ä¸",showidle[2]?"åœæ¢":"é‹(yùn)å‹•(dòng)ä¸",showidle[3]?"åœæ¢":"é‹(yùn)å‹•(dòng)ä¸"); AxisBuffer.Format("剩余直線緩沖 X: %d Y: %d Z: %d U: %.d",showbuff[0],showbuff[1],showbuff[2],showbuff[3]); GetDlgItem( IDC_AXISPOS )->SetWindowText( AxisPos ); GetDlgItem( IDC_AXISSTATUS )->SetWindowText( AxisStatus ); GetDlgItem( IDC_AXISIDLE )->SetWindowText( AxisIdle ); GetDlgItem( IDC_REMAINBUFF )->SetWindowText( AxisBuffer ); } if(2 == nIDEvent) { int axislist[4] = {0,1,2,3}; //é‹(yùn)å‹•(dòng)BASE軸列表 int iresult = 0; int iLen = 10; //單次發(fÄ)é€é‹(yùn)å‹•(dòng)é•·(zhÇŽng)度 if (LEGS_MAX < g_curseges) //è¶…éŽ(guò)é•·(zhÇŽng)åº¦èŒƒåœ { iLen = g_curseges - LEGS_MAX; } iresult = ZAux_Direct_MultiMoveAbs(g_handle, iLen, 4, axislist, destdis[g_curseges]); //iresult = ZAux_Direct_MultiMove(g_handle,iLen, 4,axislist, destdis[g_curseges]);相å°(duì) if (ERR_OK != iresult) { //é‹(yùn)å‹•(dòng)發(fÄ)é€å¤±æ•—, CString str; str.Format("%d", iresult); } else { g_curseges += iLen; if (g_curseges > LEGS_MAX) //是å¦å¡«å®Œ { KillTimer(2); return; } } } CDialog::OnTimer(nIDEvent); }
  (5)ä¸€æ¬¡æ€§åŠ è¼‰å¤šæ¢å°ç·šæ®µï¼Œå¹¶åœ¨åŠ è¼‰å®Œæˆä¹‹åŽé€²(jìn)行é‹(yùn)å‹•(dòng)。
  /*************************************************************Description: //多æ¢ç›¸å°(duì)多軸直線æ’補(bÇ”) Input: //å¡éˆæŽ¥handle iMoveLen 填寫(xiÄ›)çš„é‹(yùn)å‹•(dòng)é•·(zhÇŽng)度 imaxaxises åƒèˆ‡é‹(yùn)å‹•(dòng)總軸數(shù) piAxislist 軸號(hà o)列表 pfDisancelist è·é›¢åˆ—表Output: //Return: //錯(cuò)誤碼*************************************************************/int32 __stdcall ZAux_Direct_MultiMoveAbs(ZMC_HANDLE handle,int iMoveLen, int imaxaxises, int *piAxislist, float *pfDisancelist){ int i,j; int32 iresult; char cmdbuff[2048]; char tempbuff[2048]; char cmdbuffAck[2048]; if(0 > imaxaxises || imaxaxises > MAX_AXIS_AUX) { return ERR_AUX_PARAERR; } //先讀å–剩余直線緩沖 int iBuffLen = 0; iresult = ZAux_Direct_GetRemain_LineBuffer(handle,piAxislist[0],&iBuffLen); if(iBuffLen <= iMoveLen) { return 1002; //ç·©æ²–ä¸å¤ } //生æˆå‘½ä»¤BASE命令 strcpy(cmdbuff, "BASE("); for(i = 0; i< imaxaxises-1; i++) { sprintf(tempbuff, "%d,",piAxislist[i]); strcat(cmdbuff, tempbuff); } sprintf(tempbuff, "%d)",piAxislist[imaxaxises-1]); strcat(cmdbuff, tempbuff); //æ›è¡Œ strcat(cmdbuff, "\n"); //生æˆé‹(yùn)å‹•(dòng)命令 for(j=0;j<imovelen;j++) if(ilen="" ç²å–命令長(zhÇŽng)度="" ilen="strlen(cmdbuff);" int="" }="" tempbuff);="" strcat(cmdbuff,="" j*imaxaxises]);="" +="" ?%f)\n?,pfdisancelist[i="" sprintf(tempbuff,="" +j*imaxaxises]);="" ?%f,?,pfdisancelist[i="" {="" i++)="" imaxaxises-1;="" i<="" i="0;">1000) { return 20002; } //調(dià o)用命令執(zhÃ)行函數(shù) return ZAux_DirectCommand(handle, cmdbuff, cmdbuffAck, 2048);}
  注:如上é¢ä»£ç¢¼è¡¨è¿°ï¼Œæ¤å‡½æ•¸(shù)需è¦å‚³å…¥å°ç·šæ®µæ¢æ•¸(shù),以åŠå°(duì)應(yÄ«ng)的數(shù)據(jù)å…§(nèi)容,利用ç²å–到的數(shù)據(jù)å…§(nèi)容組æˆå¤šæ¢å°ç·šæ®µé‹(yùn)å‹•(dòng)çš„move指令直接下發(fÄ),ä¸é€šéŽ(guò)æ¯æ¢æŒ‡ä»¤é‡æ–°è™•ç†çš„æ–¹å¼é€²(jìn)行é‹(yùn)å‹•(dòng)下發(fÄ),以é”(dá)åˆ°åŠ å¿«æ•ˆçŽ‡çš„ç›®çš„.
  防æ¢å‡ºç¾(xià n)ä¸Šä½æ©Ÿ(jÄ«)下發(fÄ)指令速度ä¸å¤ ?qÅ«)е逻\(yùn)行éŽ(guò)程ä¸é–“出ç¾(xià n)é‹(yùn)å‹•(dòng)執(zhÃ)行完æˆé€Ÿåº¦ç›´æŽ¥é™åˆ°0的情æ³ï¼Œåœ¨é‹(yùn)行éŽ(guò)ç¨‹ä¸æœƒ(huì)進(jìn)行判斷下發(fÄ)çš„å—符是å¦è¶…éŽ(guò)èƒ½å¤ ä¸‹ç™¼(fÄ)的最大å—符,若超éŽ(guò)則會(huì)返回å°(duì)應(yÄ«ng)的錯(cuò)誤碼。
  (6)通éŽ(guò)æ–·é–‹(kÄi)按鈕的事件處ç†å‡½æ•¸(shù)來(lái)æ–·é–‹(kÄi)與控制å¡çš„連接。
  void CSingle_move_Dlg::OnClose() //æ–·é–‹(kÄi)éˆæŽ¥{ // TODO: Add your control notification handler code here if(NULL != g_handle) { KillTimer(1); //é—œ(guÄn)定時(shÃ)器 KillTimer(2); ZAux_Close(g_handle); g_handle = NULL; SetWindowText("æœªéˆæŽ¥"); }}
  (7)通éŽ(guò)啟動(dòng)按鈕的事件處ç†å‡½æ•¸(shù)進(jìn)行è¨(shè)ç½®åƒæ•¸(shù),并開(kÄi)啟定時(shÃ)器2進(jìn)行é‹(yùn)å‹•(dòng)指令的下發(fÄ)。
  void CTest_multiMoveDlg::OnStart() //啟動(dòng){ if(NULL == g_handle) { MessageBox(_T("éˆæŽ¥æ–·é–‹(kÄi)")); return ; } UpdateData(true);//åˆ·æ–°åƒæ•¸(shù) int corner_mode = 0; int axislist[4] = {0,1,2,3}; //é‹(yùn)å‹•(dòng)BASE軸列表 //鏿“‡åƒèˆ‡é‹(yùn)å‹•(dòng)的軸,第一個(gè)軸為主軸,æ’補(bÇ”)åƒæ•¸(shù)å…¨ç”¨ä¸»è»¸åƒæ•¸(shù) ZAux_Direct_SetUnits(g_handle, axislist[0], m_units); //脈沖當(dÄng)é‡ ZAux_Direct_SetSpeed(g_handle,axislist[0],m_speed); //速度 UNITS / S ZAux_Direct_SetAccel(g_handle,axislist[0],m_accel); //åŠ é€Ÿåº¦ ZAux_Direct_SetDecel(g_handle,axislist[0],m_decel); //減速度UpdateData(true);//åˆ·æ–°åƒæ•¸(shù) ZAux_Direct_SetMerge(g_handle,axislist[0],1); //連續(xù)æ’補(bÇ”)é–‹(kÄi)é—œ(guÄn) ZAux_Direct_SetLspeed(g_handle,axislist[0],0); //起始速度 ,æ‹è§’減速由 é‹(yùn)å‹•(dòng)速度-起始速度 線性減速的 ZAux_Direct_SetCornerMode(g_handle,axislist[0],0); //æ‹è§’æ¨¡å¼ 0-é–‹(kÄi)啟 ZAux_Direct_SetDecelAngle(g_handle,axislist[0],60*3.14/180); //é–‹(kÄi)始減速角度,轉(zhuÇŽn)æ›ç‚ºå¼§åº¦ ZAux_Direct_SetStopAngle(g_handle,axislist[0],120*3.14/180); ZAux_Direct_SetFullSpRadius(g_handle,axislist[0],5); ZAux_Direct_SetZsmooth(g_handle,axislist[0],5); //調(dià o)用é‹(yùn)å‹•(dòng) 通éŽ(guò)檢查是å¦é‚„有剩余緩沖來(lái)確定是å¦ç™¼(fÄ)é‹(yùn)å‹•(dòng) g_curseges = 0; SetTimer(2, 50, NULL); //新建一個(gè)定時(shÃ)器,發(fÄ)é‹(yùn)å‹•(dòng) }
完整代碼ç²å–地å€
â–¼
  三ã€èª¿(dià o)試與監(jiÄn)控
  編è¯é‹(yùn)è¡Œä¾‹ç¨‹ï¼ŒåŒæ™‚(shÃ)通éŽ(guò)ZDevelop軟件連接控制器å°(duì)控制器狀態(tà i)進(jìn)行監(jiÄn)控。
  1.通éŽ(guò)ZDevelopè»Ÿä»¶çš„è»¸åƒæ•¸(shù)å¯ä»¥å°(duì)比當(dÄng)å‰demoå’ŒZDevelop上é¢åƒæ•¸(shù)çš„å°(duì)æ¯”ï¼Œè»¸åæ¨™(biÄo),軸狀態(tà i)ç‰ã€‚
  2.通éŽ(guò)ZDevelop軟件的示波器抓å–多æ¢å°ç·šæ®µæ•¸(shù)據(jù)打包下發(fÄ)é‹(yùn)å‹•(dòng)軌跡以åŠå°(duì)應(yÄ«ng)速度曲線。
  A.å°ç·šæ®µé‹(yùn)å‹•(dòng)軌跡:
  B.å°ç·šæ®µæ‰“包下發(fÄ)主軸的è¦(guÄ«)åŠƒé€Ÿåº¦ä¸€ç›´èƒ½å¤ ä¿æŒ,䏿œƒ(huì)å˜åœ¨ç”±äºŽä¸Šä½æ©Ÿ(jÄ«)下發(fÄ)速度ä¸å¤ 快而導(dÇŽo)致ä¸é–“速度為0情æ³ï¼š
  3.ZDevelop軟件調(dià o)è©¦è¦–é »ã€‚
  本次,æ£é‹(yùn)å‹•(dòng)技術(shù)ç°¡(jiÇŽn)單易用的é‹(yùn)å‹•(dòng)控制å¡(七)ï¼šä¸€æ¬¡æ€§åŠ è¼‰å¤šæ¢é€£çºŒ(xù)å°ç·šæ®µæ•¸(shù)據(jù),就分享到這里。
  更多精彩內(nèi)容請(qÇng)é—œ(guÄn)注“æ£é‹(yùn)å‹•(dòng)å°åŠ©æ‰‹â€å…¬çœ¾è™Ÿ(hà o),需è¦ç›¸é—œ(guÄn)é–‹(kÄi)發(fÄ)ç’°(huán)境與例程代碼,請(qÇng)咨詢æ£é‹(yùn)å‹•(dòng)技術(shù)銷售工程師:400-089-8936。
  本文由æ£é‹(yùn)å‹•(dòng)技術(shù)原創(chuà ng),æ¡è¿Žå¤§å®¶è½‰(zhuÇŽn)載,共åŒå¸(xué)ç¿’(xÃ),一起æé«˜ä¸åœ‹(guó)æ™ºèƒ½åˆ¶é€ æ°´å¹³ã€‚æ–‡ç« ç‰ˆæ¬Š(quán)æ¸æ£é‹(yùn)å‹•(dòng)技術(shù)所有,如有轉(zhuÇŽn)載請(qÇng)æ³¨æ˜Žæ–‡ç« ä¾†(lái)æºã€‚
上一篇:新型鋰離åé›»æ± è² (fù)æ¥µææ–™ å¯è®“...
下一篇:節(jié)能30% 英å¨é¨°å…¨æ–°å¡‘料片æ...
ä¸åœ‹(guó)傳動(dòng)ç¶²(wÇŽng)版權(quán)與å…責(zé)è²æ˜Žï¼šå‡¡æœ¬ç¶²(wÇŽng)注明[來(lái)æºï¼šä¸åœ‹(guó)傳動(dòng)ç¶²(wÇŽng)]的所有文å—ã€åœ–片ã€éŸ³è¦–å’Œè¦–é »æ–‡ä»¶ï¼Œç‰ˆæ¬Š(quán)å‡ç‚ºä¸åœ‹(guó)傳動(dòng)ç¶²(wÇŽng)(www.hysjfh.com)ç¨(dú)家所有。如需轉(zhuÇŽn)載請(qÇng)與0755-82949061è¯(lián)系。任何媒體ã€ç¶²(wÇŽng)站或個(gè)人轉(zhuÇŽn)載使用時(shÃ)é ˆæ³¨æ˜Žä¾†(lái)æºâ€œä¸åœ‹(guó)傳動(dòng)ç¶²(wÇŽng)â€ï¼Œé•å者本網(wÇŽng)將追究其法律責(zé)任。
本網(wÇŽng)轉(zhuÇŽn)載并注明其他來(lái)æºçš„稿件,å‡ä¾†(lái)自互è¯(lián)ç¶²(wÇŽng)或æ¥(yè)å…§(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuÇŽn)載請(qÇng)ä¿ç•™ç¨¿ä»¶ä¾†(lái)æºåŠä½œè€…ï¼Œç¦æ¢æ“…自篡改,é•è€…è‡ªè² (fù)版權(quán)法律責(zé)任。
相關(guÄn)資訊