昨天一朋友向我索求840系统读取轴位置的文本,我告诉他,要想读取轴位置,不单单需要S7软件还需要NC VAR Selector”软件。这软件功能强大,我们第一次应用的时候是在使用滑枕垂度补偿时使用,用它来通过数字量来实现相应模拟量的转换。该功能我曾发过帖子。
既然说到这,我就把文档以分享帖形式发给坛友共同参考,本文档来自于多方面收集,仅供技术参考。
实现该功能需使用 FB2功能块,它可以使PLC程序从NC读取相应的变量,为了能正确的引导NCK变量,所需要通过“NC VAR Selector”软件在数据块中生成源数据块STL。下面以读取机床轴位置来介绍使用FB2功能,在使用FB2功能时需要现将FB1里面的参数设置为“NCKomm=1”
一,打开“NC VAR Selector”软件,新建一个项目。
搜索到一个“SMA”的变量然后“确定”
二,找到代号为“988”“actToolbasepos”的选项,双击,出现下图
这里面“Unit-No”是将要选着的通道号,Line是所要选着的轴号,单击OK
这里我们生成3个项目 如下图3
一,单击菜单Code中的Selection选项,输入最后要生成的数据块号,默认为DB120,即生成DB120块,然后单击保存,找到所要保存到哪里的路径,这是会生成一个后缀名为“.var”的文件,名字可以自由取,这里以“zhoupos”为名
二,单击菜单Code中的Generate生成后缀名为“.awl”这里以“zhoupos”为名字。这个后缀名为“.awl”的文件是将来被PLC所认可的文件
打开STEP7 在其源文件的跟目录下右键 Insert new object—external source 找到刚才保存的文件
一,然后打开,这时就会在STEP7的源文件里生成一个STL的源文件,双击打开,然后编译,如果没有发生错误则会在STEP7里生成一个DB120的数据块,
二,在符号表里给DB120数据块定义注释,例如本例为 zhoupos DB120 保存
三,在OB1里调用FB2块,然后定义背景数据块 例如DB121,下面将FB2的各输入输出参数说明如下
1) 输入参数
Req: 正向脉冲沿启动任务,只有当Rep端产生一个上升沿变换时,才可以启动它的一个任务,也就是读取NC轴的一个位置变量,布尔型数据类型
MunVar: 读取的数据数量,范围1—8,整型数据类型
Addr1~Addr8:[DBName].[VarName];这是“NC VAR Selector”软件提供的NC变量标识符;数组型数据类型;例如本例为"zhoupos".C0_SMA_actToolBasePos0_2其中"zhoupos"就是刚才在符号表里定义的DB120的注释
Unit1~Unit8: 变量地址中的区域地址;在这里就是“所要的通道”是那个,例如本例是通道1,就定义B#16#1, 字节型数据类型
Columnl1~Columnl8:变量地址中的列地址,字型数据类型。
Line1~Line8:变量地址中的行地址,这里就是指的“轴号”例如读取第一根的位置则需要写成W#16#1,:注意这个轴号其实是跟生成的STL源程序文件有关系的,字型数据类型。
2) 输出参数
Error:出错代码,类型BOOL,若数据传输出错,则该位为1,正常为0
NDR:执行代码,类型BOOL,若数据传送成功,则该位为1,否则为0
State:状态字,字型数据类型其含义如下
1, 低字节为1时表示接口出错;高字节表示发生错误的数据代码(1~8)
2, 低字节为2时表示任务错误;高字节表示在任务中存在编译错误
3, 低字节为3时表示负向确认不能执行;内部故障,按下“NC reser”可以消除
4, 低字节为4时表示读取的数据长度大于数据的存储区域;高字节数据表示故障发生的位置(RD1~RD8)
5, 低字节为5时表示变量转换数据类型错误;
6, 低字节为6时表示FIFO满;队列排满了,任务必须重复
7, 低字节为7时表示“NCKomm”没有赋值为1,注:NCKomm在NCK复位生效
8, 低字节为8时表示无效的本地目标区域,可能RD1~RD8指定的区域不是本地区域;高字节表示发生故障的位置(RD1~RD8)
9, 低字节为9时表示传输任务已被请求了,任务必须重新执行
10, 低字节为10时表示变量地址错误,单元或者行列号是0,高字节表示变量号。
11, 低字节为11时表示变量地址无效
12, 低字节为12时表示参数NumVar为0
3) 输入、输出参数
RD1~RD8: 这个是读取目标区域的值,ADDR1~ADDR8指定的NCK变量的值并把它们复制到指定的PLC数据区 例如,MD100,这样就会将某跟轴的位置值储存到MD100里面去。ANY数组数据类型
最后需要将0B1,0B100,DB120,DB121下载到PLC里,NCK复位,这样才能生效
下面讲生成的STL源程序简单说明一下
DATA_BLOCK DB 120 这里是用“NC VAR Selector”软件生成是那个数据块
VERSION : 0.0
STRUCT
C0_SMA_actToolBasePos0_2:
STRUCT
SYNTAX_ID : BYTE := B#16#82;
bereich_u_einheit : BYTE := B#16#40;
spalte : WORD := W#16#2;
zeile : WORD := W#16#0; 这个值如果是0.则可以在FB2的Line1~Line8输入端输入将要读取的那根轴的位置,例如W#16#1就是读取通道第一号轴的位置值,W#16#2就是读取通道的第二号轴的位置值
如果这个值是1,则只能读取通道的第一号轴的位置值,就算Line1~Line8输入端写成W#16#2也不能将第二号轴的位置值读取出来,就算Line1~Line8输入端不写任何数据,其结果还是读取第二号轴的位置值的。
bausteintyp : BYTE := B#16#74;
ZEILENANZAHL : BYTE := B#16#1;
typ : BYTE := B#16#F;
laenge : BYTE := B#16#8;
END_STRUCT ;
C1_SMA_actToolBasePos1_2:
STRUCT
SYNTAX_ID : BYTE := B#16#82;
bereich_u_einheit : BYTE := B#16#41;
spalte : WORD := W#16#2;
zeile : WORD := W#16#1; 这里只能读取通道的第一号轴的位置值。
bausteintyp : BYTE := B#16#74;
ZEILENANZAHL : BYTE := B#16#1;
typ : BYTE := B#16#F;
laenge : BYTE := B#16#8;
END_STRUCT ;
C1_SMA_actToolBasePos2_2:
STRUCT
SYNTAX_ID : BYTE := B#16#82;
bereich_u_einheit : BYTE := B#16#41;
spalte : WORD := W#16#2;
zeile : WORD := W#16#2; 这里只能读取通道的第二号轴的位置值。
bausteintyp : BYTE := B#16#74;
ZEILENANZAHL : BYTE := B#16#1;
typ : BYTE := B#16#F;
laenge : BYTE := B#16#8;
END_STRUCT ;
END_STRUCT ;
BEGIN
END_DATA_BLOCK
注:经常用的两个参数
在“NC VAR Selector”软件里面 RP 代号326 rpa[..]是读取NC里的R参数的
SMA 代号988 actToolBasePos[..]是读取通道里的轴位置当前值的。
笔记就是这样,我们实际操作时不一定想笔记写的那样顺利,总会有这样那样的问题,总之,了解原理遇到问题解决问题就是了。