bkkman 发表于 2009-5-15 12:46:13

LD,ORB和ANB及栈

对三菱编程手册上的一例题进行练习


http://cache.amobbs.com/bbs_upload782111/files_15/ourdev_445039.jpg
LA01 (原文件名:LA01.jpg)

0 : 接于母线的LD X000 将X000值赋给逻辑中间变量LM,为能区别,加步骤号LM0;
1 : LM1 = LM0 } X001 ;
http://cache.amobbs.com/bbs_upload782111/files_15/ourdev_445040.jpg
(原文件名:LD02.jpg)

2 : LD X002 将LM1压栈,X002赋给LM2;
3 :LM3 = LM2 & X003;

http://cache.amobbs.com/bbs_upload782111/files_15/ourdev_445041.jpg
(原文件名:LD03.jpg)

bkkman 发表于 2009-5-15 12:53:20

4 :LDI X004 将LM3压栈,X004赋给LM4 ;
5 :LM5 = LM4 & X005 ;
http://cache.amobbs.com/bbs_upload782111/files_15/ourdev_445043.jpg
(原文件名:LD04.jpg)

6 :ORB将栈顶 LM3( = X002 & X003)弹出,与逻辑块值LM5( = (~X004) & X005)相或,
      LM6 = LM5 | LM3 ;
7 :LM7 = LM6 & X006 ;

http://cache.amobbs.com/bbs_upload782111/files_15/ourdev_445044.jpg
(原文件名:LD05.jpg)

8 :ANB 将栈顶LM1(=X000 | X001)弹出,与LM7相与,
       LM8 = LM7 & LM1 ;
9 : LM9 = LM8 | X003 ;
10 : Y007 = LM9

http://cache.amobbs.com/bbs_upload782111/files_15/ourdev_445045.jpg
(原文件名:LD06.jpg)

bkkman 发表于 2009-5-15 12:55:36

接于母线的LD指令把操作数值赋给逻辑中间变量;后续的LD指令把已运算的逻辑中间变量压栈,然后把它的操作数值赋给逻辑中间变量。
栈顶是紧靠正装载LD指令之前逻辑块的值。
进行压栈操作LD指令开始一个新逻辑块的运算。
ORB,ANB执行出栈操作,并将刚运算的逻辑块值和弹出的栈顶进行与、或运算。
扫描用户程序时如何确定接于母线的LD指令是个问题,也就是接于母线的LD指令有什么唯一的特征?

bkkman 发表于 2009-5-15 13:13:32

这是我在08年12月的一篇练习.
实际上,PLC指令解释,原厂手册及例题是最好的参考资料.

adolfshxq 发表于 2009-5-15 17:12:10

扫描用户程序时如何确定接于母线的LD指令是个问题,也就是接于母线的LD指令有什么唯一的特征?
楼主应该是在做语句表到梯形图的时候遇到这种问题。
编译或者解释执行的时候,应该不用考虑LD指令是否是连接在母线上。
类似于三菱的梯形图,因为网络之间是没有标志的。因此在语句表转梯形图的时候,就无法确定一个网络到底什么时候结束,
也就是说无法确定LD 指令是否连接到母线上。
这时,必须向后看很多步才能确定。】
比如
LD X1
OUT Y1
LD X2
OUT Y2
在看到OUT Y2的时候才能知道 LD X2是连接在母线上的。
因此我总结出一个规律:某次压栈(LD)之后 数据一直未和上一级堆栈做预算(ANB ORB)就直接被输出(OUT或者运算指令)了,那么此时可以确定刚刚压栈(LD)的动作就是和母线连接在一起的。
但这种分析很繁琐,我以前做的时候,是分析完最后一个语句,才知道整个语句表可以分成多少个网络。因为多个网络也可以看做成一种并联关系。希望对楼主有用:)

foshan_lcy 发表于 2009-5-15 18:38:39

在下之前发的“模拟器”就有这方面的资料。只不过收视率太低,好像没有人想看。哈哈。
大家都想看一个完整的系统,但是一个完整的系统就不是少量代码就能描述出来的了,看起来更头痛。哈哈

heky 发表于 2009-5-15 20:40:39

堆栈机,不用看ld从哪里来,也不要管哪里去。只要知道昨天,今天,就好了。ld来了进堆栈,ORB和ANB来了和昨天的一对比就可以了。


输出只跟今天相关。

bkkman 发表于 2009-5-17 13:43:48

实际上LD堆栈是为ORB和ANB块指令准备的,LD和块指令一一对应;
母线LD压栈的bit实际用不着,这可以多作几个三菱编程手册例题验证.因此,母线LD压栈的bit可不管它,让它自然消失.

foshan_lcy 发表于 2009-5-17 17:55:52

【8楼】 bkkman
母线LD压栈的bit实际用不着
=============================
      确实如bkkman说的一样。

但是【7楼】 heky
      对程序流程的描述更让人容易理解。
页: [1]
查看完整版本: LD,ORB和ANB及栈