恭喜,你发布的帖子
发布于 2020-11-17 18:33:01
22楼
由于那个块编译通不过,所以我把另一个功能类似在1200的通讯块COPY到1500,编译居然通过了!但没有高兴多久,又出新夭蛾子了。只要一调用UDT里array 中的BOOL,立马报一样的错误。既然编译能通过,调用出问题,那直接把FB内所有的程序屏蔽,相当于个空块,再次调用,报错。查看static变量有UDT,把array取消,只用一个UDT,再次调用,还是报错!调用没有用UDT的static变量,编译通过!看来问题出在UDT上了。随机调用UDT内array的变量,居然有几个能通过!到这里,我大概反应过来了,就是UDT块出问题了。在1500内新建个UDT,把原UDT内所有内容COPY过去,在static内调用。删掉从1200中COPY过来的UDT,编译通过!调用也通过!把UDT类型改成array,设成1..40个,也即使用40组变量,再次在FC内调用FB的UDT内容,编译通过!
所以,我猜测,即使使用DB块优化,所谓的没有实际地址,其实是博图自己自动分配了地址,可能从1200里COPY过来的UDT,由于使用了array,有多组地址,直接COPY过来后,可能与1500自己分配的地址相冲突了。造成所谓的“只能使用不变零的位地址进行访问”。直接重建UDT,让博图自动分配好地址后,再将UDT内容完全COPY,就不存在这问题了。不知道我的理解对否?
刚开始没往这方面想,其实是走了弯路,由于COPY的UDT有10+,都没有问题,而只有这个有问题,就以为是通讯出了问题。应该是其它的UDT均没有使用array,没有造成地址冲突,所以才没有出事。
进一步猜想,如果使用了array的在1500里集成的FB,可能COPY到1200里直接使用,可能也会出现类似的问题。
由于在网上搜索了一圈“只能使用不变零的位地址进行访问”,只有一个度娘有结果,说是用了指针。但博图基本上没有指针概念了,也没多想。其实从报错上看,就是位地址出问题了。
精华帖版主置评:不管怎么说,坚持使用优化的DB块,把问题找出来与大家分享。赞一个!
有可能问题就是出在UDT数组上。 -yming
请填写推广理由:
分享
只看
楼主