签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
最近在写一通用块,去访问PID(CONT_C )背景数据块中的内容,并进行读取和修改,输入参数为背景DB块的名称或者DB编号。因为CONT_C为系统块,并且为优化访问块,好像不能修改,所以不能用PEEK和POKE指令。大神们有什么好方法?
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1754077&b_id=66&s_id=0&num=21
用MOVE
需要哪个数据读哪个。
不需要的不要读。
另外,建议忘掉PEEK/POKE指令。
发现这俩函数非常不好, 很多人因为学会了PEEK,反而搞不成标准化的程序。
所以要学会封装, 而不是去学一些奇技*巧的函数。
如果有人不服气, 我直接告诉好了, 我做的所有标准化程序里面没有用到PEEK。
也没有机会用到。 所以我虽然知道它的功能,但一直都没有找到应用的机会来练练手。
就像我曾经反对使用UDT一样, 是根本找不到需要用的机会。
PORTAL的系统,未来的发展方向是全优化。 非优化只是用于与老旧系统的对接。根本没有PEEK的位置空间。
废劲了吧
PID的系统块也是DB,对应的读写属性使用就好了
其实做这件事初衷是:CONT_C功能块太简单了,连设定值斜率、输出变化率、SP_EXT 等都没有,想通过自己写FB/FC读取CONT_C背景数据把这些功能加进去,又不想用FB中引用多重背景调用(这样的话博图自带的工艺对象功能就不能用,虽然对这个PID用处不大,但想保留),但又为了方便使用,所以只想传DB名称或者编号。现在看来好像无解!!万版说的用MOVE,应该不行,对指定的背景DB用变量全称是可以,但这种情况好像不行。PEEK/POKE现在确实不怎么用,并且尽量不用,尽量采用优化访问编程,这样程序执行效率、PLC扫描时间会缩短很多,但有时候为了方便,用间接寻址,还是绕不开这两个指令(优化访问中能接近间接访问的就是采用数组,但这样定义的变量名就呵呵了)。
关于UDT,到目前为止我还是比较喜欢,因为我喜欢把同种类型的东西放到同一个抽屉里,不喜欢每个东西都去占用一个抽屉。我都程序也可以做到我认为的标准化不管是原来的Step7还是博图,在Excel中列出设备位号、类型、分配的画面名称(针对WINCC)等,一键生成标准模板的程序,wincc变量、归档、报警、画面及画面中的对象图标等都可通过我写的工具生成。
引用3楼详细内容:
DB不是名称或者编号, 那是对象!
以对象来引用,易如反掌。
你们就是因为不了解对象, 所以才会对PEEK/POKE, 对UDT喜欢的要死。
如果你不想多花钱卖opc ua的授权,那么上位机怎么跟plc对接?还不是需要非优化的块?有非优化的块,就有可能需要peek/poke
引用2楼详细内容:
这个倒是不一定,像WINCC是可以访问优化DB的!其他上位机通常都是通过OPC通讯的,不管优化还是非优化
完全混为一谈了, 他这里是在探讨对PID块封装的问题。
你不可以在PLC编程的时候就被上位机软件所束缚, 不可能为每一种上位机都专门对应一套PLC程序库。
引用7楼详细内容:
你不可以在PLC编程的时候就被上位机软件所束缚, ----这句话只能说对一半,但是你不能不管不顾上位机吧?
不可能为每一种上位机都专门对应一套PLC程序库。----这句话是对的,所以最佳方案,就是准备一个DB块,把上位机需要的东西都往那个块丢。那么这个块是不是很可能不是优化块?要知道不是每家每户都用得起wincc和opc ua?
可以另辟蹊径,用多重背景FB加数组化实例。
引用9楼详细内容:
所以当下的问题是FB块的设计问题, 不是数据整理的问题。
如果采用多重背景的方法就不需要这个讨论了。虽然经过万版的指点,但还是没想出怎么搞,有想到的小伙伴请不惜赐教。首先别偏题,就是怎么在原CONT_C上加一个通用的外挂,这个外挂可以针对所有CONT_C的PID,不用去修改外挂里边的程序。
自己写PID算法(很多教程上都有SCL的PID基础算法),可以根据实际的行业应用自由编写。这样1200、1500通用。
这样是不是可以解决你的问题?
嗯,可以!其实这篇帖子也是通过CONT_C这个例子引出:怎样把一个优化DB块通过“输入、输入/输出”参数的方式传递到一个标准FB/FC,通过标准FB/FC去访问DB中的数据。在以前的Step7中这种方法很常见,实现起来也很简单,但在博图中如果DB使用了优化访问,实现起来好像很难,好像也只能另辟蹊径了。
STL 中倒是有如下写法
OPN DB [ "DB编号"] //打开全局数据块
OPN DI [ "DB编号"] //打开背景数据块
但对于优化数据块也只能止步于此,因为后面想要访问具体数据还是要通过偏移地址和偏移量。
DB_ANY可行?
不就是封装一个加了点外挂功能的PID吗?多重背景呀,绝对的思路有问题,基本功太差。
分享
扫码分享好友 任选多种好礼
收藏
有帮助
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录