<style id="7i3y3"></style>

      <sub id="7i3y3"><i id="7i3y3"></i></sub>

        午夜精品一区二区三区成人,中文字幕av一区二区,亚洲AVAV天堂AV在线网阿V,肥臀浪妇太爽了快点再快点,国产网友愉拍精品视频手机,国产精品无码a∨麻豆,久久中文字幕一区二区,a级国产乱理伦片在线观看al
        首頁 新聞 工控搜 論壇 廠商論壇 產(chǎn)品 方案 廠商 人才 文摘 下載 展覽
        中華工控網(wǎng)首頁
          P L C | 變頻器與傳動 | 傳感器 | 現(xiàn)場檢測儀表 | 工控軟件 | 人機界面 | 運動控制
          D C S | 工業(yè)以太網(wǎng) | 現(xiàn)場總線 | 顯示調(diào)節(jié)儀表 | 數(shù)據(jù)采集 | 數(shù)傳測控 | 工業(yè)安全
          電 源 | 嵌入式系統(tǒng) | PC based | 機柜箱體殼體 | 低壓電器 | 機器視覺
        強實時運動控制內(nèi)核MotionRT750(九):內(nèi)置C語言的自定義機械手模型實現(xiàn)
        深圳市正運動技術(shù)有限公司
        收藏本文     查看收藏

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

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

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

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

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

        強實時運動控制內(nèi)核MotionRT750匹配產(chǎn)品接線.png

        MotionRT750應(yīng)用優(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.擴(kuò)展能力強化:多卡多EtherCAT通道架構(gòu)支持254軸運動控制及500usEtherCAT周期。

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

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

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

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

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

        超實時EtherCAT運動控制卡XPCIE6032H

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

        超實時EtherCAT運動控制卡XPCIE6032H.png

        超實時EtherCAT運動控制卡XPCIE6032H接線圖.png



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

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

        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輸出。

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

        超實時EtherCAT運動控制卡XPCIE2032H

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

        超實時EtherCAT運動控制卡XPCIE2032H.png

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

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

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

        超實時EtherCAT運動控制卡XPCIE2032H槽位示意.png

        超實時EtherCAT運動控制卡XPCIE2032H接線圖.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輸出。

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

        超實時EtherCAT運動控制卡XPCIE1032H

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

        超實時EtherCAT運動控制卡XPCIE1032H.png

        超實時EtherCAT運動控制卡XPCIE1032H接線圖.png


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

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

        MotionRT7.png

        XPCIE1032H硬件特性:

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

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

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

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

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

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

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

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

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

        如何使用C語言與BASIC語言進(jìn)行配合

        C語言與BASIC語言配合.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)都進(jìn)行聲明調(diào)用。

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

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

        DEFINE_CFUNC -- 關(guān)鍵字

        DEFINE_CFUNC關(guān)鍵字.png

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

        舉例一

        C語言編程部分:

        int userc_init(void)
        {
            int* p=(int *)malloc(sizeof(int));
            p[0]=88;
            printf("p[0]=%d\n",p[0]);
            free(p);
            return 0;
        }
        float divf(float a,float b)
        {
            return (a/b);
        }
        TYPE_TABLE divd(TYPE_TABLE a,TYPE_TABLE b)
        {
            return (a/b);
        }

        BASIC編程部分:

        define_cfunc userc_init int userc_init(void)
        define_cfunc userc_divf float divf(float a,float b)
        define_cfunc userc_divd double divd(double a,double b)
        ?userc_init()
        ?userc_divf(23.1,1)
        ?userc_divd(23.3,1)

        舉例一.png

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

        舉例二

        C語言編程部分:

        int tablefunc(TYPE_TABLE *ptable,int inum)
        {
            int i;
            for(i=0;i<inum;i++)
            {
                //table數(shù)據(jù)直接修改
                ptable[i] += 1;
            }
            return 0;
        }

        BASIC編程部分:

        define_cfunc userc_tfunc int tablefunc(TYPE_TABLE *ptable,int inum)
        dim ptable(20)
        dim inum
        userc_tfunc(ptable,inum)

        舉例二.png

        注意事項:

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

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

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

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

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

        編譯平臺選擇參照

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

        編譯平臺選擇參照.png

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

        編譯平臺選擇.png

        C函數(shù)使用步驟

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

        步驟一.png

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

        步驟二.png

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

        步驟三.png

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

        步驟四.png

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

        步驟五.png

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

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

        步驟六.png

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

        步驟七.png

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

        簡單示例

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

        C語言:

        // 添加自定義函數(shù)聲明
        #include "zmcbuildin.h"
        double fast_sin() 
        {
            double sum = 0;
            for(int i=0; i<100000; i++){
                sum = sum + sin(i*0.01);
            }
            return sum;
        }

        2.BASIC綁定CFUNC

        Basic語言:

        DEFINE_CFUNC c_sin_calc double fat_sin()
        ```

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

        Basic語言:

        sum = c_sin_calc()

        簡單示例.png

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

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

        機械手模型.png

        機械手模型2.png

        機械手模型3.png

        機械手模型4.png

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

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

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

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

        功能:擴(kuò)展機械手frame類型

        擴(kuò)展機械手frame類型.png

        功能:frame初始化

        //機械手每次正逆解回調(diào)執(zhí)行,用戶可以初始化內(nèi)部變量
        // 輸入:
        //        pzmc	           控制器描述結(jié)構(gòu)指針
        //        pframe	       機械手基本狀態(tài)指針
        //        pParaList Table  參數(shù)列表
        // 返回值, 成功與否, 0-OK
        ********************************/
        uint32 SOFRAME_INIT1000(struct_soZmcDisp *pzmc,  struct_soFrameStatus* pframe, TYPE_TABLE* pParaList)
        {
            //初始化
            int16 i;
             //把connreframe的table數(shù)值賦值給臂長 和關(guān)節(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);
            //關(guān)節(jié)一圈脈沖
            g_soframeinfo[0].m_pulse1 =  1000;  //為了安全起見 demo故意設(shè)置 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];
            //更新當(dāng)前機械手姿態(tài)
            pframe->m_iHand = 0;//具體用戶自己編寫計算機械手當(dāng)前實際姿態(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,%d\n",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);
            return 0;
        }

        功能:frame正解

        //關(guān)節(jié)坐標(biāo)轉(zhuǎn)換世界坐標(biāo)
        //計算焊槍末端坐標(biāo)
        // 輸入:
        //        pzmc	  控制器描述結(jié)構(gòu)指針
        //        pframe	  機械手基本狀態(tài)指針
        //        pfJointPulsein	輸入關(guān)節(jié)脈沖坐標(biāo)
        // 輸出
        //        pHand	    輸出當(dāng)前姿態(tài)
        //        pfWorldout輸出units單位世界坐標(biāo)WPOS
        // 返回值, 成功與否, 0-OK 
        ********************************/
        uint32 SOFRAME_TRANS1000(struct_soZmcDisp *pzmc,  struct_soFrameStatus* pframe, TYPE_FRAME*pfJointPulsein, int32 *pHand, TYPE_FRAME* pfWorldout)
        {
            int i;
            double uj[6],pout[6];
            struct_userframeinfo  *pf =NULL;
            pf = (struct_userframeinfo *)pframe->m_pPrivate;
            if(NULL == pf)
            {
                return -1;
            }
            //把輸入脈沖轉(zhuǎn)為角度
            uj[0] = *(pfJointPulsein + 0) / pf->m_pulse1 ;  //關(guān)節(jié)一 實時橫焊位置  度
            uj[1] = *(pfJointPulsein + 1) / pf->m_pulse2 ;  //關(guān)節(jié)二 實時高度位置  度
            uj[2] = *(pfJointPulsein + 2) / pf->m_pulse3 ;  //關(guān)節(jié)三 實時鐘擺角度  度
            uj[3] = *(pfJointPulsein + 3) / pf->m_pulse4 ;  //關(guān)節(jié)四 實時俯仰角度  度
            //轉(zhuǎn)弧度
            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 計算出世界坐標(biāo)
            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,%.2f\n",uj[0],uj[1],uj[2],uj[3],pfWorldout[0],pfWorldout[1],pfWorldout[2],pfWorldout[3]);
                g_printflag = 1;
            }
            return 0;
        }

        功能:frame逆解

        //世界坐標(biāo)轉(zhuǎn)換關(guān)節(jié)坐標(biāo)
        // 輸入:
        //      pzmc	  控制器描述結(jié)構(gòu)指針
        //      pframe	  機械手基本狀態(tài)指針
        //      pfWorldin	輸入世界坐標(biāo)units單位
        //      ihand	  輸入坐標(biāo)對應(yīng)姿態(tài), -1表示使用當(dāng)前姿態(tài).
        // 輸出:
        //      pfJointPulseout	輸出關(guān)節(jié)脈沖坐標(biāo)
        // 返回值, 成功與否, 0-OK 
        ********************************/
        uint32 SOFRAME_RETRANS1000(struct_soZmcDisp *pzmc,  struct_soFrameStatus* pframe, TYPE_FRAME *pfWorldin, int32 ihand, TYPE_FRAME* pfJointPulseout)
        {
            int i;
            double uw[6],pout[6];
            struct_userframeinfo  *pf = NULL;
            pf = (struct_userframeinfo *)pframe->m_pPrivate;
            if(NULL == pf)
            {
                return -1;
            }
            //把世界坐標(biāo)脈沖轉(zhuǎn)為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 弧度
             //轉(zhuǎn)弧度
            uw[3] = uw[3] / 180 *PI;
             //逆解過程......
            //計算出關(guān)節(jié)坐標(biāo)
            pout[0] = uw[0]; //關(guān)節(jié)1   角度
            pout[1] = 60; //關(guān)節(jié)2   角度
            pout[2] = 60; //關(guān)節(jié)3   角度
            pout[3] = 30; //關(guān)節(jié)4   角度
            //demo 為了安全起見 不改變關(guān)節(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,%.2f\n",uw[0],uw[1],uw[2],uw[3],pfJointPulseout[0],pfJointPulseout[1],pfJointPulseout[2],pfJointPulseout[3]);
                g_printflag = 0;
             }
            return 0;
        }

        功能:自定義坐標(biāo)旋轉(zhuǎn)函數(shù)DPOS轉(zhuǎn)換為WPOS

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

        功能:自定義坐標(biāo)旋轉(zhuǎn)函數(shù)WPOS轉(zhuǎn)換為DPOS

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

        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ù)設(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                '關(guān)節(jié)1實際一圈脈沖數(shù)
        dim u_j2                '關(guān)節(jié)2實際一圈脈沖數(shù)
        dim u_j3                '關(guān)節(jié)3實際一圈脈沖數(shù)
        dim u_j4                '關(guān)節(jié)4實際一圈脈沖數(shù) 
        u_j1=360*1000            '關(guān)節(jié)1實際一圈脈沖數(shù)
        u_j2=360*1000                '關(guān)節(jié)2實際一圈脈沖數(shù)
        u_j3=360*1000                '關(guān)節(jié)3實際一圈脈沖數(shù)
        u_j4=360*1000                '關(guān)節(jié)4實際一圈脈沖數(shù) 
        '''''關(guān)節(jié)軸設(shè)置
        BASE(0,1,2,3)                             '選擇關(guān)節(jié)軸號0、1、2、3
        atype=0,0,0,0                  '軸類型設(shè)為脈沖軸
        UNITS = u_j1/360,u_j2/360,u_j3/360,u_j4/360  '把units設(shè)成每°脈沖數(shù)
        DPOS=0,0,0,0                          '設(shè)置關(guān)節(jié)軸的位置,此處要根據(jù)實際情況來修改。
        speed=100,100,100,100                        '速度參數(shù)設(shè)置
        accel=1000,1000,1000,1000
        decel=1000,1000,1000,1000
        '''''''''''''''''''''虛擬軸設(shè)置'''''''''''''''''''''
        BASE(6,7,8,9)
        ATYPE=0,0,0,0                                            '設(shè)置為虛擬軸
        TABLE(0,L1,L2,L3,L4,u_j1,u_j2,u_j3,u_j4,PulesVROneCircle)        '根據(jù)手冊說明填寫參數(shù)
        speed=100,100,100,100                        '速度參數(shù)設(shè)置
        UNITS=1000,1000,1000,1000       '運動精度,要提前設(shè)置,中途不能變化
        '''''''''''''''''''''建立機械手連接'''''''''''''''''''''
        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

        運行測試效果.png

        運行測試效果

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

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

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

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

        注意事項:

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

        2.確保正確處理單位轉(zhuǎn)換(脈沖↔單位)。

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

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

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

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

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

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

        二維碼.png

        正運動技術(shù)專注于運動控制技術(shù)研究和通用運動控制軟硬件產(chǎn)品的研發(fā),是國家級高新技術(shù)企業(yè)。正運動技術(shù)匯集了來自華為、中興等公司的優(yōu)秀人才,在堅持自主創(chuàng)新的同時,積極聯(lián)合各大高校協(xié)同運動控制基礎(chǔ)技術(shù)的研究,是國內(nèi)工控領(lǐng)域發(fā)展最快的企業(yè)之一,也是國內(nèi)少有、完整掌握運動控制核心技術(shù)和實時工控軟件平臺技術(shù)的企業(yè)。主要業(yè)務(wù)有:運動控制卡_運動控制器_EtherCAT運動控制卡_EtherCAT控制器_運動控制系統(tǒng)_視覺控制器__運動控制PLC_運動控制_機器人控制器_視覺定位_XPCIe/XPCI系列運動控制卡等等。


         

        狀 態(tài): 離線

        公司簡介
        產(chǎn)品目錄

        公司名稱: 深圳市正運動技術(shù)有限公司
        聯(lián) 系 人: 戴德弟
        電  話: 0755-32976042
        傳  真: 0755-2606 6955
        地  址: 深圳市寶安區(qū)西鄉(xiāng)洲石路陽光工業(yè)園A1棟5樓
        郵  編: 518100
        主  頁:
         
        該廠商相關(guān)技術(shù)文摘:
        強實時運動控制內(nèi)核MotionRT750(十):運動控制中的微調(diào)軌跡動態(tài)補償
        機器視覺運動控制一體機在大功率共模電感多面AI外觀缺陷檢測應(yīng)用
        MotionRT750 SoftMotion:XPCIE1032H超高速運動控制卡在AOI檢測設(shè)備上的應(yīng)用
        NEPCON ASIA 2025:解鎖行業(yè)新機遇,我們在深圳等您
        開放式激光振鏡運動控制器在旋轉(zhuǎn)飛行打標(biāo)中的應(yīng)用
        強實時運動控制內(nèi)核MotionRT750(八):us級高速交互之LabVIEW,為智能裝備提速
        液態(tài)點膠密封解決方案,柔性升級,密封更可靠!
        柔性機械手視覺供料解決方案,提升無序分揀效率!
        【2025上海工博會】正運動展位智造未來(二)
        【2025上海工博會】正運動展位智造未來(一)
        【2025上海工博會】機器視覺運動控制一體機應(yīng)用預(yù)覽(三)
        更多文摘...
        立即發(fā)送詢問信息在線聯(lián)系該技術(shù)文摘廠商:
        用戶名: 密碼: 免費注冊為中華工控網(wǎng)會員
        請留下您的有效聯(lián)系方式,以方便我們及時與您聯(lián)絡(luò)

        關(guān)于我們 | 聯(lián)系我們 | 廣告服務(wù) | 本站動態(tài) | 友情鏈接 | 法律聲明 | 不良信息舉報
        工控網(wǎng)客服熱線:0755-86369299
        版權(quán)所有 中華工控網(wǎng) Copyright©2022 Gkong.com, All Rights Reserved

        主站蜘蛛池模板: 18禁免费无码无遮挡网站| 青青青爽在线视频观看| 午夜国产理论大片高清| 国产中文字幕精品在线| 一本精品中文字幕在线| 麻豆精品久久久久久久99蜜桃| 在线无码免费看黄网站| 免费可以在线看a∨网站| 亚洲精品成人7777在线观看| 日韩在线永久免费播放| 久久 午夜福利 张柏芝| 国产在线观看网址不卡一区| 久久人妻国产精品| 日本无人区一区二区三区| 国产成人8X人网站视频| 少女韩国在线观看完整版免费| 大陆一级毛片免费播放| 久久青草精品A片狠狠来| 久久精品国产亚洲av天海翼| 国产精品无码不卡在线播放 | 精品熟女少妇免费久久| 天天综合网色中文字幕| WWW夜插内射视频网站| 国产精品天堂蜜av在线播放| 亚洲中文一区二区av| 麻豆国产高清精品国在线| 免费现黄频在线观看国产| 乱人伦中文视频在线| 久久久一本精品99久久精品88| 777米奇色狠狠888俺也去乱| 天天做天天爱夜夜夜爽毛片| 午夜精品福利一区二区三| 亚洲欧美人成网站在线观看看| 久久精品国产亚洲AV成人毛片| 欧美疯狂xxxxbbbb牲交| 120秒试看无码体验区| 欧美色欧美亚洲高清在线观看| 久久99日本免费国产精品| 欧美日韩精品一区二区三区高清视频 | 欧美国产日本高清不卡| 成人国产精品中文字幕|