應(yīng)用背景
運(yùn)動(dòng)控制器正朝著高速度、高精度、開放式的方向發(fā)展,不僅對(duì)運(yùn)動(dòng)控制功能精益求精,還增加了視覺相關(guān)的定位、測(cè)量、檢測(cè)和識(shí)別等,多種功能的穿插使用進(jìn)一步增加了在編程設(shè)計(jì)代碼時(shí)的復(fù)雜程度。
為了給客戶提供更好地軟件框架,簡(jiǎn)化程序結(jié)構(gòu)、節(jié)省內(nèi)存空間、提高代碼可讀性。
正運(yùn)動(dòng)技術(shù)在VPLC532E機(jī)器視覺運(yùn)動(dòng)控制一體機(jī)上增加了結(jié)構(gòu)體功能,方便客戶在大型項(xiàng)目上更高效的進(jìn)行項(xiàng)目開發(fā)。
VPLC532E是正運(yùn)動(dòng)推出的一款EtherCAT視覺總線控制器,控制器集成了2個(gè)千兆以太網(wǎng)以及2個(gè)USB3.0、2個(gè)USB2.0接口,支持多種工業(yè)相機(jī),支持多種視覺功能和復(fù)雜的運(yùn)動(dòng)控制功能。
VPLC532E硬件介紹
1.集成RS232、RS485、CAN接口、2路USB3.0、2路USB2.0接口。
2.2路千兆EtherNet、1路百兆EtherCAT、6個(gè)本地軸接口。
3.24進(jìn)12出數(shù)字IO,其中4路高速輸出,4路高速輸入、2路模擬量輸出。
4.支持市場(chǎng)主流的USB3.0相機(jī)與GigE相機(jī)。
VPLC532E功能介紹
1.支持最多達(dá)32軸直線插補(bǔ)、任意空間圓弧插補(bǔ)、螺旋插補(bǔ)、樣條插補(bǔ)。 2.支持電子凸輪、電子齒輪、位置鎖存、同步跟隨、虛擬軸等功能。 3.支持硬件比較輸出(HW_PSWITCH2),硬件定時(shí)器,運(yùn)動(dòng)中精準(zhǔn)輸出。 4.支持脈沖閉環(huán),螺距補(bǔ)償?shù)裙δ堋?5.支持ZBasic多文件多任務(wù)編程。 6.多種程序加密手段,保護(hù)客戶的知識(shí)產(chǎn)權(quán)。 7.掉電檢測(cè),掉電存儲(chǔ)。 ? ? ? 實(shí)現(xiàn)指令 ? ? 1.STRUCTURE --?結(jié)構(gòu)體定義 Structure?結(jié)構(gòu)名稱 ???????Dim?成員1名稱?[As數(shù)據(jù)類型1] ???????...?... ???????Dim?成員n名稱[(數(shù)組長(zhǎng)度)]?[As數(shù)據(jù)類型1] End Structure
2.FLASH_WRITEDBL?-- flash存儲(chǔ)-double
FLASH_WRITEDBL sect_num [, varname] [, arrayname] [, arrayname(a)] [, arrayname(a,length)]
sect_num:flash塊編號(hào),不同類型不一樣。
varname:變量名。
arrayname:數(shù)組名,可以為TABLE,VR,MODBUS。
a:操作的數(shù)組索引。
length:操作的數(shù)組元素個(gè)數(shù)。
結(jié)構(gòu)體應(yīng)用例程 ? ? 該例程主要是對(duì)三軸的機(jī)械參數(shù)和配方文件以結(jié)構(gòu)體框架來實(shí)現(xiàn),通過結(jié)構(gòu)體變量嵌套使用來減少變量,降低內(nèi)存占用,提高代碼的可復(fù)用性。
1.創(chuàng)建結(jié)構(gòu)體變量
GLOBAL?SUB?HMI_INIT() GLOBAL gv_CurParamNum '當(dāng)前配方號(hào) gv_CurParamNum=0 GLOBAL gv_PageNum '頁(yè)碼 gv_PageNum=0 GLOBAL?CONST?gv_SysMaxAxis=3??'最大軸數(shù) GLOBAL STRUCTURE AxisParam '''軸參數(shù) ????????DIM?No????????'軸號(hào) ????????DIM?AxisAtype????'軸類型 ????????DIM?AxisDpos????'軸的當(dāng)前位置 ????????DIM?OnePulses????'軸電機(jī)一圈脈沖數(shù) ????????DIM?AxisPitch????'軸螺距 ????????DIM?AxisSpeed????'軸的運(yùn)動(dòng)速度 ????????DIM?AxisAccel????'軸的加速度 ????????DIM?AxisDecel????'軸的減速度 ????????DIM?AxisSramp????'軸的S曲線時(shí)間 ????????DIM?AxisLspeed????'軸的起始速度 ????????DIM?FsLimit??????'軸正限位 ????????DIM?RsLimit??????'軸負(fù)限位 ????????'''回零參數(shù) ????????DIM?DatumMode????'軸回零模式 ????????DIM?BackZeroSpeed??'軸的回零速度 ????????DIM?AxisCreep????'軸的回零第2段速度 ????????DIM?DatumIn??????'軸原點(diǎn)信號(hào) ????????DIM?FwdIn??????'軸正限位信號(hào) ????????DIM?RevIn??????'軸負(fù)限位信號(hào) END?STRUCTURE GLOBAL?STRUCTURE?SysParam DIM SysAxis(gv_SysMaxAxis) AS AxisParam '系統(tǒng)軸數(shù) DIM?FileName(50)??????????????'參數(shù)文件名 END?STRUCTURE GLOBAL?gs_SysParam(50)?AS?SysParam????'定義系統(tǒng)結(jié)構(gòu)體變量 LOCAL lv_i FOR lv_i=0 to gv_SysMaxAxis-1 ????????'初始化軸參數(shù)變量 ????????gs_SysParam(0).SysAxis(lv_i).No=lv_i ????????gs_SysParam(0).SysAxis(lv_i).AxisAtype=0??????????'軸類型 ????????gs_SysParam(0).SysAxis(lv_i).OnePulses=8388608????????'軸電機(jī)一圈脈沖數(shù) ????????gs_SysParam(0).SysAxis(lv_i).AxisPitch=20??????????'軸螺距 ????????gs_SysParam(0).SysAxis(lv_i).AxisSpeed=100??????????'軸的運(yùn)動(dòng)速度 ????????gs_SysParam(0).SysAxis(lv_i).AxisAccel=1000??????????'軸的加速度 ????????gs_SysParam(0).SysAxis(lv_i).AxisDecel=1000??????????'軸的減速度 ????????gs_SysParam(0).SysAxis(lv_i).AxisSramp=0??????????'軸的S曲線時(shí)間 ????????gs_SysParam(0).SysAxis(lv_i).AxisLspeed=0??????????'軸的起始速度 ????????'初始化回零參數(shù)變量 ????????gs_SysParam(0).SysAxis(lv_i).DatumMode=104??????????'軸的回零模式 ????????gs_SysParam(0).SysAxis(lv_i).BackZeroSpeed=50????????'軸的回零速度 ????????gs_SysParam(0).SysAxis(lv_i).AxisCreep=2??????????'軸的回零第2段速度 ????????gs_SysParam(0).SysAxis(lv_i).DatumIn=-1????????????'軸的回零信號(hào) ????????gs_SysParam(0).SysAxis(lv_i).FwdIn=-1????????????'軸的正向硬限位信號(hào) ????????gs_SysParam(0).SysAxis(lv_i).RevIn=-1????????????'軸的負(fù)向硬限位信號(hào) ????????gs_SysParam(0).SysAxis(lv_i).FsLimit=1000??????????'軸正限位 ????????gs_SysParam(0).SysAxis(lv_i).RsLimit=-1000??????????'軸負(fù)限位 ????????'初始化參數(shù)文件 ????????gs_SysParam(0).FileName="NONE"????????????????'初始化參數(shù)文件名 NEXT FOR lv_i=0 to 49 gs_SysParam(lv_i)=gs_SysParam(0) '初始化其他配方參數(shù) NEXT ENDSUB2.保存配置文件
GLOBAL?SUB?SaveCurParam() LOCAL iflsflag iflsflag=70214733 FLASH_WRITEDBL gv_CurParamNum,iflsflag,gs_SysParam(gv_CurParamNum) ?"下載成功" ENDSUB
3.讀取配置文件
GLOBAL?SUB?LoadCurParam() LOCAL iflsflag,lv_i,addnum FOR lv_i=0 TO 49 iflsflag=0 FLASH_READDBL lv_i,iflsflag IF iflsflag=70214733 THEN ????????????FLASH_READ2DBL?lv_i,1,gs_SysParam(lv_i) ????????????addnum=addnum+1 ENDIF NEXT ?"上傳完成,上傳配置文件數(shù):"addnum ENDSUB
4.刪除配置文件
GLOBAL?SUB?DeleCurParam() LOCAL lv_i FOR lv_i=0 to gv_SysMaxAxis-1 '初始化軸參數(shù)變量 gs_SysParam(gv_CurParamNum).SysAxis(lv_i).No=lv_i ????????gs_SysParam(gv_CurParamNum).SysAxis(lv_i).AxisAtype=0????????'軸類型 ????????gs_SysParam(gv_CurParamNum).SysAxis(lv_i).OnePulses=8388608????'軸電機(jī)一圈脈沖數(shù) ????????gs_SysParam(gv_CurParamNum).SysAxis(lv_i).AxisPitch=20????????'軸螺距 ????????gs_SysParam(gv_CurParamNum).SysAxis(lv_i).AxisSpeed=100??????'軸的運(yùn)動(dòng)速度 ????????gs_SysParam(gv_CurParamNum).SysAxis(lv_i).AxisAccel=1000??????'軸的加速度 ????????gs_SysParam(gv_CurParamNum).SysAxis(lv_i).AxisDecel=1000??????'軸的減速度 ????????gs_SysParam(gv_CurParamNum).SysAxis(lv_i).AxisSramp=0????????'軸的S曲線時(shí)間 ????????gs_SysParam(gv_CurParamNum).SysAxis(lv_i).AxisLspeed=0????????'軸的起始速度 ????????'初始化回零參數(shù)變量 ????????gs_SysParam(gv_CurParamNum).SysAxis(lv_i).DatumMode=104??????'軸的回零模式 ????????gs_SysParam(gv_CurParamNum).SysAxis(lv_i).BackZeroSpeed=50??????'軸的回零速度 ????????gs_SysParam(gv_CurParamNum).SysAxis(lv_i).AxisCreep=2????????'軸的回零第2段速度 ????????gs_SysParam(gv_CurParamNum).SysAxis(lv_i).DatumIn=-1????????'軸的回零信號(hào) ????????gs_SysParam(gv_CurParamNum).SysAxis(lv_i).FwdIn=-1??????????'軸的正向硬限位信號(hào) ????????gs_SysParam(gv_CurParamNum).SysAxis(lv_i).RevIn=-1??????????'軸的負(fù)向硬限位信號(hào) ????????gs_SysParam(gv_CurParamNum).SysAxis(lv_i).FsLimit=1000????????'軸正限位 ????????gs_SysParam(gv_CurParamNum).SysAxis(lv_i).RsLimit=-1000??????'軸負(fù)限位 ????????'初始化參數(shù)文件 ????????gs_SysParam(gv_CurParamNum).FileName="NONE"????????????'初始化參數(shù)文件名 NEXT LOCAL iflsflag iflsflag=0 FLASH_WRITEDBL gv_CurParamNum,iflsflag,gs_SysParam(gv_CurParamNum) ?"刪除成功" ENDSUB?編輯:黃飛
?
評(píng)論
查看更多