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