之前正运动技术与大家分享了,运动控制器的固件升级、ZBasic程序开发、ZPLC程序开发、与触摸屏通讯和输入/输出IO的应用等。
今天,我们来讲解一下正运动技术运动控制器数据与存储的应用。
****:《****:如何进行运动控制器数据与存储的应用?》
一、材料准备与控制器接线参考
材料准备:
1、电脑1台,安装ZDevelop3.01以上版本软件
2、控制器1个
3、24V直流电源1个
4、总线驱动器+电机(或步进驱动器+电机)若干
5、控制器接线端子若干
6、网线若干
7、连接线若干
另:IO设备、扩展模板、触摸屏等根据需求选用
二、Basic编程数据定义
1、变量定义
变量是用户可以自定义的变量,变量用于暂时保存与外部设备的通信数据或任务内部处理需要的数据,换言之,它是用于保存带名称和数据类型等属性的数据,无需指定变量与存储器地址之间的分配。
1)变量定义指令:
分为全局变量(GLOBAL)、文件模块变量(DIM)、局部变量(LOCAL)三种。
全局变量可以在项目内的任意文件中使用;
文件模块变量只能在本程序文件内部使用;
局部变量主要用在SUB中,其他文件无法使用。
变量可以不经过定义直接赋值,此时的变量默认为文件模块变量。
2)示例:
GLOBAL g_var2 '定义全局变量g_var2
DIM VAR1 '定义文件变量VAR1
SUB aaa()
LOCAL v1 '定义局部变量V1
v1=100
END SUB
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) '定义全局数组
4、子函数定义
使用SUB指令定义子函数,子函数可以定义为文件SUB,或前面增加GLOBAL指令定义为全局使用的SUB过程,跨文件调用子函数必须定义为全局SUB过程。
示例:
SUB sub1() '定义过程SUB1,只能在当前文件中使用
?1
…
END SUB
GLOBAL SUB g_sub2() '定义全局过程g_sub2,可以在任意文件中使用
?2
…
END SUB
三、控制器内部寄存器
控制器的寄存器主要有TABLE、FLASH、VR、MODBUS寄存器。将ZDevelop软件与控制器连接后,可通过ZDevelop软件菜单栏“控制器”~“控制器状态”窗口查看该控制器各寄存器的空间大小,也可以通过在线命令功能在“命令与输出”窗口输入“?*max”来查看各寄存器的数量,不同的控制器存储容量大小不同。
1、TABLE数组
TABLE是控制器自带的一个超大数组,数据类型为32位浮点型(4系列及以上为64位浮点型),掉电不保存。
编写程序时,TABLE数组不需要再定义,可直接使用,索引下标从0开始。
ZBasic的某些指令可以直接读取TABLE内的值作为参数,TABLE使用时先将参数存储在TABLE的某个位置,再使用指令参数调用TABLE数据。比如CAM,CAMBOX,CONNFRAME,CONNREFRAME,MOVE_TURNABS,B_SPLINE,CAN,CRC16,DTSMOOTH,PITCHSET,HW_PSWITCH等指令。
示波器采样的参数存储在TABLE数组的末尾,因此在开发应用中要注意TABLE区域的分配与使用,不要与示波器采样的数据存储区域重合。
TABLE指令读写数据,示例:
TABLE(0) = 10 'table(0)赋值10
TABLE(10,100,200,300) '批量赋值,table(10)赋值100,table(11)赋值200,table(12)赋值300
TSIZE指令可读取TABLE空间大小,还可修改TABLE空间大小(不能超出TABLE最大空间),示例:
PRINT TSIZE '打印出控制器table大小
TSIZE=10000 '设置table的大小,不能超过控制器table最大size
TABLESTRING指令按照字符串格式打印TABLE里的数据,示例:
TABLE(100,68,58,92)
PRINT TABLESTRING(100,3) '字符串格式打印数据,转换为ASCII码
打印结果:D:</p>
2、FLASH
FLASH具有掉电存储功能,读写次数限制为十万次左右,长期不上电也不会丢失数据。
一般用于存放较大的,不需要频繁读写的数据,比如加工的工艺文件。可以一个扇区或者几个扇区来保存一个加工的加工工艺文件。
读与写时要注意保证要操作的变量,数组等名称和次序高度一致,如果不一致会导致数据错乱。
FLASH使用时是按块编号,块数FLASH_SECTES指令查看,不同的控制器FLASH块数与块数据大小都不同,每块数据大小FLASH_SECTSIZE指令查看。
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 '读取次序与写入次序一致
3、VR寄存器
VR寄存器具有掉电存储功能,可无限次读写,但数据容量较小,一般只有1024或者更少,用于保存需要不断修改的数据,例如轴参数、坐标等。
VR的掉电保存原理是控制器内部有铁电存储器,但数据容量较小,所以数据量较大的或需要长久保存的数据最好写到FLASH块或导出到U盘。
VR存储数据类型为32位浮点型(4系列及以上为64位浮点数),使用VR_INT强制保存为32位整型,VRSTRING强制保存为字符串,保存的是ASCII码,一个字符占用一个VR。
VR、VR_INT,VRSTRING共用一个空间。寄存器读写方法相同。
VR使用方法:
VR(0) = 10.58 '赋值
aaa = VR(0) '读取
4、MODBUS寄存器
MODBUS通讯的数据使用MODBUS寄存器存储,控制器的MODBUS寄存器符合MODBUS标准通讯协议,分为位寄存器和字寄存器两类。
位寄存器:MODBUS_BIT,触摸屏一般称为MODBUS_0X,布尔型
字寄存器:包含MODBUS_REG(16位整型)、MODBUS_LONG(32位整型)、MODBUS_IEEE(32位浮点型)、MODBUS_STRING(8位字节型),触摸屏一般叫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地址在用户应用程序中不能重叠。
控制器的MODBUS存储空间安排如下:
MODBUS指令
MODBUS通讯需要将数据放在MODBUS寄存器内进行传递。
有专门的MODBUS通讯指令对MODBUS寄存器的数据进行读写与寄存器之间的数据传递。
MODBUS读/写语法格式相同,如下所示:
MODBUSM_REGGET (startreg, num, local_reg)
startreg:对端的寄存器起始编号,从0开始
num:寄存器个数
local_reg:从本地系统MODBUS寄存器中取值,起始编号
示例:
MODBUSM_REGGET(0,10,0) '把本地位寄存器09复制到通讯对端的寄存器09
MODBUS指令如下,指令详细用法参见Basic手册:
MODBUS_BIT – 位寄存器
MODBUS_IEEE – 字寄存器-32位浮点型
MODBUS_LONG – 字寄存器-32位整型
MODBUS_REG – 字寄存器-16位整型
MODBUS_STRING – 字寄存器-字节
MODBUSM_DES – modbus通讯连接
MODBUSM_DES2 – 控制器间网口通讯
MODBUSM_STATE – modbus通讯状态
MODBUSM_REGSET – 写对端保持寄存器
MODBUSM_REGGET – 读对端保持寄存器
MODBUSM_3XGET – 读对端输入寄存器
MODBUSM_BITSET – 写对端线圈
MODBUSM_BITGET – 读对端线圈
MODBUSM_1XGET – 读对端离散输入
四、数据类型与数据转换
1、数据类型
常用寄存器存储的数据类型和每个数据存储单元的取值范围如下表所示:
2、数据转换
不同类型数据之间的操作,会产生下列问题:
A.数据丢失:浮点型向整型转换时会丢失小数部分。
示例:
VR(0)=10.314
MODBUS_REG(0)=0
MODBUS_REG(0)=VR(0)
?MODBUS_REG(0) '结果为10
B.强制转换:整型存储到浮点型寄存器后会变成浮点型,再使用整型操作数据可能会不正确。
C.单精度数据只有7位有效数值,在计算的过程中如果有长期累加的数值,建议使用4系列控制器。
五、Basic演示例程
以下是Basic演示例程及示波器演示图。
任务1运行,执行凸轮表指令,得出波形如下图:
今天,正运动技术运动控制器数据与存储的应用分享到这里,更多精彩内容,请关注我们的公众号。示波器图前面加一句
本文由正运动小助手原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。
正运动技术是一家专注于运动控制技术研发与应用的*高新技术企业,主要从事运动控制器、运动控制卡、IO扩展模块、运动显控一体机等系列产品的研发、生产、销售和服务。
公司汇集了来自华为、中兴等公司的优秀人才,在坚持自主创新的同时,积极联合各大高校致力于运动控制技术研究与应用,是国内工控领域发展最快的企业之一,也是国内完整掌握运动控制核心技术和实时工控软件平台技术的企业。