西门子的手册在同行业里面是最全的,但是有些细节阐述仍然不够详细;
下面用三个问题展开,说明一下所见所得:
1.手册允许的最大容量和报警的容量变量不一致;
下面以1500的DB 大小描述为例:
![](/club/bbs/upload/image/20240801/6385811962344320128139871.PNG)
可以看到是否优化,最大容量是不同的,这个意思是没问题的;
但是具体来说,非优化的块最大64kb,对应的应该是65536 byte;
在尝试用过多的数据来尝试的时候,可以看到警告信息,显示允许的最大容量是65534byte, 由此可以发现二者的不同;
![](/club/bbs/upload/image/20240801/6385811999086828444123981.PNG)
个人认为,这是从不同的角度去看问题产生的不同,一个应该类似于占用的空间,一个是可用空间,中间类似公摊面积的一些额外开销;
对应的,优化的块的空间也是不同的,比如下面:
![](/club/bbs/upload/image/20240801/6385812020097147883237787.PNG)
这个里面有2个问题:
1是允许的最大空间16777216 byte=16M byte; 而手册里面是3.5M byte,这可能是个错误, 这个手册是最新的,2024.7 月份的;
2.是同样的,这里面有个4个byte的额外开销;
第二个问题:DB的最大数组下标是多少?
这个有两个维度,首先是数组本身Index 的允许数量范围,300 PLC 统一是32767, 1500根据数组的元素类型的不同而不同;
比如BYTE 最大可以到16777216 ,这个数字比较好记,因为这是16 M 展开的数字;INT 减半,REAL 再减半;
第二个维度即使前面提到的DB 块本身的空间限制,由于优化和非优化的块的大小不同,所以差别比较大,参看前面的图片;
第三个问题:数组元素的可见性
在1500中,可见的数组最大条目是10000,这是尝试了好多次得出的;这个数量也可以和多维数组共享,比如[1..100,1..100],[1..20,1..500].超过不会报错,但是在离线阶段不可见;
![](/club/bbs/upload/image/20240801/6385812115605194584028396.PNG)
有表述不正确的地方欢迎指正;