有没有遇到过明明数据块里面的数据被引用了,但是就是找不到这个数据块,但是程序运行也没有报错??
不用多想,这大概是因为数据块是被程序创建的;在300/400 PLC 中使用的是SFC22;在1500中是"CREATE_DB".
为什么我要搞这个指令,因为我也被坑到了;老外几十年的程序还在使用,排查故障时候发现的;
说到这里顺便介绍一下这个指令的使用方法:
先说在300PLC中的使用,介绍很简练,以下来自官方帮助文档.

LOW LIMIT: 是最小的DB;
UP_LIMIT :最大的DB; 这两个数字可以一样,这样只会创建一个DB,不然就是多个DB;
COUNT:每个DB 里面会有多少个BYTES;
RET-VAL :返回是否创建成功的结果;
DB_NUMBER: 返回创建的DB 号码:
文档前面是一些描述和要求;

大体意思是说:这个DB 没有预设值,一开始里面的值是随机的;这意思是提醒要初始化一下;根据参数分配DB 大小,这个大小得是偶数;要是打算创建一个指定号码的DB,把最大和最小值设成一样大小的;不能设成已经存在DB的号码;
CALL SFC 22
LOW_LIMIT:=W#16#A
UP_LIMIT :=W#16#A
COUNT :=W#16#200
RET_VAL :=#Pa_Mig_ret_val
DB_NUMBER:=#db_number
1500 PLC 对这个指令进行了扩展:

最明显的就是增加了属性接口,利用前四个bit对产生的DB 的细节进行了描述,比如是不是只存在装载区,是不是写保护,是不是保持;另外对产生的DB的号码上下限制做了限制,最小DB 从60000开始;
下面是我做的一个基本测试,可以看到可以正常生成,但是数据只有在线才能看到;

因为不是在TIA 中直接创建的:
