一、XPLC006E功能簡介
XPLC006E是正運動運動控制器推出的一款多軸經濟型EtherCAT總線運動控制器,XPLC系列運動控制器可應用于各種需要脫機或聯機運行的場合。
XPLC006E自帶6個電機軸,最多12軸運動控制(含虛擬軸數),支持12軸直線插補、電子凸輪、電子齒輪、同步跟隨、虛擬軸設置等功能。
XPLC006E支持多任務同時運行,同時可以在PC上直接仿真運行,編程方式多種可選,支持ZDevelop軟件的Basic/PLC梯形圖/HMI組態和常用上位機軟件編程。
XPLC006E只支持EtherCAT總線軸,不支持脈沖軸和編碼器軸。采用EtherCAT總線與驅動器通訊,1ms的刷新周期。
XPLC006E支持PLC、Basic、HMI組態三種編程方式。PC上位機API編程支持C#、C++、LabVIEW、VB、matlab、Qt、Linux、.Net、iMAC、Python、 ROS等接口。
→此款產品有XPLC004E、XPLC006E、XPLC008E三個不同軸數的型號可選。
二、XPLC864E功能簡介
XPLC864E在XPLC006E的功能基礎上做了升級(即上節介紹的XPLC006E的功能都支持),部分資源空間優于XPLC006E,使用方法基本一致,不同之處在于XPLC864E,硬件支持32點輸入、32點輸出、2個ADC、2個DAC,支持脈沖軸和總線軸混合使用,總實軸軸數為8,除了帶EtherCAT接口之外,輸出口硬件上可配置為8個軸的脈沖方向信號輸出,另帶兩路編碼器輸入,可由輸入口配置
XPLC864E支持PLC、Basic、HMI組態三種編程方式。PC上位機API編程支持C#、C++、LabVIEW、VB、matlab、Qt、Linux、.Net、iMAC、Python、 ROS等接口。
XPLC系列經濟型EtherCAT總線運動控制器支持多種編程方式,支持使用正運動技術自主研發的ZDevelop開發環境的Basic語言和PLC梯形圖,上一節講解了多任務運行的優勢,本節內容主要講解控制器的數據存儲。
數據存儲可以利用控制器自帶的寄存器和自定義參數。控制器寄存器主要有TABLE、MODBUS、VR寄存器,提供FLASH塊存儲,寄存器特點與使用方法參見下文。
將ZDevelop軟件與控制器連接后,可通過ZDevelop軟件“控制器”-“控制器狀態”查看該控制器各寄存器的空間大小,也可以通過在線命令和輸出窗口輸入“?*max”來查看各寄存器的數量,不同的控制器存儲空間大小不同。
三、TABLE寄存器
TABLE是控制器自帶的一個超大數組,數據類型為32位浮點型(4系列及以上為64位浮點數),掉電不保存。編寫程序時,TABLE數組不需要再定義,可直接使用,索引下標從0開始,支持批量賦值和批量讀取。
ZBasic的某些指令可以直接讀取TABLE內的值作為參數,比如CAM,CAMBOX,CONNFRAME,CONNREFRAME,MOVE_TURNABS,B_SPLINE,CAN,CRC16,DTSMOOTH,PITCHSET,HW_PSWITCH等指令。
示波器不開啟連續采樣的參數也存儲在TABLE里(開啟連續采樣之后與TABLE無關)。因此在開發應用中要注意多個TABLE區域的分配與使用,不要與示波器采樣的數據存儲區域重合。
1.TABLE指令讀寫數據。
TABLE(0) = 10 'TABLE(0)賦值10TABLE(10,100,200,300) '批量賦值,TABLE(10)賦值100,TABLE(11)賦值200,TABLE(12)賦值300
2.TSIZE指令可讀取TABLE空間大小,還可修改TABLE空間大小(不能超出TABLE最大空間)。
PRINT TSIZE '打印出控制器TABLE大小TSIZE=10000 '設置TABLE的大小,不能超過控制器TABLE最大SIZE
3.TABLESTRING指令按照字符串格式打印TABLE里的數據。
TABLE(100,68,58,92)PRINT TABLESTRING(100,3) '字符串格式打印數據,轉換為ASCII碼
→打印結果:D:\
4.TABLE作為參數傳遞時用法大致相同,先將數據存儲到TABLE,再使用指令調用TABLE的數據。
(1)以CAM凸輪指令為例
CAM(start point, end point, table multiplier, distance)
start point:起始點TABLE編號,存儲第一個點的位置
end point:結束點TABLE編號
table multiplier:位置乘以這個比例,一般設為脈沖當量值
distance:參考運動的距離
(2)電子凸輪使用方法示例
TABLE(10,0,80,75,40,50,20,50,30,65,0) 'TABLE從10開始存數據,TABLE(10)賦值0,TABLE(11)賦值80CAM(10,17,100,500) '運動軌跡為TABLE(10)到TABLE(17)
(3)查看TABLE內數據的方式有2種
第一種:在在線命令行輸入?*TABLE(10,8)查詢TABLE(10)開始,依次8個數據。
第二種:在寄存器中查看DT(TABLE)數據,起始編號從10開始,個數8個。
四、MODBUS寄存器
MODBUS寄存器符合MODBUS標準通訊協議,分為位寄存器和字寄存器兩類,支持MODBUS標準協議的第三方設備都能與控制器通訊,數據通過MODBUS寄存器傳遞。(MODBUS寄存器的數據掉電不保存,支持批量寫入和讀取)
⊙位寄存器:MODBUS_BIT,觸摸屏一般稱為MODBUS_0X,布爾型。
⊙字寄存器:MODBUS_REG、MODBUS_LONG、MODBUS_IEEE、MODBUS_STRING,觸摸屏一般叫MODBUS_4X,類型如下圖。
控制器中MODBUS字寄存器占用同一個變量空間,其中一個LONG占用兩個REG地址,一個IEEE也占用兩個REG地址,使用時要注意錯開字寄存器編號地址。
⊙MODBUS_LONG(0)占用MODBUS_REG(0)與MODBUS_REG(1)兩個REG地址。
⊙MODBUS_LONG(1)占用MODBUS_REG(1)與MODBUS_REG(2)兩個REG地址。
⊙MODBUS_IEEE(0)占用MODBUS_REG(0)與MODBUS_REG(1)兩個REG地址。
⊙MODBUS_IEEE(1)占用MODBUS_REG(1)與MODBUS_REG(2)兩個REG地址。
所以要注意MODBUS_REG,MODBUS_LONG,MODBUS_IEEE地址在用戶應用程序中不能重疊。4X空間示意圖如下圖所示:
例程:
MODBUS_REG(0)=0 '初始化置0MODBUS_REG(1)=0 '初始化置0MODBUS_LONG(0)=70000 'modbus_long賦值70000,modbus_reg范圍-32768~32767?MODBUS_REG(0),MODBUS_REG(1)'打印出reg(0)為4464,reg(1)為1,long(0)=reg(1)*2^16+reg(0)
在串口設置(SETCOM參數)過程中,寄存器選擇為VR時,此時一個VR映射到一個MODBUS_REG,其中VR是32位浮點型,MODBUS_REG是16位有符號整數型,從VR傳遞數據給MODBUS_REG會丟失小數部分,當VR數據超過正負15位時,MODBUS_REG數據會改變;MODBUS_REG傳遞數據給VR不會有問題,見如下例程,更多信息參見SETCOM指令。
例程:
VR(0)=0 '初始化VR(0)和MODBUS_REG(0)為0MODBUS_REG(0)=0SETCOM(38400, 8,1,0,0,4,0) '設置VR映射到MODBUS_REGVR(0)=100.345 '設置VR(0)=100.345?MODBUS_REG(0) '打印結果為100,VR已經映射到REG,但是REG是整型,所以小數部分丟失MODBUS_REG(0)=200 'REG(0)設為200?VR(0) '打印結果為200,REG變化也會改變VR
當使用MODBUS協議與其他設備通訊時,就需要將數據放在MODBUS寄存器內進行傳遞,比如與觸摸屏通訊。不進行MODBUS通訊時,亦可將MODBUS寄存器作為控制器本地數組使用。
控制器直接從MODBUS_BIT地址10000開始與輸入IN口對應,20000與輸出OUT口對應(注意讀取的IO是原始的狀態,INVERT_IN反轉輸入指令不起作用),30000與PLC編程的S寄存器對應。
MODBUS_IEEE地址10000開始對應軸DPOS區間,11000開始對應軸MPOS區間,12000開始對應軸VP_SPEED區間;MODBUS_REG的13000開始對應模擬量DA輸出區間,14000開始對應模擬量AD輸入區間。
MODBUS_BIT地址
意義
0~7999
用戶自定義使用
8000~8099
PLC編程的特殊M寄存器
8100~8199
軸0-99的IDLE標志
8200~8299
軸0-99的BUFFER剩余標志
10000~14095
對應輸入IN口
20000~24095
對應輸出OUT口
30000~34095
對應PLC編程的S寄存器
MODBUS字寄存器地址
意義
0~7999
用戶自定義使用,可混用MODBUS_REG、MODBUS_IEEE、MODBUS_LONG
8000~8099
PLC編程的特殊D寄存器
10000~10198
對應各軸DPOS,讀寫用MODBUS_IEEE
11000~11198
對應各軸MPOS,讀寫用MODBUS_IEEE
12000~12198
對應各軸VPSPEED,讀用MODBUS_IEEE
13000~13127
模擬量輸出AOUT,讀寫用MODBUS_REG
14000~14255
模擬量輸入AIN,讀用MODBUS_REG
五、VR寄存器
VR寄存器具有掉電存儲功能,可無限次讀寫,但數據空間較小,XPLC006E系列控制器有1024個地址,最新系列控制器的VR空間為8000,用于保存需要不斷修改的數據,例如軸參數、坐標等,數據類型為32位浮點型。(4系列及以上為64位浮點數)
可使用VR_INT強制保存為整型,VRSTRING強制保存為字符串。VR、VR_INT、VRSTRING共用一個空間,地址空間是重疊的,VR和VR_INT讀寫方法相同,VRSTRING保存ASCII碼,一個字符占用一個VR。
VR的掉電保存原理是控制器內部有缺電存儲器,但數據容量較小,所以數據量較大的或需要長久保存的數據最好寫到FLASH塊或導出到U盤。
VR寄存器還可用于RTEX控制器傳遞讀寫數據,DRIVE_WRITE參數寫入,DRIVE_READ參數讀取,具體使用方法參見第十六章總線相關的RTEX總線指令。
使用CLEAR指令清除VR內的全部數據,CLEAR_BIT指令將VR某個位置0,READ_BIT指令讀取VR寄存器的某個位數據,SET_BIT指令將VR某個位置1。
例一:VR使用方法
VR(0) = 10.58 '賦值aaa = VR(0) '讀取
例二:VR寄存器數據相互轉換
VR(100)=10.12VR_INT(100)=VR(100) '數據轉換?VR_INT(100) '打印結果:10,浮點數轉換成整數,丟失小數位
例三:VRSTRING存儲字符串
VRSTRING(0,4) = "abc" '從VR(0)開始保存字符串PRINT VRSTRING(0,4) '打印結果:abc
六、FLASH寄存器
嚴格來講,FLASH不是寄存器,但它與寄存器密切相關,用于存儲重要數據。
FLASH具有掉電存儲功能,讀寫次數限制為十萬次,長期不上電也不會丟失數據。一般用于存放較大的,不需要頻繁讀寫的數據,比如加工的工藝文件。
讀與寫時要注意保證要操作的變量,數組等名稱和次序高度一致,如果不一致會導致數據錯亂。
FLASH使用時是按塊編號,使用按塊存儲變量或數組等數據,讀取同樣需要按塊讀取,塊數FLASH_SECTES指令查看,不同的控制器FLASH塊數與塊數據大小都不同,每塊的大小FLASH_SECTSIZE指令查看。
可以在在線命令行查看,某個型號控制器的存儲空間查看如下圖,顯示的是FLASH塊數和FLASH總空間大小。
→CAN通訊設置的參數,IP地址、APP_PASS、LOCK密碼等系統參數存儲到FLASH。
注意:FLASH在讀取之前先要寫入,否則會提示警報WARN。
FLASH使用方法:
GLOBAL VAR '變量定義GLOBAL ARRAY1(200) '數組定義DIM ARRAY2(100)
⊙數據存儲到FLASH塊:把VAR,ARRAY1,ARRAY2數據依次寫入FLASH塊1
FLASH_WRITE 1,VAR,ARRAY1,ARRAY2
⊙FLASH塊數據讀取:把FLASH塊1的數據依次讀入VAR,ARRAY1,ARRAY2
FLASH_READ 1,VAR,ARRAY1,ARRAY2 '讀取次序與寫入次序一致
七、自定義參數
1.變量定義
變量是用戶可以自定義的參數,變量用于暫時保存與外部設備的通信數據或任務內部處理需要的數據,換言之,它是用于保存帶名稱和數據類型等屬性的數據,無需指定變量與存儲器地址之間的分配。
變量定義指令:分為全局變量(GLOBAL)、文件模塊變量(DIM)、局部變量(LOCAL)三種,使用不同的指令定義的變量作用范圍不同,范圍說明如下。
⊙全局變量(GLOBAL):可以在項目內的任意文件中使用。
⊙文件模塊變量(DIM):只能在本程序文件內部使用。
⊙局部變量(LOCAL):主要用在SUB中,其他文件無法使用。
變量可以不經過定義直接賦值,此時的變量默認為文件模塊變量,變量的定義語句需要寫在程序開頭,保證上電后先執行,否者可能會發生變量無法正常使用的現象。
示例:
GLOBAL g_var2 '定義全局變量g_var2 DIM VAR1 '定義文件變量VAR1SUB aaa LOCAL v1 '定義局部變量V1 v1=100ENDSUB
2.常量定義
變量的值因代入該變量的數據而異。與之相對的固定不變的值為常數,常量的值一經定義不能再修改,只可讀取。
CONST定義常量,一次只能定義一個,且定義與賦值必須在一行。常量可定義為全局常量GLOBAL CONST,全局常量可以在任意文件中使用,不存在LOCAL CONST的寫法。常數與變量不同,不是保存在存儲器中的信息。
示例:
CONST MAX_VALUE = 100000 '定義文件常量GLOBAL CONST MAX_AXIS=6 '定義全局常量
3.數組定義
數組指定是指將相同屬性的數據集中后對其進行統一定義,并對數據個數進行指定。構成數組的各數據稱為“元素”。
數組定義相關指令為GLOBAL、DIM,不支持LOCAL定義。數組定義時注意數組空間大小的指定,不能使用超出定義范圍的空間,否則程序報錯數組空間超限。
示例:
DIM array1(15) '定義文件數組,可使用的數組空間編號為0~14,共15個空間GLOBAL array2(10) '定義全局數組,可使用的數組空間編號為0~9,共10個空間
八、數據類型
數據類型是指對變量或寄存器表示的值的形式和范圍進行特定的規定。聲明該變量時,數據類型的大小根據存儲器內的數據范圍大小而定,存儲器內的數據范圍越大,可表示的值的范圍就越大。(指令的輸入或輸出變量的數據類型由指令確定)
自定義變量的數據類型屬于動態類型,將整數賦值給變量時,變量就是整型;將浮點數賦值給變量,變量就是浮點型。
自定義數組的數據類型分為單精度浮點數和雙精度浮點數,參照下文浮點數相關說明。
1.單精度浮點數32位,如下圖所示。
數據格式屬于單精度浮點數的有:VR、MODBUS_IEEE、TABLE及自定義數組與變量。(ZMC3系列及之前的控制器)
2.雙精度浮點數64位,如下圖所示。
數據格式屬于雙精度浮點數的有:TABLE及自定義數組與變量。(ZMC4系列及之后的控制器)
3.常用寄存器數據類型表。
寄存器類型
數據類型
取值范圍
MODBUS_BIT
布爾型
0或1
MODBUS_REG
16位整型
-32768到32767
MODBUS_LONG
32位整型
-2147483648到2147483647
VR_INT
MODBUS_IEEE
32位浮點型
-3.4028235E+38到-1.401298E-45
VR
href="#_TABLE_--_系統缺省數組_1" TABLE,自定義數組,變量(ZMC3系列及之前)
TABLE,自定義數組,變量(ZMC4系列及之后)
64位浮點型
1.7E-308到1.7E+308
VRSTRING
字符
一個字符占一個VR
MODBUS_STRING
字符
一個字符占8位
TABLESTRING
字符
一個字符占一個TABLE
所有數據所需的存儲器容量與各數據的總數據大小(容量值)不一致,原因在于,分配至存儲器的數據的開頭位置自動配置至各數據類型的“校準值(邊界值)”倍數位置,各數據類型之間會產生空白。即使數據類型的種類相同,整體占用的數據大小仍會因數據類型的順序而異。
注意:不同類型數據之間的操作要注意數據類型,類型不匹配會導致數據丟失。
九、參考例程
1.例程代碼。
- '急停,清空運動緩沖區,等待軸0運動空閑
- RAPIDSTOP(2)
- WAIT IDLE(0)
- '函數調用模塊
- ConstInit '常量初始化
- GlobalInit '變量初始化
- AxesInit '軸參數初始化
- read_flash '讀flash塊
- CalcCamTable '存儲凸輪運動參數到table
- WHILE 1 'while循環掃描
- '啟動5組凸輪曲線的運行任務
- IF MODBUS_BIT(0)=on THEN '條件判斷
- MODBUS_BIT(0)=0 '復位,使IF條件滿足只執行一次
- STOPTASK 1
- RUNTASK 1,Motion1_job '啟動任務1
- ELSEIF MODBUS_BIT(1)=on THEN
- MODBUS_BIT(1)=0
- RAPIDSTOP(2)
- STOPTASK 1 '停止任務1
- RAPIDSTOP(2)
- '往flash塊寫入數據
- ELSEIF MODBUS_BIT(2)=on THEN
- MODBUS_BIT(2)=0
- PRINT "寫入數據"
- distance(0)=10
- velocity(0)=200
- ms_do(0)=0.3
- distance(1)=-10
- velocity(1)=200
- ms_do(1)=0.4
- distance(2)=20
- velocity(2)=200
- ms_do(2)=0.5
- distance(3)=-20
- velocity(3)=200
- ms_do(3)=0.6
- distance(4)=10
- velocity(4)=200
- ms_do(4)=0.8
- write_flash ' 調用函數,將數組數據寫入flash塊
- ENDIF
- WEND
- END
- '以任務1運行
- Motion1_job:
- TRIGGER ' 觸發示波器采樣
- BASE(0)
- DPOS=0
- FOR i=0 to 4
- m=distance(i) ' 代表距離的倍數
- t=ms_do(i) ' 運行時間
- SPEED=velocity(i) ' 運行速度
- CAM(0,1000,m,SPEED*t)
- WAIT IDLE
- next
- END
- GLOBAL SUB CalcCamTable '凸輪參數存儲到table
- num_p=1000 '變量不定義直接賦值,自動為文件模塊變量
- scale=500
- FOR p=0 TO num_p
- TABLE(p,((-SIN(PI*2*p/num_p)/(PI*2))+p/num_p)*scale)
- NEXT
- END SUB
- GLOBAL SUB write_flash '寫flash塊子程序
- FLASH_WRITE flashnum,distance,velocity,ms_do
- PRINT "寫入flash完成"
- END SUB
- GLOBAL SUB read_flash '讀flash塊子程序
- FLASH_READ flashnum,distance,velocity,ms_do
- PRINT "讀取flash完成"
- END SUB
- GLOBAL SUB ConstInit '全局Const定義
- GLOBAL const AxesNum=3 '定義總軸數
- END SUB
- GLOBAL SUB GlobalInit '全局變量初始化
- GLOBAL flashnum 'flash塊編號
- flashnum=1 '選擇編號1
- '定義數組,distance 距離,velocity 速度,time_do 時間
- GLOBAL distance(5),velocity(5),ms_do(5)
- '清空數組
- FOR i=0 TO 4
- distance(i)=0
- velocity(i)=0
- ms_do(i)=0
- NEXT
- END SUB
- GLOBAL SUB AxesInit '軸參數的初始化
- '批量初始化軸參數
- FOR i=0 TO AxesNum-1
- BASE (i)
- DPOS(i)=0
- ATYPE(i)=1
- UNITS(i)=500
- SPEED(i)=100
- ACCEL(i)=1000
- DECEL(i)=1000
- SRAMP(i)=10
- '將軸參數存儲到modbus寄存器
- MODBUS_IEEE(10+i*10)=UNITS(i)
- MODBUS_IEEE(12+i*10)=SPEED(i)
- MODBUS_IEEE(14+i*10)=ACCEL(i)
- MODBUS_IEEE(16+i*10)=DECEL(i)
- MODBUS_IEEE(18+i*10)=SRAMP(i)
- NEXT
- END SUB
2.示波器采樣運動波形。
本次,正運動技術經濟型EtherCAT運動控制器(六):數據儲存,就分享到這里。
審核編輯:湯梓紅
評論
查看更多