一、XPLC006E功能介绍
XPLC006E是Positive Motion Controller推出的一款多轴经济型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软件“Controller”-“Controller Status”查看控制器各寄存器空间大小,也可通过在线命令输出窗口查看各寄存器空间大小输入“?*最大”。 不同控制器的寄存器数量和存储空间不同。
三、TABLE寄存器
TABLE是控制器自带的超大数组。 数据类型为32位浮点数(Series 4及以上为64位浮点数),掉电不保存。 编写程序时,TABLE数组不需要重新定义,直接使用即可。 索引下标从0开始,支持批量赋值和批量读取。
ZBasic的部分命令可以直接读取TABLE中的值作为参数,如CAM、CAMBOX、CONNFRAME、CONNREFRAME、MOVE_TURNAABS、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 '打印出controller TABLE size TSIZE=10000 '设置TABLE的大小,不能超过controller 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:起始点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) to TABLE(17)
(3)查看TABLE中数据的方式有两种
第一种方法:在线命令行输入?*TABLE(10,8)查询TABLE(10),依次从8条数据开始。
第二种方法:查看寄存器中的DT(TABLE)数据,起始编号从10开始,编号为8。
4.MODBUS寄存器
MODBUS寄存器符合MODBUS标准通讯协议,分为位寄存器和字寄存器两种。 支持MODBUS标准协议的第三方设备可以与控制器通信,数据通过MODBUS寄存器传输。 (MODBUS寄存器数据掉电不保存,支持批量读写)
⊙位寄存器:MODBUS_BIT,触摸屏一般称为MODBUS_0X,布尔型。
⊙字寄存器:MODBUS_REG、MODBUS_LONG、MODBUS_IEEE、MODBUS_STRING,触摸屏一般称为MODBUS_4X,类型如下图所示。
控制器中的 MODBUS 字寄存器占用相同的变量空间。 1个LONG占用2个REG地址,1个IEEE也占用2个REG地址。 使用时注意错开字寄存器的个数地址。
⊙MODBUS_LONG(0)占用两个REG地址MODBUS_REG(0)和MODBUS_REG(1)。
⊙MODBUS_LONG(1)占用两个REG地址MODBUS_REG(1)和MODBUS_REG(2)。
⊙MODBUS_IEEE(0)占用两个REG地址MODBUS_REG(0)和MODBUS_REG(1)。
⊙MODBUS_IEEE(1)占用两个REG地址MODBUS_REG(1)和MODBUS_REG(2)。
所以注意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 'Set VR(0)=100.345?MODBUS_REG(0) '打印结果为100,VR已经映射到REG,但是REG是整数,所以小数部分丢失 MODBUS_REG(0)=200 'REG(0)设置为200? VR(0) '打印结果为200matlab定义全局变量,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 的空闲标志
8200~8299
BUFFER 轴 0-99 的剩余标志
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的掉电保存原理是控制器内部有掉电内存matlab定义全局变量,但数据容量小,所以最好把数据量大的数据或者需要保存的数据写入备用久了到FLASH块或者导出到U盘。
VR寄存器也可用于RTEX控制器传输读写数据,写入DRIVE_WRITE参数,读取DRIVE_READ参数。 具体使用方法参见第16章总线相关的RTEX总线说明。
使用CLEAR指令清除VR中的所有数据,CLEAR_BIT指令将VR的某个位置设置为0,READ_BIT指令读取VR寄存器中的某个位数据,SET_BIT指令设置某个位置VR 为 1。
示例 1:如何使用 VR
VR(0) = 10.58 '分配 aaa = VR(0)' 读取
例2:VR寄存器数据相互转换
VR(100)=10.12VR_INT(100)=VR(100) '数据转换? VR_INT(100) '打印结果:10,浮点数转为整数,丢掉小数位
示例3:VRSTRING 存储字符串
VRSTRING(0,4) = "abc" '保存来自VR(0)的字符串 PRINT VRSTRING(0,4) '打印结果:abc
六、FLASH注册
FLASH严格来说不是寄存器,但它与寄存器密切相关,用于存储重要数据。
FLASH具有掉电存储功能,读写次数限制为10万次,长时间不上电数据不会丢失。 一般用于存储不需要频繁读写的大数据,比如加工过程文件。
读写时注意保证要操作的变量和数组的名称和顺序高度一致。 如果它们不一致,数据就会混乱。
使用FLASH时,以块为单位编号,变量或数组等数据以块为单位存储。 阅读也需要分块阅读。 块的数量由 FLASH_SECTES 命令检查。 不同的控制器有不同的 FLASH 块号和块数据大小。 查看 FLASH_SECTSIZE 命令的大小。
可以在线命令行查看。 某款控制器的存储空间如下图所示,图中显示了FLASH块的个数和FLASH的总空间。
→CAN通讯设置参数、IP地址、APP_PASS、LOCK密码等系统参数保存在FLASH中。
注意:FLASH必须先写入再读取,否则会提示报警WARN。
闪存的使用方法:
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,共15个空间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
虚拟现实
href="#_TABLE_–_system default array_1" TABLE,自定义数组,变量(ZMC3系列及之前)
TABLE、自定义数组、变量(ZMC4 系列及更高版本)
64 位浮点数
1.7E-308 至 1.7E+308
虚拟字符串
特点
一个角色占用一个VR
MODBUS_STRING
特点
一个字符占8位
表串
特点
一个字符占一个TABLE
所有数据所需的内存容量与每个数据的总数据大小(容量值)不匹配,因为分配给内存的数据的头部位置被自动分配为每个数据的“校准值(边界值)”的倍数数据类型 数据类型之间产生空白。 即使数据类型的类型相同,整体占用的数据大小也会根据数据类型的排列顺序而有所不同。
注意:不同类型数据之间的操作要注意数据类型,类型不匹配会导致数据丢失。
九、参考例程
1.例程代码。
2. 示波器对运动波形进行采样。
这次Positive Motion技术与经济型EtherCAT运动控制器(6):数据存储,就分享到这里。