5、PLC读写数控压装深度参数的功能块设计
考虑到程序应用的通用性,采用模块化编程,设计出参数读写用的功能块FC块,通过功能块接口变量进行参数传递,将数控系统地址、需要读写的参数号、参数索引地址等信息作为功能块的接口变量,这样通过调用同一个功能块,写入不同的接口变量就可以很方便的读写不同数控轴的不同参数。
首先确定参数读写FC的接口变量,IN输入接口变量需要4个:PKW区域的起始地址;待读写的参数号;待读写参数的索引下标;读或写标志位。定义前三个接口变量的数据类型为INT整数型,第四个接口变量数据类型为BOOL位型,定义1为写标志,表示PLC向611U数控系统写数据, 0为读标志,表示PLC从611U读数据。
压装深度参数数值需要定义到IN-OUT输入输出接口变量中,因在FC块调用过程中,需要对该参数进行读或写。
为了判断读写功能的完成情况,FC块执行参数读写任务完成以后,还需要反馈一个完成信号,因此在OUT输出接口变量中定义一个读写完成信号。
FC程序块的接口变量中还需要定义一些临时变量,用于存放程序执行过程中临时用到的一些变量。参数读写需要用到系统功能块SFC14、15,这两个系统功能块的接口变量里有ANY类型的参数,需要一次对应8个字节的PKW区域所有,因此需要在临时变量中定义:PKE两个字节、IND两个字节、PWE四个字节。另外还要定义两个临时变量来存放参数读写时的返回ID值,用来判断参数读写完成后是否出错:TypeRep一个字节; SFC14、15执行后的返回值:RET_V两个字节。以上定义的接口变量如表8。
通讯程序编写时,先将需要读写参数的参数号及索引地址写入PKW区域里的PKE和IND:
L #PAR_NO
T #PKE //写入参数号
L #PAR_IND
T #IND //写入参数下标
程序需要根据接口输入变量PAR_W的状态来判断当前是读参数还是写参数,然后跳转到相应的程序段执行:
A #PAR_W
JC _W //若为1则跳转到写参数程序段
从数控系统中读出带索引的参数值,作业ID号应该为6,需要将此ID号写入PKE的高4位,用字或运算保留其他的位并且将高4位改为6;作业ID号6对应的返回ID应该为4号:
L W#16#6000 //读参数作业ID号为6
L #PKE
OW //字或运算保留低12位
T #PKE //将作业ID号加入PKE中
L 4
T #TypeRep //读参数返回ID应该为4
JU _C //直接跳转到总线数据发送程序段
往系统中写参数值的作业ID为8,返回ID为5,同时需要将写入参数的数值写到PWE中:
_W: NOP 0 //写参数程序段标号
L W#16#8000 //写参数作业ID号为8
L #PKE
OW //字或运算保留低12位
T #PKE //将作业ID号加入PKE中
L #PAR_V
T #PWE //将写入参数的数值写到PWE
L 5
T #TypeRep //写参数返回ID应该为5
相关读写参数填写完成后,调用系统功能块SFC15来向总线发送数据,并对应写入发送数据的总线地址、PKW区域的起始地址及长度:
_C: NOP 0
CALL SFC15 //往总线上传送数据
LADDR :=#PKW_ADD //总线地址
RECORD :=P#L 0.0 BYTE 8 //PKW区域的起始地址及长度
RET_VAL:=#RET_V //SFC15执行的返回值
读写命令发送到总线上由系统执行,接着用系统功能块SFC14从总线上读出执行的结果来判断执行情况、取回读出的参数值等:
CALL SFC14 //从总线上读入数据
LADDR :=#PKW_ADD //总线地址
RET_VAL:=#RET_V // SFC14执行的返回值
RECORD :=P#L 0.0 BYTE 8 // PKW区域的起始地址及长度
数据读出来后要进行处理分析,检查返回的ID号是否与之前写入#TypeRep的值相等,如果相等说明读写任务成功完成,读出来的参数值有效可用,同时将读写任务完成信号接通:
L #PKE //取PKE区的数据
L 2#1111000000000000 //高4位数据保留其余清零
AW //字与运算
SRW 12 //右移12位分离出返回ID号(高4位)
L #TypeRep //前面赋值的返回值
==I //比较
JCN _AL //如果不相等,出错跳转
L #PWE //取出读出来的参数值
T #PAR_V
SET
= #ACT_OK //读写任务完成信号
_AL: NOP 0
读写参数的功能块编写完成后,在主程序中调用功能块就可以实现不同参数的读写功能,调用功能块如下。