QQ登录

只需一步,快速开始

AT指令和Slice 访问有啥不同

[ 复制链接 ]
AT指令和Slice 访问有啥不同AT指令和Slice 访问有啥不同?粗略用了一下,感觉很类似。
应用的变量类型有啥区别么


------看起来都是可以访问一个变量的一部分。
-----AT: 将两个变量符号定义在同一地址,只能用于标准访问的块(有绝对地址),必须预定义
Slice: 访问变量的某些子单元数据, 优化访问的标准块都能用


-------就是在优化的背景数据块里,定义一个变量假设为D0Word, 然后将该变量的“保持性”设置为“在IDB中设置”,那么接下来新建一个变量就可以AT以上的D0了


-------AT指令(应该是个方法吧)。还是Z版的办法好。先定义一个变量结构。然后在使用AT指令时,就直接使用这个变量结构,这样它的可读性就很好了,一目了然。
传递一个参数就可以包含字、字节、位。这对于那些状态字的位操作、控制很方便,在接口处就转换成“位”变量了。

-------我试了一下,一直有问题,在数据格式中没有AT。

具体起因是我想用临时变量LW 0中的某一位,但是在接口处in_out定义临时变量之后,紧接着,下一行想使用AT,但是格式中没有这个。

我下载了一个实例程序,在里面试着操作的时候,就没有这样的问题。


-------我觉得AT指令只用在块的接口。

如果你的程序结构都是用控制字,状态字来传递(分层控制),使用AT指令就会感到好处了。

其它用法还真没有看出来


------其实AT还有一个非常好用的地方, 几乎是非用不可.


我使用ET200S的步进模块, 它的控制字首个双字(偏移量为0)有两种情况:一种是在位置模式下用DINT类型表示目标位置.  另一种是在速度模式下用REAL类型表示目标速度.

而我又需要建立一个用户数据类型(UDT) ,   在这个UDT里我必须要事先指定数据类型, 比如我的项目要经常用到位置模式, 那么我将数据类型设为DINT.   

AT指令和Slice 访问有啥不同

AT指令和Slice 访问有啥不同

然后现在突然有个项目来了, 我即需要用位置模式,又要速度模式.  

AT指令和Slice

AT指令和Slice

当我使用位置模式时, 可以直接将一个DINT类型的变量赋值给该控制字

"yRW_EP".ControlData := DINT_TO_DWORD(#PulseTarget_EP);  //位置给定


而当我使用速度模式时, 我需要将一个REAL类型赋值给"yRW_EP".ControlData.   可是"yRW_EP".ControlData的数据类型为 DINT.    肿么办?   这个时候AT就能救命了!

#RealData0 := INT_TO_REAL(#ManSpd_EP)*5.0E+3/5/10;

"yRW_EP".ControlData := #DWatReal0;  //速度给定(正转)


回复

使用道具 举报

快速回复 返回列表 客服中心 搜索