時間:2024-03-01 14:38:27來æºï¼šæ·±åœ³å¸‚æ£é‹å‹•技術有é™å…¬å¸
  XPCIE1032H功能簡介
  XPCIE1032H是一款基于PCI Expressçš„EtherCAT總線é‹å‹•控制å¡ï¼Œå¯é¸6-64軸é‹å‹•控制,支æŒå¤šè·¯é«˜é€Ÿæ•¸å—輸入輸出,å¯è¼•æ¾å¯¦ç¾å¤šè»¸åŒæ¥æŽ§åˆ¶å’Œé«˜é€Ÿæ•¸æ“šå‚³è¼¸ã€‚XPCIE1032H集æˆäº†å¼·å¤§çš„é‹å‹•控制功能,çµåˆMotionRT7é‹å‹•æŽ§åˆ¶å¯¦æ™‚è»Ÿæ ¸ï¼Œè§£æ±ºäº†é«˜é€Ÿé«˜ç²¾æ‡‰ç”¨ä¸ï¼ŒPC Windows開發的éžå¯¦æ™‚痛點,指令交互速度比傳統的PCI/PCIeå¿«10å€ã€‚
  XPCIE1032H支æŒPWM,PSO功能,æ¿è¼‰16進16出通用IOå£ï¼Œå…¶ä¸è¼¸å‡ºå£å…¨éƒ¨ç‚ºé«˜é€Ÿè¼¸å‡ºå£ï¼Œå¯é…置為4è·¯PWMè¼¸å‡ºå£æˆ–者16路高速PSO硬件比較輸出å£ã€‚輸入å£å«æœ‰8路高速輸入å£ï¼Œå¯é…置為4è·¯é«˜é€Ÿè‰²æ¨™éŽ–å˜æˆ–兩路編碼器輸入。
  XPCIE1032Hæé…MotionRT7å¯¦æ™‚å…§æ ¸ï¼Œä½¿ç”¨æœ¬åœ°LOCAL接å£é€£æŽ¥ï¼Œé€šéŽé«˜é€Ÿçš„æ ¸å…§äº¤äº’,å¯ä»¥åšåˆ°æ›´å¿«é€Ÿçš„æŒ‡ä»¤äº¤äº’ï¼Œå–®æ¢æŒ‡ä»¤èˆ‡å¤šæ¢æŒ‡ä»¤ä¸€æ¬¡æ€§äº¤äº’時間å¯ä»¥é”到3-5uså·¦å³ã€‚
  ?XPCIE1032H與MotionRT7å¯¦æ™‚å…§æ ¸çš„é…åˆå…·æœ‰ä»¥ä¸‹å„ªå‹¢ï¼š
  1.支æŒå¤šç¨®ä¸Šä½æ©Ÿèªžè¨€é–‹ç™¼ï¼Œæ‰€æœ‰ç³»åˆ—產å“å‡å¯èª¿ç”¨åŒä¸€å¥—API函數庫;
  2.å€ŸåŠ©æ ¸å…§äº¤äº’ï¼Œå¯ä»¥å¿«é€Ÿèª¿ç”¨é‹å‹•指令,響應時間快至微秒級,比傳統PCI/PCIeå¿«10å€;
  3.解決傳統PCI/PCIeé‹å‹•控制å¡åœ¨Windows環境下控制系統的éžå¯¦æ™‚性å•題;
  4.支æŒä¸€ç¶/二ç¶/三ç¶PSO(高速硬件ä½ç½®æ¯”較輸出),é©ç”¨äºŽè¦–覺飛æ‹ã€ç²¾å¯†é»žè† å’Œæ¿€å…‰èƒ½é‡æŽ§åˆ¶ç‰æ‡‰ç”¨;
  5.æä¾›é«˜é€Ÿè¼¸å…¥æŽ¥å£ï¼Œä¾¿äºŽå¯¦ç¾ä½ç½®éŽ–å˜;
  6.支æŒEtherCAT總線和脈沖輸出混åˆè¯å‹•ã€æ··åˆæ’補。
  ?使用XPCIE1032Hå’ŒMotionRT7é€²è¡Œé …ç›®é–‹ç™¼æ™‚ï¼Œé€šå¸¸éœ€è¦é€²è¡Œä»¥ä¸‹æ¥é©Ÿï¼š
  1.安è£é©…動程åºï¼Œè˜åˆ¥XPCIE1032H;
  2.打開并執行文件“MotionRT710.exeâ€ï¼Œé…ç½®åƒæ•¸å’Œé‹è¡Œé‹å‹•æŽ§åˆ¶å¯¦æ™‚å…§æ ¸;
  3.使用ZDevelopè»Ÿä»¶é€£æŽ¥åˆ°æŽ§åˆ¶å™¨ï¼Œé€²è¡Œåƒæ•¸ç›£æŽ§ã€‚連接時請使用PCI/LOCALæ–¹å¼ï¼Œå¹¶ç¢ºä¿ZDevelop軟件版本在3.10以上;
  4.å®ŒæˆæŽ§åˆ¶ç¨‹åºé–‹ç™¼ï¼Œé€šéŽLOCALéˆæŽ¥æ–¹å¼é€£æŽ¥åˆ°é‹å‹•控制å¡ï¼Œå¯¦ç¾å¯¦æ™‚é‹å‹•控制。
  ?與傳統PCI/PCIeå¡å’ŒPLCçš„æ¸¬è©¦æ•¸æ“šçµæžœå°æ¯”:
  我們å¯ä»¥å¾žæ¸¬è©¦å°æ¯”çµæžœçœ‹å‡ºï¼ŒXPCIE1032Hé‹å‹•控制å¡é…åˆå¯¦æ™‚é‹å‹•æŽ§åˆ¶å…§æ ¸MotionRT7,在LOCALéˆæŽ¥(æ ¸å…§äº¤äº’)的方å¼ä¸‹ï¼ŒæŒ‡ä»¤äº¤äº’的效率是éžå¸¸ç©©å®šï¼Œç•¶æ¸¬è©¦æ•¸é‡å¾ž1wå¢žåŠ åˆ°10wæ™‚ï¼Œå–®æ¢æŒ‡ä»¤äº¤äº’æ™‚é–“èˆ‡å¤šæ¢æŒ‡ä»¤äº¤äº’時間波動ä¸å¤§ï¼Œéžå¸¸é©ç”¨äºŽé«˜é€Ÿé«˜ç²¾çš„æ‡‰ç”¨ã€‚
XPCIE1032H控制å¡å®‰è£
  §關閉計算機電æºã€‚
ã€€ã€€Â§æ‰“é–‹è¨ˆç®—æ©Ÿæ©Ÿç®±ï¼Œé¸æ“‡ä¸€æ¢ç©ºé–‘çš„XPCIE塿§½ï¼Œç”¨èžºçµ²åˆ€å¸ä¸‹ç›¸æ‡‰çš„æ“‹æ¿æ¢ã€‚
  § å°‡é‹å‹•æŽ§åˆ¶å¡æ’å…¥è©²æ§½ï¼Œæ“°ç·Šæ“‹æ¿æ¢ä¸Šçš„固定螺絲。
  XPCIE1032H驅動安è£èˆ‡å»ºç«‹é€£æŽ¥åƒè€ƒå¾€æœŸæ–‡ç« EtherCAT超高速實時é‹å‹•控制å¡XPCIE1032Hä¸Šä½æ©ŸC#開發(一):驅動安è£èˆ‡å»ºç«‹é€£æŽ¥ã€‚
  一ã€C#語言進行é‹å‹•æŽ§åˆ¶é …ç›®é–‹ç™¼
  1.解壓下載的安è£åŒ…找到“ Zmcaux.cs â€ï¼Œâ€œ zauxdll.dll â€ï¼Œâ€œ zmotion.dll â€æ”¾å…¥åˆ°é …目文件ä¸ã€‚
(1)“Zmcaux.csâ€æ”¾åœ¨é …ç›®æ ¹ç›®éŒ„æ–‡ä»¶ä¸ï¼Œèˆ‡bin目錄åŒç´šã€‚
  (2)“zauxdll.dllâ€ï¼Œâ€œzmotion.dllâ€æ”¾åœ¨bin → Debug。
  2.用vsæ‰“é–‹æ–°å»ºçš„é …ç›®æ–‡ä»¶ï¼Œåœ¨å³é‚Šçš„解決方案資æºç®¡ç†å™¨ä¸é»žæ“Šé¡¯ç¤ºæ‰€æœ‰ï¼Œç„¶åŽé¼ 標å³éµé»žæ“Šzmcaux.csæ–‡ä»¶ï¼Œé»žæ“ŠåŒ…æ‹¬åœ¨é …ç›®ä¸ã€‚
  3.雙擊Form1.cs里é¢çš„Form1,出ç¾ä»£ç¢¼ç·¨è¼¯ç•Œé¢ï¼Œåœ¨æ–‡ä»¶é–‹é 寫入using cszmcaux,å¹¶è²æ˜ŽæŽ§åˆ¶å™¨å¥æŸ„g_handle。
  二ã€PC函數介紹
PC函數手冊也在光盤資料里é¢ï¼Œå…·é«”路徑如下:“光盤資料\8.PC函數\函數庫2.1\ZMotion函數庫編程手冊 V2.1.pdfâ€ã€‚
  三ã€åŒæ¥è·Ÿéš¨é‹å‹•介紹
ã€€ã€€åŒæ¥è·Ÿéš¨é‹å‹• -- MOVESYNC
  æ¤é‹å‹•å¯ä»¥ç°¡æ‹†æˆå…©éƒ¨åˆ†çµ„æˆ(åŒæ¥+跟隨),整個éŽç¨‹ç”±åŒæ¥å’Œè·Ÿéš¨çµ„æˆ;åŒæ¥éŽç¨‹ï¼šæ˜¯å¯¦ç¾è¿½ä¸Šç›®æ¨™å¹¶ç²å¾—å’Œç›®æ¨™åŒæ¨£çš„é‹å‹•速度;
  跟隨éŽç¨‹ï¼šæ˜¯åœ¨åŒæ¥éŽç¨‹å®ŒæˆåŽèˆ‡ç”¢å“ä¿æŒç›¸å°éœæ¢é‹å‹•çš„éŽç¨‹ï¼Œåœ¨æ¤éŽç¨‹ä¸å¯ä»¥å¼•用其他é‹å‹•動作,以實ç¾é»žè† ã€åˆ†æ€ç‰å·¥è—動作。
ã€€ã€€åŒæ¥è·Ÿéš¨é‹å‹•çš„é‡é»žèªªæ˜Ž
  1.åŒæ¥+跟隨的éŽç¨‹ä¸€èˆ¬åˆ†ç‚º3æ®µï¼šåŠ é€Ÿæ®µ(åŒæ¥éŽç¨‹)ã€åŒæ¥æ®µ(跟隨éŽç¨‹)ã€æ¸›é€Ÿæ®µ(復ä½éŽç¨‹);
  2.åŠ é€Ÿæ™‚é–“ï¼šä½œç”¨äºŽåŒæ¥éŽç¨‹ï¼ŒæŒ‡ç¤ºåŒæ¥è¦åœ¨é‹å‹•觸發åŽå¤šä¹…完æˆï¼Œå–®ä½MS;
  3.勻速時間:作用于跟隨éŽç¨‹ï¼ŒæŒ‡ç¤ºåœ¨åŒæ¥é‹å‹•çµæŸåŽï¼Œè·Ÿéš¨éŽç¨‹æŒçºŒæ™‚間,單ä½MS,æ¤è™•éœ€è¦æ³¨æ„èˆ‡åŠ å·¥å‹•ä½œè€—æ™‚çš„æé…;如果跟隨時間å°äºŽåŠ å·¥æ™‚é–“ï¼Œå‰‡å¯èƒ½å‡ºç¾éƒ¨åˆ†åŠ å·¥éŽç¨‹ä¸åœ¨è·Ÿéš¨éŽç¨‹å®Œæˆ(軌跡會出ç¾åå·®);
  4.æ¸›é€Ÿæ™‚é–“ï¼šä½œç”¨äºŽæ¸›é€Ÿåº¦ï¼ŒæŒ‡ç¤ºåŠ å·¥å®Œæˆå›žåˆ°æŒ‡å®šä½ç½®ç‰å¾…下一次觸發éŽç¨‹çš„æ¸ä½æ™‚間,單ä½MS。
  四ã€ä¾‹ç¨‹èªªæ˜Ž
1.C#例程界é¢å¦‚下。
  2.例程實ç¾é‚輯解讀簡圖。
  3.在Form1çš„æ§‹é€ å‡½æ•¸ä¸èª¿ç”¨æŽ¥å£ZAux_FastOpen(),使在系統åˆå§‹åŒ–çš„æ™‚å€™è‡ªå‹•éˆæŽ¥æŽ§åˆ¶å™¨ã€‚
  ·
  //LOCAL éˆæŽ¥private void button4_Click(object sender, EventArgs e){ if (G_CardHandle == (IntPtr)0) { btn_Close_Click(sender, e); } zmcaux.ZAux_FastOpen(5, comboBox1.Text, 1000, out G_CardHandle); if (G_CardHandle != (IntPtr)0) { this.Text = "å·²éˆæŽ¥"; timer1.Enabled = true; } else { MessageBox.Show("éˆæŽ¥å¤±æ•—ï¼Œè«‹é¸æ“‡æ£ç¢ºçš„LOCAL!"); }}
  4.定時器é‹è¡Œç²å–鎖å˜ä½ç½®ä¿¡æ¯ã€‚
  ·
  private void timer2_Tick(object sender, EventArgs e){ int iret = 0; float[] MarkNum = new float[2]; float[] RegistPos = new float[1000]; iret = zmcaux.ZAux_Direct_GetTable(G_CardHandle, Convert.ToInt32(Text_TabStart.Text), 1, MarkNum); //ç²å–鎖å˜è§¸ç™¼æ¬¡æ•¸ m_RegistCount = (int)MarkNum[0]; this.DataGridView2.Rows[0].Cells[1].Value = m_RegistCount.ToString(); //顯示到列表 if (m_RegistCount > m_RegistShow) //éŽ–å˜æ•¸é‡å¤§äºŽé¡¯ç¤º { int iNum = m_RegistCount - m_RegistShow; iret = zmcaux.ZAux_Direct_GetTable(G_CardHandle, Convert.ToInt32(Text_TabStart.Text) + 1 + m_RegistShow, iNum, RegistPos); //ç²å–鎖å˜è§¸ç™¼æ¬¡æ•¸ for (int i = 0; i < iNum; i++) { this.DataGridView2.Rows[m_RegistShow + i + 1].Cells[1].Value = RegistPos[i].ToString(); } m_RegistShow = m_RegistCount; } else if (m_RegistCount < m_RegistShow) //鎖å˜å¾ªç’°æº¢å‡º { int iNum = Convert.ToInt32(Text_TabNum.Text) - m_RegistShow - 1; iret = zmcaux.ZAux_Direct_GetTable(G_CardHandle, Convert.ToInt32(Text_TabStart.Text) + 1 + m_RegistShow, iNum, RegistPos); //ç²å–鎖å˜è§¸ç™¼æ¬¡æ•¸ for (int i = 0; i < iNum; i++) { this.DataGridView2.Rows[m_RegistShow + i + 1].Cells[1].Value = RegistPos[i].ToString(); } m_RegistShow = 0; }}
  5.åŒæ¥è·Ÿéš¨ç·šç¨‹è§¸ç™¼å¹¶åŸ·è¡ŒåŒæ¥è·Ÿéš¨å‹•作。
  ·
  public void SubMoveSync(){ int iret = 0; int[] iAxisList = new int[2] { 0, 1 }; int[] iTime = new int[3]; iTime[0] = Convert.ToInt32(TextAccTime.Text); iTime[1] = Convert.ToInt32(TextSyncTime.Text); iTime[2] = Convert.ToInt32(TextBackTime.Text); float[] fWaitPos = new float[2]; fWaitPos[0] = Convert.ToSingle(TextXpos.Text); fWaitPos[1] = Convert.ToSingle(TextYpos.Text); float fOffPos = Convert.ToSingle(TextOffpos.Text); float fPdAxisPos = 0; //ç•¶å‰çš®å¸¶è»¸ä½ç½® float[] fMakrPos = new float[2]; //ç•¶å‰åŠ å·¥ç”¢å“鎖å˜ç·¨ç¢¼å™¨çš„ä½ç½® int iMaxNum = Convert.ToInt32(Text_TabNum.Text); float imode = 0; if (radioBtnX.Checked) { imode = 0 + (float)(Convert.ToSingle(TextAngle.Text) / 180.0 * Math.PI); //Xæ–¹å‘跟隨 } else { imode = 10 + (float)(Convert.ToSingle(TextAngle.Text) / 180.0 * Math.PI); //Yæ–¹å‘跟隨 } while (true) { if ((m_RegistCount != 0) && (iWorkCount < iMaxNum)) //éŽ–å˜ å·²ç¶“è§¸ç™¼åŠ å·¥æ•¸é‡å°äºŽç¸½éŽ–å˜æ•¸ { iret = zmcaux.ZAux_Direct_GetTable(G_CardHandle, Convert.ToInt32(Text_TabStart.Text) + 1 + iWorkCount, 1, fMakrPos); //ç²å–ç•¶å‰æº–å‚™åŠ å·¥çš„éŽ–å˜ä½ç½® } else if (iWorkCount > iMaxNum) //鎖å˜å標已經溢出,數據ä¿å˜åœ¨éŽ–å˜å‰é¢ { iWorkCount = iWorkCount - m_RegistCount; //從下個循環開始å–值 if (iWorkCount < m_RegistCount) { iret = zmcaux.ZAux_Direct_GetTable(G_CardHandle, Convert.ToInt32(Text_TabStart.Text) + 1 + iWorkCount, 1, fMakrPos); //ç²å–ç•¶å‰æº–å‚™åŠ å·¥çš„éŽ–å˜ä½ç½® } else { continue; } } //鎖å˜äº‹ä»¶æœªè§¸ç™¼ 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); //åŒæ¥å•Ÿå‹•åŠ é€Ÿæ®µï¼Œ iret = zmcaux.ZAux_Direct_MoveSync(G_CardHandle, imode, iTime[1], fMakrPos[0] + fOffPos, 2, 2, iAxisList, fWaitPos); //åŒæ¥å•Ÿå‹•勻速速段,勻速時間 iret = zmcaux.ZAux_Direct_MoveSync(G_CardHandle, imode, iTime[2], 0, -1, 2, iAxisList, fWaitPos); //çµæŸåŒæ¥èµ°åˆ°å¾…機ä½ç½® int Axisidle = 0; do { iret = zmcaux.ZAux_Direct_GetIfIdle(G_CardHandle, iAxisList[0], ref Axisidle); //ç‰å¾…主軸跟隨完畢 } while (Axisidle == 0); iWorkCount++; }}
  五ã€èª¿è©¦èˆ‡é‹è¡Œ
1.用Xæ–¹å‘跟隨(Yæ–¹å‘åŒç†),輸入Xæ–¹å‘è·Ÿéš¨åƒæ•¸ã€‚
  如下圖,鎖å˜é€šéŽè¼¸å…¥0號觸發,觸發多次,將數據æä¾›çµ¦åŒæ¥è·Ÿéš¨å¹¶è§¸ç™¼åŒæ¥è·Ÿéš¨æ³¢å½¢ï¼Œæ³¢å½¢åœ–ä¸ï¼ŒX跟隨軸在å‰5S內實ç¾åŒæ¥åŽï¼Œèˆ‡çš®å¸¶è»¸åœ¨2Så…§ä¿æŒç›¸åŒé€Ÿåº¦ç›¸å°é‹è¡Œï¼Œè·Ÿéš¨çµæŸåŽåœ¨5Så…§æ¸ä½å®Œæˆã€‚
  本次,æ£é‹å‹•æŠ€è¡“çš®å¸¶åŒæ¥è·Ÿéš¨ï¼šEtherCAT超高速實時é‹å‹•控制å¡XPCIE1032Hä¸Šä½æ©ŸC#開發(åå››),就分享到這里。
  更多精彩內容請關注“æ£é‹å‹•å°åŠ©æ‰‹â€å…¬çœ¾è™Ÿï¼Œéœ€è¦ç›¸é—œé–‹ç™¼ç’°å¢ƒèˆ‡ä¾‹ç¨‹ä»£ç¢¼ï¼Œè«‹å’¨è©¢æ£é‹å‹•技術銷售工程師:400-089-8936。
  本文由æ£é‹å‹•技術原創,æ¡è¿Žå¤§å®¶è½‰è¼‰ï¼Œå…±åŒå¸ç¿’,一起æé«˜ä¸åœ‹æ™ºèƒ½åˆ¶é€ æ°´å¹³ã€‚æ–‡ç« ç‰ˆæ¬Šæ¸æ£é‹å‹•æŠ€è¡“æ‰€æœ‰ï¼Œå¦‚æœ‰è½‰è¼‰è«‹æ³¨æ˜Žæ–‡ç« ä¾†æºã€‚
上一篇:細數兆越通訊在軌é“交通智能...
下一篇:什么是è»ç”¨æ©Ÿå™¨äººï¼Œéƒ½æœ‰å“ªäº›...
ä¸åœ‹å‚³å‹•網版權與å…è²¬è²æ˜Žï¼šå‡¡æœ¬ç¶²æ³¨æ˜Ž[來æºï¼šä¸åœ‹å‚³å‹•ç¶²]的所有文å—ã€åœ–片ã€éŸ³è¦–å’Œè¦–é »æ–‡ä»¶ï¼Œç‰ˆæ¬Šå‡ç‚ºä¸åœ‹å‚³å‹•ç¶²(www.hysjfh.com)ç¨å®¶æ‰€æœ‰ã€‚如需轉載請與0755-82949061è¯ç³»ã€‚任何媒體ã€ç¶²ç«™æˆ–å€‹äººè½‰è¼‰ä½¿ç”¨æ™‚é ˆæ³¨æ˜Žä¾†æºâ€œä¸åœ‹å‚³å‹•ç¶²â€ï¼Œé•å者本網將追究其法律責任。
本網轉載并注明其他來æºçš„稿件,å‡ä¾†è‡ªäº’è¯ç¶²æˆ–æ¥å…§æŠ•稿人士,版權屬于原版權人。轉載請ä¿ç•™ç¨¿ä»¶ä¾†æºåŠä½œè€…ï¼Œç¦æ¢æ“…自篡改,é•è€…è‡ªè² ç‰ˆæ¬Šæ³•å¾‹è²¬ä»»ã€‚
相關資訊