前景提要
新手在画梯形图的时候,经常会遇到的这样的困扰:在调试的时候,无法手动将M2.0置位。(如下图所示)
查看上文我们会发现M2.0在第1行是作为输出,被M1.0联动了。所以导致M2.0无法手动置位。
接下来我们看另外一个案例:发现M1.0没有被当作输出线圈过,为什么也是无法被手动置位?
原来上面一段程序使用了MB1地址,与下面的M1.0冲突导致。
这就说明:这些寄存器的地址表示方法不一样,但是其中有从属包含关系。
接下来我们来梳理一下寄存器上的一些从属关系
寄存器表达方式及从属关系
VB-VW-VD
VD100 | |||
VW100 | VW102 | ||
VB100 | VB101 | VB102 | VB103 |
西门子plc中,VB是最基本的字节,一个VB就是1个字节。2个相邻的VB组成一个VW,2个相邻的VW组成一个VD(4个相邻的VB组成一个VD)
知道了这个脉络之后,就不难发现:如果VD100和VD101同时出现在你的程序里面就会出现寄存器地址使用冲突。
M-MB-MW-MD
MD1 | MW1 | MB1 | M | 1.0 | 1.1 | 1.2 | 1.3 | 1.4 | 1.5 | 1.6 | 1.7 |
MB2 | M | 2.0 | 2.1 | 2.2 | 2.3 | 2.4 | 2.5 | 2.6 | 2.7 | ||
MW2 | MB3 | M | 3.0 | 3.1 | 3.2 | 3.3 | 3.4 | 3.5 | 3.6 | 3.7 | |
MB4 | M | 4.0 | 4.1 | 4.2 | 4.3 | 4.4 | 4.5 | 4.6 | 4.7 |
西门子plc中,M是最基本的位,1组M组成MB,2个相邻的MB组成一个MW,2个相邻的MW组成1个MD。以上表为例子:
MB1=M1.0~M1.7;
MW1=MB1+MB2
MD1=MW1+MW2
知道了这个脉络之后,就不难发现:如果M1.0和MB1同时出现在你的程序里面就会出现M1.0被MB1牵制(例如文章一开始时候的案例)。
通过寄存器名字关系的梳理,后续在编程过程中应该尽量避免地址符号使用冲突的情况