谈谈西门子PLC中的字位变换
在西门子PLC的过程中,经常会遇到通讯变量为字通讯,但是需要单独的对其中的位进行控制,除了直接对字变量进行赋值外,其实也可以对其进行字位变换,以方便调用
方式一:使用AT变量来实现字位转换
方式二:使用直接使用变量的位。X
方式三:使用SCATTER(将位序列解析为单个位)
SCATTER指令支持将数据类型BYTEWORDDWORDLWORD的变量解析为单个位,并保存在ArrayofBOOL、匿名STRUCT或包含BOOL元素的PLC数据类型中
SCATTER的引脚参数说明:
SCATTER说明
下面我们还是案例说明,我们以读取G120的状态字作为案例说明
状态字结构如下:
状态字ZSW1
对此PLC建立对应的结构体变量,如下
ZSW1对应的结构变量
方式1实现方式,直接对应生成AT变量;
AT变量转换
方式2实现,将ADI整型变量进行分解,然后赋值给Struct变量;
。X
方式3,使用Scatter指令转换生成Bool数组
Scatter指令
以上三种方式,我一般个人倾向使用前两种,做标签对应,便于直接控制,阅读也比较方便,但是由于西门子的大端存储,AT转换实际会出现高低互换的情况,实际映射的时候可以转换一下;。X转换倒是小端存储,可以直接映射,Scatter指令倒是可以实现转换,但是各Bool量存储都是数组名,不便于阅读;
仿真画面如下,大家可以参阅一下
仿真结构说明