AT指令和Slice 访问有啥不同AT指令和Slice 访问有啥不同?粗略用了一下,感觉很类似。
应用的变量类型有啥区别么
------看起来都是可以访问一个变量的一部分。
-----AT: 将两个变量符号定义在同一地址,只能用于标准访问的块(有绝对地址),必须预定义
Slice: 访问变量的某些子单元数据, 优化访问的标准块都能用
-------就是在优化的背景数据块里,定义一个变量假设为D0 Word, 然后将该变量的“保持性”设置为“在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
当我使用位置模式时, 可以直接将一个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; //速度给定(正转)
|