OPN DB [LW 4]
//打开数据块
//数据块起始地址去掉数据区 标识部分
L LD 6
L DW#16#FFFFFF
AD
T LD 10
//计算最后一个储存单元指针保存至ld 10
L LW 2
L 2
*I
T LD 14
L L#2
-D
SLD 3
L LD 10
+D
T LD 10
//外循环计数lw20,循环次数为(数据个数-1)次
L LW 2
L 1
-I
nxt2: T LW 20
L LD 10
LAR1
L LW 20
//嵌套循环计数lw18,循环次数为(lw20)次
nxt1: T LW 18
TAR1
L P#2.0
-D
LAR1
//后一单元数据小于前一单元数据?
L DBW [AR1,P#2.0]
L DBW [AR1,P#0.0]
<I
JCN l1
//否,交换2单元数据
L DBW [AR1,P#2.0]
L DBW [AR1,P#0.0]
T DBW [AR1,P#2.0]
POP
T DBW [AR1,P#0.0]
l1: L LW 18
LOOP nxt1
L LW 20
LOOP nxt2
JU exit
//错误码1,any指针有错
err1: L 1
T #error
JU exit
//错误码2,输入数据区不是db块
err2: L 2
T #error
JU exit
//错误码3,输入数据类型不是Int
err3: L 3
T #error
exit: NOP 0
这个冒泡排序法,我现在就是不懂
L LD 6
L DW#16#FFFFFF
AD
T LD 10
这个注释写的/数据块起始地址去掉数据区标识部分 ,那这个数据区在any的第六个字节,它是以数据存储的吗,如果是那是以什么方式存储进去的,我的理解就是DB块的DW,W,B,等标识,那6个f二进制都是1,它是怎么综合的?
问题补充:
L LB 6
L B#16#84
==I
JCN err2
这是上面往第6哦字节写的数据,字节16进制的84二进制就是10000100而与FFFFFF相与后没有意义啊,lb6的字节还是10000100啊,这是我不明白的地方
图片说明:
最佳答案
原程序是先判断写入的变量是不是DB块的变量,不是就报错误2,是的话就把LB6中的内容去掉,就是与FFFFFF相与的程序。 DW#16#FFFFFF表示的是32位的,与LD6相与后正好把高字节的内容(即表示数据区含义的部分)去掉了。而你补充的LB6是保存变量的数据区,不同的数据区对应的数值不同,见你的文档。因为程序中使用内部区域间接寻址,所以把LB6的内容去掉了。使用交叉区域间接寻址的话,这步就不用了,但下面的寻址表示改为W [AR1,P#2.0]。
提问者对于答案的评价:
我监控看了下AC1真变成0了,不过我还是没弄明白1和1与应该还是1啊,我单独,的这运行一下相与这结果84与6个F相与结果还是84就不是0,
最佳答案作者回复:
原内容是DW#16#84XXXXXX,与DW#16#FFFFFF相与后是DW#16#00XXXXXX,这是AC1的内容。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc232207.html