| 作者 | 主题 |
|---|---|
|
must努力 侠士 经验值:1912 发帖数:192 精华帖:1 |
楼主
主题:S7-300有没有指令可以对字节里面数据进行提取? 西门子有没有指令可以把四个字节中的数据提取出来放到一个字里面的,例如我有四个字节的数据,
多点努力,少点依赖
|
|
emil128 侠圣 经验值:3827 发帖数:271 精华帖:10 |
14楼
主题:回复:S7-300有没有指令可以对字节里面数据进行提取?抽空也测试了下N侠的程序,修正个小BUG OPN DB 1 //打开DB1 LAR1 P#0.0 //初始化地址寄存器1 LAR2 P#20.0 //初始化地址寄存器2 L 4 //装载循环次数 NEX2: T LW 20 //存储当前的循环次数 L 4 //装载循环次数 NEX1: T LW 22 //存储当前的循环次数 A M [AR1,P#0.0] //读取当前的位的状态 = DBX [AR2,P#0.0] //将当前位的状态赋给目标位 +AR1 P#0.1 //源地址递增1个位 +AR2 P#0.1 //目标地址递增1个位 L LW 22 //装载当前的循环次数 LOOP NEX1 //循环次数减一,跳转到NEX1标签,当循环次数减至0,往下执行 +AR1 P#0.4 //源地址递增半个字节 +AR2 P#0.0 //目标地址无需递增 L LW 20 //装载当前的循环次数 LOOP NEX2 //循环次数减一,跳转到NEX2标签,当循环次数减至0往下执行 不过得到的是 字节2.字节1.字节4.字节3 |
|
must努力 侠士 经验值:1912 发帖数:192 精华帖:1 |
19楼
主题:回复:S7-300有没有指令可以对字节里面数据进行提取?不好意思,这两天忙着调程序,没有看帖,这是SCL 写的代码 "Tag_6" := 16#0F0F0F0F AND "Tag_6";//屏蔽MB0~MB3的高四位数据 tag_6:=MD0; //byte 0 "Tag_1" := "Tag_7";//MW10:=MB0 Tag_1:=%mw10 //byte 1 #TEMP[1]:=SHL(IN:="Tag_5", N:=4); //MB1移位; "Tag_1" := "Tag_1" OR #TEMP[1]; //字或 //byte 2 #TEMP[2] := SHL(IN := "Tag_8", N := 8); //MB2移位;"Tag_8":=mb2 "Tag_1" := "Tag_1" OR #TEMP[2]; //字或 //Byte 3 #TEMP[3] := SHL(IN :="Tag_9" , N := 12); //MB3移位;"Tag_9":=mb3 "Tag_1" := "Tag_1" OR #TEMP[3]; //字或,MW10结果输出
多点努力,少点依赖
|