亚洲精品久久久久久久久久久,亚洲国产精品一区二区制服,亚洲精品午夜精品,国产成人精品综合在线观看,最近2019中文字幕一页二页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

強實時運動控制內(nèi)核MotionRT750(九):內(nèi)置C語言的自定義機械手模型實現(xiàn)

正運動技術 ? 來源:正運動技術 ? 作者:正運動技術 ? 2025-10-27 14:14 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

強實時運動控制內(nèi)核MotionRT750

MotionRT750是正運動技術首家自主自研的x86架構Windows系統(tǒng)或Linux系統(tǒng)下獨占確定CPU的強實時運動控制內(nèi)核。

wKgZO2kB0KSAVCDaAAIoQszQrvc284.png

該方案采用獨占確定CPU內(nèi)核技術實現(xiàn)超強性能的強實時運動控制。它將核心的運動控制、機器人算法、數(shù)控(CNC)及機器視覺等強實時的任務,集中運行在1-2個專用CPU核上。與此同時,其余CPU核則專注于處理Windows/Linux相關的非實時任務。

此外集成MotionRT750 Runtime實時層與操作系統(tǒng)非實時層,并利用高速共享內(nèi)存進行數(shù)據(jù)交互,顯著提升了運動控制與上層應用間的通信效率及函數(shù)執(zhí)行速度,最終實現(xiàn)更穩(wěn)定、更高效的智能裝備控制,確保了運動控制任務的絕對實時性與系統(tǒng)穩(wěn)定性,特別適用于半導體、電子裝備等高速高精的應用場合。

wKgZPGkB0KSATCAZAAIU8fcqjTg720.png

MotionRT750應用優(yōu)勢:

1.跨平臺兼容性:支持Windows/Linux系統(tǒng),適配不同等級CPU。

2.開發(fā)靈活性:提供多語言編程接口,便于二次開發(fā)與功能定制。

3.實時性提升:通過CPU內(nèi)核獨占機制與高效LOCAL接口,實現(xiàn)2-3us指令交互周期,較傳統(tǒng)PCI/PCIe方案提速近20倍。

4.擴展能力強化:多卡多EtherCAT通道架構支持254軸運動控制及500usEtherCAT周期。

5.系統(tǒng)穩(wěn)定性:32軸125us EtherCAT冗余架構消除單點故障風險,保障連續(xù)生產(chǎn)。

6.安全可靠性:不懼Windows系統(tǒng)崩潰影響,藍屏時仍可維持急停與安全停機功能有效,確保產(chǎn)線安全運行。

7.功能擴展性:實時內(nèi)核支持C語言程序開發(fā),方便功能拓展與實時代碼提升效率。


MotionRT750視頻介紹可點擊→正運動強實時運動控制內(nèi)核MotionRT750。

更多關于MotionRT750的詳情介紹與使用點擊→強實時運動控制內(nèi)核MotionRT750(一):驅動安裝、內(nèi)核配置與使用。

超實時EtherCAT運動控制卡XPCIE6032H

XPCIE6032H運動控制卡集成6路獨立EtherCAT主站接口。整卡最高可支持254軸運動控制;125usEtherCAT通訊周期時,兩個端口配置冗余最高可支持32軸運動控制。6個EtherCAT主站各通道獨立工作,多EtherCAT主站互不影響。

wKgZO2kB0KWAImEoAAOFBZ7T9sc645.png

wKgZPGkB0KeAHwt5AAVqagus0sU529.png

XPCIE6032H視頻介紹可點擊→全球首創(chuàng)!PCIe 6路高性能EtherCAT運動控制卡XPCIE6032H。

XPCIE6032H運動控制卡面向半導體設備、精密3C電子、生物醫(yī)療儀器、新能源裝備、人形機器人及激光加工等高速高精場景,為固晶機、貼片機、分選機、鋰電切疊一體機、高速異形插件設備等自動化裝備提供核心運動控制支持。

XPCIE6032H硬件特性:

1.EtherCAT通訊周期可到125us(需要主機性能與實時性足夠)。

2.板卡集成6路獨立的EtherCAT主站接口,最多可支持254軸運動控制。

3.搭載運動控制實時內(nèi)核MotionRT750。

4.相較于傳統(tǒng)的PCI/PCIe、網(wǎng)口等通訊方式,速度可提升了10-100倍以上。

5.板載16路高速輸入,16路高速輸出。

6.板載4路高速鎖存,4路通用PWM輸出。

更多關于XPCIE6032H的詳情介紹與使用點擊→全球首創(chuàng)!PCIe超實時6通道EtherCAT運動控制卡上市!。

超實時EtherCAT運動控制卡XPCIE2032H

XPCIE2032H集成2路獨立EtherCAT接口。整卡最高可支持至254軸運動控制;125usEtherCAT通訊周期時,單接口最高可支持32軸運動控制。2個EtherCAT主站各通道獨立工作,多EtherCAT主站互不影響。

wKgZO2kB0KiAKxWJAAPfE-iDOHk476.png

雙EtherCAT主站端口可任意設置為以下通道,且兩個端口也設置為不同類型通道:

● 高速通道 - EtherCAT通訊周期125us

● 常規(guī)通道 - EtherCAT通訊周期250us-8ms

wKgZO2kB0K6Af0T6AALGmECodtA560.pngwKgZPGkB0LCAfEM0AAQOK9gIM2M941.png

XPCIE2032H視頻介紹可點擊→高速高精運動控制!PCIe超實時2通道EtherCAT運動控制卡上市!。

XPCIE2032H硬件特性:

1.EtherCAT通訊周期可到125us(需要主機性能與實時性足夠)。

2.板卡集成2路獨立的EtherCAT主站接口,最多可支持254軸運動控制。

3.搭載運動控制實時內(nèi)核MotionRT750。

4.相較于傳統(tǒng)的PCI/PCIe、網(wǎng)口等通訊方式,速度可提升了10-100倍以上。

5.板載8路高速輸入,16路高速輸出。

6.板載4路高速鎖存,4路通用PWM輸出。

更多關于XPCIE2032H的詳情介紹與使用點擊→高速高精運動控制!PCIe超實時2通道EtherCAT運動控制卡上市!。

超實時EtherCAT運動控制卡XPCIE1032H

XPCIE1032H是一款基于PCI Express的EtherCAT總線運動控制卡,可選6-64軸運動控制,支持多路高速數(shù)字輸入輸出,可輕松實現(xiàn)多軸同步控制和高速數(shù)據(jù)傳輸。

wKgZO2kB0LKABNLjAAYAyM9jHlw001.pngwKgZPGkB0LOAbymOAAJKOxgnpBY834.png

XPCIE1032H視頻介紹可點擊→高性能PCIe EtherCAT運動控制卡 | XPCIE1032H_。

XPCIE1032H運動控制卡集成了強大的運動控制功能,結合MotionRT7運動控制實時軟核,解決了高速高精應用中,PC Windows開發(fā)的非實時痛點,指令交互速度比傳統(tǒng)的PCI/PCIe快10倍。

wKgZO2kB0LOAI7WLAAFs-V0I-Uo822.png

XPCIE1032H硬件特性:

1.6-64軸EtherCAT總線+脈沖可選,其中4路單端500KHz脈沖輸出。

2.16軸EtherCAT同步周期500us,支持多卡聯(lián)動。

3.板載16點通用輸入,16點通用輸出,其中8路高速輸入和16路高速輸出。

4.通過EtherCAT總線,可擴展到512個隔離輸入或輸出口。

5.支持PWM輸出、精準輸出、PSO硬件位置比較輸出、視覺飛拍等。

6.支持直線插補、圓弧插補、連續(xù)軌跡加工(速度前瞻)。

7.支持電子凸輪、電子齒輪、位置鎖存、同步跟隨、虛擬軸、螺距補償?shù)裙δ堋?/p>

8.支持30+機械手模型正逆解模型算法,比如SCARA、Delta、UVW、4軸/5軸 RTCP...

更多關于XPCIE1032H詳情點擊“不止10倍提速!PCIe EtherCAT實時運動控制卡XPCIE1032H 等您評測!”查看。

如何使用C語言與BASIC語言進行配合

wKgZPGkB0LSAKwHTAACc7AuMyLY760.png

01固件版本要求

控制器使用C函數(shù)需要使用支持C接口函數(shù)的固件版本;固件版本名稱里帶有“cfunc”的即為支持C函數(shù)接口。

02函數(shù)調(diào)用限制

同一個C文件內(nèi)的某一個C函數(shù)只能在某一個Basic文件內(nèi)被聲明調(diào)用,不可被在多個basic文件內(nèi)都進行聲明調(diào)用。

03多函數(shù)聲明規(guī)則

同一個C文件內(nèi)的不同C函數(shù)可以分別在不同的Basic文件內(nèi)被聲明調(diào)用,但再次被聲明后的函數(shù)名不可一致。

DEFINE_CFUNC -- 關鍵字

wKgZO2kB0LSADsOZAAAXJMIPIIc491.png

支持的數(shù)據(jù)類型定義:int、float、double、TYPE_TABLE。如果與TABLE數(shù)組交互,建議使用TYPE_TABLE類型。在4系列以上的控制器,TYPE_TABLE是double類型。

舉例一

C語言編程部分:

intuserc_init(void)
{
 int* p=(int*)malloc(sizeof(int));
   p[0]=88;
 printf("p[0]=%dn",p[0]);
 free(p);
 return0;
}
floatdivf(floata,floatb)
{
 return(a/b);
}
TYPE_TABLEdivd(TYPE_TABLE a,TYPE_TABLE b)
{
 return(a/b);
}

BASIC編程部分:

define_cfunc userc_initintuserc_init(void)
define_cfunc userc_divffloatdivf(floata,floatb)
define_cfunc userc_divddoubledivd(doublea,doubleb)
?userc_init()
?userc_divf(23.1,1)
?userc_divd(23.3,1)
wKgZPGkB0LWAdjtqAAGJm1xuWxA658.png

以下程序代碼測試TABLE指針輸入輸出數(shù)據(jù)。

舉例二

C語言編程部分:

inttablefunc(TYPE_TABLE *ptable,intinum)
{
 inti;
 for(i=0;i

BASIC編程部分:

define_cfunc userc_tfuncinttablefunc(TYPE_TABLE *ptable,intinum)
dimptable(20)
dim inum
userc_tfunc(ptable,inum)
wKgZPGkB0LaAU0JXAAIqiC03LHE765.png

注意事項:

(1)定義的無參數(shù)函數(shù),可以在INT_CYCLE中直接使用。

(2)BASIC調(diào)用的C函數(shù)的參數(shù)個數(shù)最多支持8個。

(3)C函數(shù)注意安全性,注意代碼規(guī)范性,否則可能導致死機。

(4)C函數(shù)要注意實時性,處理必須夠快,否則會影響B(tài)ASIC的實時性。

注:建議調(diào)試時都下載RAM運行!

編譯平臺選擇參照

不同型號控制器編譯平臺有所不同,具體參照下表。目前僅以下型號控制器支持C語言,其他系列型號控制器如有疑問請與技術工程師聯(lián)系。

wKgZO2kB0LeAaenMAAAQDW88RDk584.png

右鍵單擊“文件視圖”中空白區(qū)域,點擊彈出窗口中“設置”一欄,進行編譯平臺設置操作。在彈出窗口“編譯平臺”一欄中點擊下拉列表,在下拉列表中選擇相應的編譯平臺后單擊“確定”,即可完成編譯平臺設置操作。

wKgZPGkB0LiAVQSiAAI_DWl5Bww776.png

C函數(shù)使用步驟

1.在RTSys軟件中單擊菜單欄“文件”,在下拉窗口中選擇“新建項目”。選擇項目文件存入的路徑并且自定義命名項目名稱。

wKgZPGkB0LiAIY35AAEZUHnnXIc723.png

2.新建項目成功后,在新建的項目下新建新的Basic文件,并且自定義相關Basic文件名。點擊確定Basic文件創(chuàng)建成功。

wKgZO2kB0LmASNfwAAFSrYP6V4c152.png

3.新建.C文件。步驟可參照第二步,新建文件類型時需選擇“C”。

wKgZPGkB0LqAL2-pAAF-bK1YJII313.png

4.右鍵單擊“文件視圖”中空白區(qū)域,點擊彈出窗口中“設置”一欄,進行編譯平臺設置操作。

wKgZO2kB0LuAIaugAAGIF9MUxDI138.png

5.在彈出窗口“編譯平臺”一欄中點擊下拉列表,在下拉列表中選擇相應的編譯平臺后單擊“確定”,即可完成編譯平臺設置操作,編譯平臺的選擇可參照上一章節(jié)“編譯平臺選擇參考”。

wKgZPGkB0LyAP4K_AAGkDbgpoJ0920.png

6.編寫C函數(shù)。編寫C程序時需先進行頭文件聲明步驟,然后再按照C語言編碼規(guī)范編寫C函數(shù)。

頭文件聲明語法:#include “xxxxx.h”。“xxxx.h”為引用內(nèi)置函數(shù)的頭文件。如下圖所示,“.h”頭文件的文件路徑需與項目文件路徑一致?!皕mcbuildin.h”文件可聯(lián)系正運動工程師獲取。

wKgZO2kB0MGAL9MXAAKbz9C-ON0629.png

7.在BASIC程序中使用C函數(shù)時需要使用關鍵字“DEFINE_CFUNC”對被使用C函數(shù)進行引用定義,定義后在Basic文件中使用重新賦予的函數(shù)名即可調(diào)用該C函數(shù)。

wKgZPGkB0MOAARflAAGyRzaES7Q032.png

注:C函數(shù)代碼在RTSys中直接編輯即可,在其他軟件中編輯復制到RTSys中時可能會導致亂碼或格式錯誤等問題。

簡單示例

1.聲明C函數(shù)接口(zmcbuildin.h)

C語言:

// 添加自定義函數(shù)聲明
#include "zmcbuildin.h"
doublefast_sin()
{
 doublesum =0;
 for(inti=0; i

2.BASIC綁定CFUNC

Basic語言:

DEFINE_CFUNC c_sin_calcdoublefat_sin()
```

3.混合編程調(diào)用

Basic語言:

sum= c_sin_calc()
wKgZO2kB0MSAfbjzAAEM5yTwg_I088.png

自定義機械手模型實現(xiàn)

已有的機械手類型如下,更多類型可以查看《正運動機械手手冊》。

wKgZPGkB0MWAPrCLAAE3OrfMsrE003.pngwKgZO2kB0MaAS6cTAAEaT2LXzsA001.pngwKgZPGkB0MaAd41TAAEzR5AR96A772.pngwKgZO2kB0MqAOIFGAAFomd7zXrg173.png

對于需要實現(xiàn)自定義機械手模型的需求,我們內(nèi)置C語言提供了CFRAME機械手結構擴展功能,用戶可通過此功能自定義機械手模型,C函數(shù)部分使用 usercframe.c文件內(nèi)的即可,進行算法自定義。函數(shù)用法示例相關代碼介紹如下:

C函數(shù)部分如下:

正運動控制器內(nèi)置Frame1~Frame999的機械手類型,用戶自定義機械手類型為FRAME1000~FRAME65535。

函數(shù)名自動根據(jù)frame編號生成,下面C語言部分根據(jù)1000來生成舉例。

功能:擴展機械手frame類型

wKgZPGkB0MuADg7-AAAul5smkFs470.png

功能:frame初始化

//機械手每次正逆解回調(diào)執(zhí)行,用戶可以初始化內(nèi)部變量
// 輸入:
//    pzmc	      控制器描述結構指針
//    pframe	    機械手基本狀態(tài)指針
//    pParaList Table 參數(shù)列表
// 返回值, 成功與否, 0-OK
********************************/
uint32SOFRAME_INIT1000(struct_soZmcDisp *pzmc, struct_soFrameStatus* pframe, TYPE_TABLE* pParaList)
{
  //初始化
  int16 i;
  //把connreframe的table數(shù)值賦值給臂長 和關節(jié)脈沖
  g_soframeinfo[0].m_flen1= *pParaList;
  g_soframeinfo[0].m_flen2= *(pParaList +1);
  g_soframeinfo[0].m_flen3= *(pParaList +2);
  g_soframeinfo[0].m_flen4= *(pParaList +3);
  //關節(jié)一圈脈沖
  g_soframeinfo[0].m_pulse1= 1000; //為了安全起見 demo故意設置 1
 g_soframeinfo[0].m_pulse2= 1000; //*(pParaList + 5);
  g_soframeinfo[0].m_pulse3= 1000;
  g_soframeinfo[0].m_pulse4= 1000;
  //...
  g_soframeinfo[0].m_pulsev=1000;
  for(i=0;im_pPrivate = (void*)&g_soframeinfo[0];
  //更新當前機械手姿態(tài)
  pframe->m_iHand =0;//具體用戶自己編寫計算機械手當前實際姿態(tài),姿態(tài)數(shù)值含義用戶自己定義,
  pf = (struct_userframeinfo *)pframe->m_pPrivate;
  if(NULL== pf)
  {
   return-1;
  }
  //打印輸出測試
  rtprintf("init %.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%dn",pf->m_flen1,pf->m_flen2,pf->m_flen3,pf->m_flen4,pf->m_pulse1,pf->m_pulse2,pf->m_pulse3,pf->m_pulse4,pf->m_pulsev,pframe->m_iHand);
  return0;
}

功能:frame正解

//關節(jié)坐標轉換世界坐標
//計算焊槍末端坐標
// 輸入:
//    pzmc	 控制器描述結構指針
//    pframe	 機械手基本狀態(tài)指針
//    pfJointPulsein	輸入關節(jié)脈沖坐標
// 輸出
//    pHand	  輸出當前姿態(tài)
//    pfWorldout輸出units單位世界坐標WPOS
// 返回值, 成功與否, 0-OK
********************************/
uint32SOFRAME_TRANS1000(struct_soZmcDisp *pzmc, struct_soFrameStatus* pframe, TYPE_FRAME*pfJointPulsein, int32 *pHand, TYPE_FRAME* pfWorldout)
{
  inti;
  doubleuj[6],pout[6];
  struct_userframeinfo *pf =NULL;
  pf = (struct_userframeinfo *)pframe->m_pPrivate;
  if(NULL== pf)
  {
   return-1;
  }
  //把輸入脈沖轉為角度
  uj[0] = *(pfJointPulsein +0) / pf->m_pulse1 ; //關節(jié)一 實時橫焊位置 度
  uj[1] = *(pfJointPulsein +1) / pf->m_pulse2 ; //關節(jié)二 實時高度位置 度
  uj[2] = *(pfJointPulsein +2) / pf->m_pulse3 ; //關節(jié)三 實時鐘擺角度 度
  uj[3] = *(pfJointPulsein +3) / pf->m_pulse4 ; //關節(jié)四 實時俯仰角度 度
  //轉弧度
  uj[0] = uj[0] /180* PI;
  uj[1] = uj[1] /180* PI;
  uj[2] = uj[2] /180* PI;
  uj[3] = uj[3] /180* PI;
  //正解過程......
  //計算姿態(tài),返回姿態(tài)
  *pHand =0;
  //demo 計算出世界坐標
  pout[0] =100;//x  mm
  pout[1] =100;//y  mm
  pout[2] =100;//z  mm
  pout[3] =90;//Rz 角度
  pfWorldout[0] = pout[0] ;
  pfWorldout[1] = pout[1] ;
  pfWorldout[2] = pout[2] ;
  pfWorldout[3] = pout[3] ;
  //打印輸出測試
  if(0== g_printflag)
  {
    rtprintf("trans input %.2f,%.2f,%.2f,%.2f, output ,%.2f,%.2f,%.2f,%.2fn",uj[0],uj[1],uj[2],uj[3],pfWorldout[0],pfWorldout[1],pfWorldout[2],pfWorldout[3]);
    g_printflag =1;
  }
  return0;
}

功能:frame逆解

//世界坐標轉換關節(jié)坐標
// 輸入:
//   pzmc	 控制器描述結構指針
//   pframe	 機械手基本狀態(tài)指針
//   pfWorldin	輸入世界坐標units單位
//   ihand	 輸入坐標對應姿態(tài), -1表示使用當前姿態(tài).
// 輸出:
//   pfJointPulseout	輸出關節(jié)脈沖坐標
// 返回值, 成功與否, 0-OK
********************************/
uint32SOFRAME_RETRANS1000(struct_soZmcDisp *pzmc, struct_soFrameStatus* pframe, TYPE_FRAME *pfWorldin, int32 ihand, TYPE_FRAME* pfJointPulseout)
{
  inti;
  doubleuw[6],pout[6];
  struct_userframeinfo *pf =NULL;
  pf = (struct_userframeinfo *)pframe->m_pPrivate;
  if(NULL== pf)
  {
   return-1;
  }
  //把世界坐標脈沖轉為mm和角度 pfWorldin 已經(jīng)是除以units的值了
  uw[0] = pfWorldin[0] ; // 位置 x  mm
  uw[1] = pfWorldin[1] ; // 位置 y  mm
  uw[2] = pfWorldin[2] ; // 位置 z  mm
  uw[3] = pfWorldin[3] ; // 位置 roll 弧度
  //轉弧度
  uw[3] = uw[3] /180*PI;
  //逆解過程......
  //計算出關節(jié)坐標
  pout[0] = uw[0];//關節(jié)1  角度
  pout[1] =60;//關節(jié)2  角度
  pout[2] =60;//關節(jié)3  角度
  pout[3] =30;//關節(jié)4  角度
  //demo 為了安全起見 不改變關節(jié)輸出
  pfJointPulseout[0] = pout[0] *1000;
  pfJointPulseout[1] = pout[1] *1000;
  pfJointPulseout[2] = pout[2] *1000;
  pfJointPulseout[3] = pout[3] *1000;
  //打印輸出測試
  if(1== g_printflag)
  {
    rtprintf("retrans input %.2f,%.2f,%.2f,%.2f, output ,%.2f,%.2f,%.2f,%.2fn",uw[0],uw[1],uw[2],uw[3],pfJointPulseout[0],pfJointPulseout[1],pfJointPulseout[2],pfJointPulseout[3]);
    g_printflag =0;
 }
 return0;
}

功能:自定義坐標旋轉函數(shù)DPOS轉換為WPOS

// 輸入:
//   pzmc	 控制器描述結構指針
//   pframe	 機械手基本狀態(tài)指針
//   pfRotate 坐標平移旋轉的參數(shù), 依次為XYZ,RX,RY,RZ
//   pfin 	 輸入虛擬軸坐標列表, units單位
// 輸出
//   pfout 	 輸出世界坐標列表, units單位
// 返回值, 成功與否, 0-OK
********************************/
uint32SOFRAME_ROTATETOWPOS1000(struct_soZmcDisp*pzmc, struct_soFrameStatus*pframe,TYPE_FRAME*pfRotate,TYPE_FRAME*pfin,TYPE_FRAME*pfout)
{
  int i;
  rtprintf("DPOS轉換為WPOS: %0.4f, %0.4f, %0.4fn",*(pfRotate),*(pfRotate+1),*(pfRotate+3));
  // 輸入的就是世界坐標系, 轉units坐標系
  for(i=0; im_iTotalAxisesNoAux; i++)
  {
    pfout[i]=pfin[i];
  }
  rtprintf("pfin %0.4f, %0.4f, %0.4fn",*(pfin),*(pfin+1),*(pfin+3));
  rtprintf("pfout %0.4f, %0.4f, %0.4fn",*(pfout),*(pfout+1),*(pfout+3));
  return0;
}

功能:自定義坐標旋轉函數(shù)WPOS轉換為DPOS

// 輸入:
//   pzmc	 控制器描述結構指針
//   pframe	 機械手基本狀態(tài)指針
//   pfRotate 坐標旋轉的參數(shù)
//   pfin 	 輸入世界坐標列表, units單位
// 輸出
//   pfout 	 輸出虛擬軸坐標列表, units單位
// 返回值, 成功與否,0-OK
uint32 SOFRAME_ROTATETODPOS1000(struct_soZmcDisp *pzmc, struct_soFrameStatus* pframe, TYPE_FRAME *pfRotate, TYPE_FRAME *pfin, TYPE_FRAME* pfout)
{
  inti;
  rtprintf("WPOS轉換為DPOS: %0.4f, %0.4f, %0.4fn",*(pfRotate),*(pfRotate +1),*(pfRotate +3));
  //輸入的就是世界坐標系, 轉units坐標系
  for(i=0; i< pframe-??>m_iTotalAxisesNoAux; i++)
  {
    pfout[i] = pfin[i];
  }
    rtprintf("pfin %0.4f, %0.4f, %0.4fn",*(pfin),*(pfin +1),*(pfin +3));
  rtprintf("pfout %0.4f, %0.4f, %0.4fn",*(pfout),*(pfout +1),*(pfout +3));
  return0;
}


Basic函數(shù)部分如下:
'''''電機、機械手參數(shù)定義
dim L1                
dim L2              
dim L3       
dim L4       
dim PulesVROneCircle  '虛擬姿態(tài)軸一圈脈沖數(shù)
'函數(shù)接口聲明 
DEFINE_CFRAME 1000,4,1,0,1000  'framenum, totalaxises, axises_aux, max_attitudes, rotatetype
'機械手參數(shù)設置
L1        =19.8736    '1軸到2軸的X偏移
L2        =455.1143   '大擺臂長度
L3        =39.8611    '3軸中心到4軸中心距離
L4        =430.9516   '4軸到5軸的距離。
PulesVROneCircle=360*1000
dim u_j1        '關節(jié)1實際一圈脈沖數(shù)
dim u_j2        '關節(jié)2實際一圈脈沖數(shù)
dim u_j3        '關節(jié)3實際一圈脈沖數(shù)
dim u_j4        '關節(jié)4實際一圈脈沖數(shù)
u_j1=360*1000      '關節(jié)1實際一圈脈沖數(shù)
u_j2=360*1000       '關節(jié)2實際一圈脈沖數(shù)
u_j3=360*1000        '關節(jié)3實際一圈脈沖數(shù)
u_j4=360*1000       '關節(jié)4實際一圈脈沖數(shù)
'''''關節(jié)軸設置
BASE(0,1,2,3)              '選擇關節(jié)軸號0、1、2、3
atype=0,0,0,0         '軸類型設為脈沖軸
UNITS=u_j1/360,u_j2/360,u_j3/360,u_j4/360'把units設成每°脈沖數(shù)
DPOS=0,0,0,0             '設置關節(jié)軸的位置,此處要根據(jù)實際情況來修改。
speed=100,100,100,100           '速度參數(shù)設置
accel=1000,1000,1000,1000
decel=1000,1000,1000,1000
'''''''''''''''''''''虛擬軸設置'''''''''''''''''''''
BASE(6,7,8,9)
ATYPE=0,0,0,0                      '設置為虛擬軸
TABLE(0,L1,L2,L3,L4,u_j1,u_j2,u_j3,u_j4,PulesVROneCircle)    '根據(jù)手冊說明填寫參數(shù)
speed=100,100,100,100            '速度參數(shù)設置
UNITS=1000,1000,1000,1000   '運動精度,要提前設置,中途不能變化
'''''''''''''''''''''建立機械手連接'''''''''''''''''''''
while 1
  if scan_event(in(0))0 then    '輸入0下降沿觸發(fā)
    BASE(6,7,8,3)                '選擇虛擬軸號
    CONNREFRAME(1000,0,0,1,2,3)         '啟動正解連接。
    WAIT LOADED                '等待運動加載。
    ?"正解模式"
  endif
wend
wKgZO2kB0M6AdUjTAAPk7mYg9qo581.png

該例子參數(shù)均為模擬,主要目的為介紹各函數(shù)接口使用方法。通過檢測輸入口0的狀態(tài)進行正逆解切換:輸入口0上升沿觸發(fā)時進入正解模式,輸入口0下降沿觸發(fā)時進入逆解模式。實際使用時根據(jù)機械手參數(shù)進行填寫。

機械手每次正逆解回調(diào)執(zhí)行都會執(zhí)行frame初始化函數(shù),從參數(shù)表中讀取機械手的臂長參數(shù),設置關節(jié)脈沖參數(shù)(示例中設為固定值1000),保存參數(shù)到全局結構體并關聯(lián)到機械手狀態(tài),設置初始機械手姿態(tài)為0,打印初始化參數(shù)用于調(diào)試。

進入正解模式:通過函數(shù)SOFRAME_TRANS1000,將輸入的關節(jié)脈沖值轉換為角度值,將角度值轉換為弧度值,執(zhí)行正解運動學計算(示例中除關節(jié)軸0其他直接返回固定值),設置輸出姿態(tài),將計算結果轉換為世界坐標系輸出,使用打印標志控制調(diào)試信息的輸出頻率。

進入逆解模式:通過函數(shù)SOFRAME_RETRANS1000,將輸入的世界坐標轉換為適當單位,執(zhí)行逆解運動學計算(示例中直接返回固定值),將計算結果轉換為關節(jié)脈沖值輸出,使用打印標志控制調(diào)試信息的輸出頻率。

注意事項:

1.函數(shù)命名必須遵循約定:SOFRAME_前綴+功能名+Frame編號。

2.確保正確處理單位轉換(脈沖?單位)。

3.逆解函數(shù)需要處理多種姿態(tài)情況(ihand參數(shù))。

4.自定義旋轉功能僅在rotatetype≥100時需要實現(xiàn)。

5.所有函數(shù)返回0表示成功,非0表示錯誤。

通過以上步驟,可以成功實現(xiàn)自定義機械手的CFRAME擴展功能。

需要更詳細的技術交流,請聯(lián)系正運動技術。

教學視頻可點擊→強實時運動控制內(nèi)核MotionRT750(九):內(nèi)置C語言的自定義機械手模型實現(xiàn)查看。

本次,正運動技術強實時運動控制內(nèi)核MotionRT750(九):內(nèi)置C語言的自定義機械手模型實現(xiàn),就分享到這里。

本文由正運動技術原創(chuàng),歡迎大家轉載,共同學習,一起提高中國智能制造水平。文章版權歸正運動技術所有,如有轉載請注明文章來源。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 運動控制器
    +關注

    關注

    2

    文章

    468

    瀏覽量

    25838
  • C語言
    +關注

    關注

    183

    文章

    7636

    瀏覽量

    144291
  • 運動控制
    +關注

    關注

    4

    文章

    781

    瀏覽量

    34197
  • 機械手
    +關注

    關注

    7

    文章

    356

    瀏覽量

    31005
  • 正運動技術
    +關注

    關注

    0

    文章

    130

    瀏覽量

    814
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    【正運動】高速高精,超高實時性的PCIe EtherCAT實時運動控制卡 | PCIE464

    軌跡的小線段前瞻,各種機器人與自定義機器人算法的控制,多種PSO控制等,滿足多樣化的工業(yè)應用需求。正運動提供自主自研IDE-RTSys開發(fā)編程軟件,PCIE464
    發(fā)表于 01-24 09:48

    實時運動控制內(nèi)核MotionRT750(一):CPU配置 #正運動技術 #運動控制 #正運動 #

    運動控制
    正運動技術
    發(fā)布于 :2025年07月03日 14:15:14

    實時運動控制內(nèi)核MotionRT750(一):驅動安裝 #正運動技術 #正運動 #運動控制 #

    運動控制
    正運動技術
    發(fā)布于 :2025年07月03日 14:16:07

    實時運動控制內(nèi)核MotionRT750(二):精密點膠的PSO應用#正運動技術 #運動控制 #

    運動控制
    正運動技術
    發(fā)布于 :2025年07月16日 10:05:49

    Windows實時運動控制軟核(一):LOCAL高速接口測試之C#

    Windows下運動控制實時內(nèi)核MotionRT7的安裝和c#接口的使用。
    的頭像 發(fā)表于 12-03 16:05 ?2429次閱讀
    Windows<b class='flag-5'>實時運動</b><b class='flag-5'>控制</b>軟核(一):LOCAL高速接口測試之<b class='flag-5'>C</b>#

    MotionRT7實時運動控制使用:LOCAL高速接口測試之C#

    運動控制程序、視覺算法、MotionRT7運動控制引擎,通過高共享內(nèi)存進行數(shù)據(jù)交互,大大提升運動
    發(fā)表于 12-14 10:19 ?941次閱讀

    自定義算子開發(fā)

    一個完整的自定義算子應用過程包括注冊算子、算子實現(xiàn)、含自定義算子模型轉換和運行含自定義op模型
    的頭像 發(fā)表于 04-07 16:11 ?4631次閱讀
    <b class='flag-5'>自定義</b>算子開發(fā)

    AWTK 開源串口屏開發(fā)(18) - 用 C 語言自定義命令

    編寫代碼即可實現(xiàn)常見的應用。但是,有時候我們需要自定義一些命令,以實現(xiàn)一些特殊的功能。本文檔介紹如何使用C語言
    的頭像 發(fā)表于 05-11 08:24 ?921次閱讀
    AWTK 開源串口屏開發(fā)(18) - 用 <b class='flag-5'>C</b> <b class='flag-5'>語言</b><b class='flag-5'>自定義</b>命令

    EtherCAT運動控制器PT/PVT實現(xiàn)用戶自定義軌跡規(guī)劃

    EtherCAT運動控制器PT/PVT實現(xiàn)用戶自定義軌跡規(guī)劃。
    的頭像 發(fā)表于 08-15 11:49 ?2117次閱讀
    EtherCAT<b class='flag-5'>運動</b><b class='flag-5'>控制</b>器PT/PVT<b class='flag-5'>實現(xiàn)</b>用戶<b class='flag-5'>自定義</b>軌跡規(guī)劃

    實時運動控制內(nèi)核MotionRT750(一):驅動安裝、內(nèi)核配置與使用

    實時運動控制內(nèi)核MotionRT750的驅動安裝與內(nèi)核配置
    的頭像 發(fā)表于 07-03 15:48 ?3271次閱讀
    <b class='flag-5'>強</b><b class='flag-5'>實時運動</b><b class='flag-5'>控制</b><b class='flag-5'>內(nèi)核</b><b class='flag-5'>MotionRT750</b>(一):驅動安裝、<b class='flag-5'>內(nèi)核</b>配置與使用

    實時運動控制內(nèi)核MotionRT750(四):高速貼裝應用中的拱形運動

    C#編程實現(xiàn)高速貼裝應用中的拱形運動
    的頭像 發(fā)表于 08-15 11:32 ?2381次閱讀
    <b class='flag-5'>強</b><b class='flag-5'>實時運動</b><b class='flag-5'>控制</b><b class='flag-5'>內(nèi)核</b><b class='flag-5'>MotionRT750</b>(四):高速貼裝應用中的拱形<b class='flag-5'>運動</b>

    實時運動控制內(nèi)核MotionRT750(六):us級高速交互之C++,為智能裝備提速

    Windows下運動控制實時內(nèi)核MotionRT750的高速交互之C++
    的頭像 發(fā)表于 09-04 14:50 ?370次閱讀
    <b class='flag-5'>強</b><b class='flag-5'>實時運動</b><b class='flag-5'>控制</b><b class='flag-5'>內(nèi)核</b><b class='flag-5'>MotionRT750</b>(六):us級高速交互之<b class='flag-5'>C</b>++,為智能裝備提速