恭喜,你发布的帖子
发布于 2023-08-31 15:51:46
20楼
一切界面交互都从IO走,这个确实是最正确的做法。
不过,从IO走不也需要一个变量或DB支持嘛。换个想法,IDB也是DB,干嘛费劲另外设计个通讯DB呢?
当然,从静态数据直接通讯会有些问题,就是通讯如果是背景通讯,会在扫描程序中间更新通讯数据,这样交互的数据就不能保持在整个扫描阶段不变了,这个会带来逻辑处理的一些问题。
我是这么处理的,底层模块FB1完全采用传统方式,没有涉及任何通讯之类的东西,完全只是实现控制逻辑,所有需要传递的数据从FB1的IO来。FB2作为上层模块静态有个FB1实例,FB2的IO传递外界的现场信号之类,FB2的静态设计和HMI交互的通讯数据,然后组装调用FB1实例。
好像西门子的LBP也是通讯从静态数据走。只不过LBP底层模块就乱七八糟的包括了所有东西。
和HMI通讯时,HMI的数据格式就是:FB2实例.HMI数据.具体数据。
这个目前来看也比较简洁。
当然,博途支持IO不用建立实参的调用方式,在所有交互走IO的情况下也可以不另外设计接口DB。
---------------------
另外,宝冬说的IDB中为什么Temp无法访问,那是因为IDB中根本就没有Temp。
高级语言中的Static和博途FB中的Static不是一回事,反而和Codesys的Static是一回事。
CodeSys的FB的Static指的是所有该类型FB实例的公共静态数据,只在第一次调用FB创建并为所有该类型实例共享。而博途FB的Static在CodeSys中对应的是VAR变量,私有数据区。
请填写推广理由:
分享
只看
楼主