西门子3004001500程序中用到SLW3指令,这个指令的作用是什么?如何去理解? 案例学习: LADI SLW3 LAR1 LIB〔AR1,P0。0〕 TDIB13 LIB〔AR1,P1。0〕 TDIB12 LIW〔AR1,P2。0〕 TIF1。OutRamp 首先通过西门子官方手册,先了解下数据类型pointer地址指针的结构,如图下 地址结构说明 那么地址指针AR的数据格式如何?AR为32位 AR结构如下,与pointer参数结构一致: 0000000000000BBBBBBBBBBBBBBBBXXX 其中02bit为指定bit位,318bit为指定Byte位,其余位固定为0 例如:当ARD4(HEX)00000000000000000000000011010100(二进制),实际换算成地址值就是26。4 故SLW3的目的是将一般数据变成地址类型并形成地址的Bit位,便于偏移量的运算。 下面进一步说明上面的案例,案例为西门子G120变频器状态读取的写法,下图为G120功能块的声明部分,通讯方式采用ProfinetIO通讯,报文1,IQ起始地址定义为420 功能块声明部分 声明静态结构变量 Profinet通讯接收部分 LADI装载变频器输入起始地址420至累加器1 SLW3累加器1中1631位保持不变,015向左移动3位 LAR1此时AR1的值为420。0 LIB〔AR1,P0。0〕读取变频器状态字IB420的值 TDIB13写入到背景数据块DIB13 LIB〔AR1,P1。0〕读取变频器状态IB421 TDIB12写入到背景数据块DIB12目的16位地址高低互换 LIW〔AR1,P2。0〕读取变频器转速 TIF1。OutRamp 程序节选