技术论坛

只通过传递DB名称或者编号怎么访问优化访问属性数据块中的内容

作者 主题
侠士

经验值: 1732
发帖数: 104
精华帖: 6
主题:【求助】只通过传递DB名称或者编号怎么访问优化访问属性数据块中的内容


只看楼主 楼主 2022-03-25 11:50:10

最近在写一通用块,去访问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

至圣

经验值: 28602
发帖数: 10825
精华帖: 131
回复:只通过传递DB名称或者编号怎么访问优化访问属性数据块中的内容
推荐帖


只看楼主 1楼 2022-03-27 08:28:26

用MOVE

需要哪个数据读哪个。

不需要的不要读。 


另外,建议忘掉PEEK/POKE指令。 

发现这俩函数非常不好, 很多人因为学会了PEEK,反而搞不成标准化的程序。 



微信公众号:PLC标准化编程,ZHO6371995
以下网友喜欢您的帖子:

  
至圣

经验值: 28602
发帖数: 10825
精华帖: 131
回复:只通过传递DB名称或者编号怎么访问优化访问属性数据块中的内容
推荐帖


只看楼主 2楼 2022-03-27 08:48:17

所以要学会封装, 而不是去学一些奇技*巧的函数。


如果有人不服气, 我直接告诉好了, 我做的所有标准化程序里面没有用到PEEK。 


也没有机会用到。 所以我虽然知道它的功能,但一直都没有找到应用的机会来练练手。


就像我曾经反对使用UDT一样, 是根本找不到需要用的机会。 


PORTAL的系统,未来的发展方向是全优化。 非优化只是用于与老旧系统的对接。根本没有PEEK的位置空间。 


微信公众号:PLC标准化编程,ZHO6371995
以下网友喜欢您的帖子:

  
侠圣

经验值: 2300
发帖数: 442
精华帖: 1
回复:只通过传递DB名称或者编号怎么访问优化访问属性数据块中的内容


只看楼主 3楼 2022-03-27 17:53:09

废劲了吧

PID的系统块也是DB,对应的读写属性使用就好了


co771@qq.com,好难
以下网友喜欢您的帖子:

  
侠士

经验值: 1732
发帖数: 104
精华帖: 6
回复:只通过传递DB名称或者编号怎么访问优化访问属性数据块中的内容


只看楼主 楼主 4楼 2022-03-28 10:56:25
以下是引用BBdell在2022-03-27 17:53:09的发言 >3楼

废劲了吧

PID的系统块也是DB,对应的读写属性使用就好了

其实做这件事初衷是:CONT_C功能块太简单了,连设定值斜率、输出变化率、SP_EXT 等都没有,想通过自己写FB/FC读取CONT_C背景数据把这些功能加进去,又不想用FB中引用多重背景调用(这样的话博图自带的工艺对象功能就不能用,虽然对这个PID用处不大,但想保留),但又为了方便使用,所以只想传DB名称或者编号。现在看来好像无解!!万版说的用MOVE,应该不行,对指定的背景DB用变量全称是可以,但这种情况好像不行。PEEK/POKE现在确实不怎么用,并且尽量不用,尽量采用优化访问编程,这样程序执行效率、PLC扫描时间会缩短很多,但有时候为了方便,用间接寻址,还是绕不开这两个指令(优化访问中能接近间接访问的就是采用数组,但这样定义的变量名就呵呵了)。


 
以下网友喜欢您的帖子:

  
侠士

经验值: 1732
发帖数: 104
精华帖: 6
回复:只通过传递DB名称或者编号怎么访问优化访问属性数据块中的内容


只看楼主 楼主 5楼 2022-03-28 11:20:26
以下是引用万泉河在2022-03-27 08:48:17的发言 >2楼

所以要学会封装, 而不是去学一些奇技*巧的函数。


如果有人不服气, 我直接告诉好了, 我做的所有标准化程序里面没有用到PEEK。 


也没有机会用到。 所以我虽然知道它的功能,但一直都没有找到应用的机会来练练手。


就像我曾经反对使用UDT一样, 是根本找不到需要用的机会。 


PORTAL的系统,未来的发展方向是全优化。 非优化只是用于与老旧系统的对接。根本没有PEEK的位置空间。 

关于UDT,到目前为止我还是比较喜欢,因为我喜欢把同种类型的东西放到同一个抽屉里,不喜欢每个东西都去占用一个抽屉。我都程序也可以做到我认为的标准化不管是原来的Step7还是博图,在Excel中列出设备位号、类型、分配的画面名称(针对WINCC)等,一键生成标准模板的程序,wincc变量、归档、报警、画面及画面中的对象图标等都可通过我写的工具生成。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 28602
发帖数: 10825
精华帖: 131
回复:只通过传递DB名称或者编号怎么访问优化访问属性数据块中的内容


只看楼主 6楼 2022-03-28 18:11:24
以下是引用W.M.J在2022-03-28 10:56:25的发言 >4楼

其实做这件事初衷是:CONT_C功能块太简单了,连设定值斜率、输出变化率、SP_EXT 等都没有,想通过自己写FB/FC读取CONT_C背景数据把这些功能加进去,又不想用FB中引用多重背景调用(这样的话博图自带的工艺对象功能就不能用,虽然对这个PID用处不大,但想保留),但又为了方便使用,所以只想传DB名称或者编号。现在看来好像无解!!万版说的用MOVE,应该不行,对指定的背景DB用变量全称是可以,但这种情况好像不行。PEEK/POKE现在确实不怎么用,并且尽量不用,尽量采用优化访问编程,这样程序执行效率、PLC扫描时间会缩短很多,但有时候为了方便,用间接寻址,还是绕不开这两个指令(优化访问中能接近间接访问的就是采用数组,但这样定义的变量名就呵呵了)。

以下是引用BBdell在2022-03-27 17:53:09的发言 >3楼:废劲了吧PID的系统...

引用3楼详细内容:

废劲了吧

PID的系统块也是DB,对应的读写属性使用就好了

DB不是名称或者编号, 那是对象!

以对象来引用,易如反掌。 


你们就是因为不了解对象, 所以才会对PEEK/POKE, 对UDT喜欢的要死。 


微信公众号:PLC标准化编程,ZHO6371995
以下网友喜欢您的帖子:

  
奇侠

经验值: 8562
发帖数: 3432
精华帖: 56
回复:只通过传递DB名称或者编号怎么访问优化访问属性数据块中的内容


只看楼主 7楼 2022-03-30 08:47:36
以下是引用万泉河在2022-03-27 08:48:17的发言 >2楼

所以要学会封装, 而不是去学一些奇技*巧的函数。


如果有人不服气, 我直接告诉好了, 我做的所有标准化程序里面没有用到PEEK。 


也没有机会用到。 所以我虽然知道它的功能,但一直都没有找到应用的机会来练练手。


就像我曾经反对使用UDT一样, 是根本找不到需要用的机会。 


PORTAL的系统,未来的发展方向是全优化。 非优化只是用于与老旧系统的对接。根本没有PEEK的位置空间。 

如果你不想多花钱卖opc ua的授权,那么上位机怎么跟plc对接?还不是需要非优化的块?有非优化的块,就有可能需要peek/poke


If anything can go wrong, it will.
以下网友喜欢您的帖子:

  
侠士

经验值: 1732
发帖数: 104
精华帖: 6
回复:只通过传递DB名称或者编号怎么访问优化访问属性数据块中的内容


只看楼主 楼主 8楼 2022-03-30 15:12:59
以下是引用冬日在2022-03-30 08:47:36的发言 >7楼

如果你不想多花钱卖opc ua的授权,那么上位机怎么跟plc对接?还不是需要非优化的块?有非优化的块,就有可能需要peek/poke

以下是引用万泉河在2022-03-27 08:48:17的发言 >2楼:所以要学会封装, 而...

引用2楼详细内容:

所以要学会封装, 而不是去学一些奇技*巧的函数。


如果有人不服气, 我直接告诉好了, 我做的所有标准化程序里面没有用到PEEK。 


也没有机会用到。 所以我虽然知道它的功能,但一直都没有找到应用的机会来练练手。


就像我曾经反对使用UDT一样, 是根本找不到需要用的机会。 


PORTAL的系统,未来的发展方向是全优化。 非优化只是用于与老旧系统的对接。根本没有PEEK的位置空间。 

这个倒是不一定,像WINCC是可以访问优化DB的!其他上位机通常都是通过OPC通讯的,不管优化还是非优化


 
以下网友喜欢您的帖子:

  
至圣

经验值: 28602
发帖数: 10825
精华帖: 131
回复:只通过传递DB名称或者编号怎么访问优化访问属性数据块中的内容


只看楼主 9楼 2022-03-30 16:01:40
以下是引用冬日在2022-03-30 08:47:36的发言 >7楼

如果你不想多花钱卖opc ua的授权,那么上位机怎么跟plc对接?还不是需要非优化的块?有非优化的块,就有可能需要peek/poke

以下是引用万泉河在2022-03-27 08:48:17的发言 >2楼:所以要学会封装, 而...

引用2楼详细内容:

所以要学会封装, 而不是去学一些奇技*巧的函数。


如果有人不服气, 我直接告诉好了, 我做的所有标准化程序里面没有用到PEEK。 


也没有机会用到。 所以我虽然知道它的功能,但一直都没有找到应用的机会来练练手。


就像我曾经反对使用UDT一样, 是根本找不到需要用的机会。 


PORTAL的系统,未来的发展方向是全优化。 非优化只是用于与老旧系统的对接。根本没有PEEK的位置空间。 

完全混为一谈了, 他这里是在探讨对PID块封装的问题。 


你不可以在PLC编程的时候就被上位机软件所束缚, 不可能为每一种上位机都专门对应一套PLC程序库。


微信公众号:PLC标准化编程,ZHO6371995
以下网友喜欢您的帖子:

  
奇侠

经验值: 8562
发帖数: 3432
精华帖: 56
回复:只通过传递DB名称或者编号怎么访问优化访问属性数据块中的内容


只看楼主 10楼 2022-03-31 08:47:27
以下是引用万泉河在2022-03-30 16:01:40的发言 >9楼

完全混为一谈了, 他这里是在探讨对PID块封装的问题。 


你不可以在PLC编程的时候就被上位机软件所束缚, 不可能为每一种上位机都专门对应一套PLC程序库。

以下是引用冬日在2022-03-30 08:47:36的发言 >7楼:如果你不想多花钱卖o...

引用7楼详细内容:

如果你不想多花钱卖opc ua的授权,那么上位机怎么跟plc对接?还不是需要非优化的块?有非优化的块,就有可能需要peek/poke

以下是引用万泉河在2022-03-27 08:48:17的发言 >2楼:所以要学会封装, ...

引用2楼详细内容:

所以要学会封装, 而不是去学一些奇技*巧的函数。


如果有人不服气, 我直接告诉好了, 我做的所有标准化程序里面没有用到PEEK。 


也没有机会用到。 所以我虽然知道它的功能,但一直都没有找到应用的机会来练练手。


就像我曾经反对使用UDT一样, 是根本找不到需要用的机会。 


PORTAL的系统,未来的发展方向是全优化。 非优化只是用于与老旧系统的对接。根本没有PEEK的位置空间。 

你不可以在PLC编程的时候就被上位机软件所束缚, ----这句话只能说对一半,但是你不能不管不顾上位机吧?

不可能为每一种上位机都专门对应一套PLC程序库。----这句话是对的,所以最佳方案,就是准备一个DB块,把上位机需要的东西都往那个块丢。那么这个块是不是很可能不是优化块?要知道不是每家每户都用得起wincc和opc ua?


If anything can go wrong, it will.
以下网友喜欢您的帖子:

  
侠圣

经验值: 2841
发帖数: 276
精华帖: 3
回复:只通过传递DB名称或者编号怎么访问优化访问属性数据块中的内容


只看楼主 11楼 2022-03-31 09:00:04

可以另辟蹊径,用多重背景FB加数组化实例。


你若安好便是晴天
以下网友喜欢您的帖子:

  
至圣

经验值: 28602
发帖数: 10825
精华帖: 131
回复:只通过传递DB名称或者编号怎么访问优化访问属性数据块中的内容


只看楼主 12楼 2022-03-31 12:12:11
以下是引用冬日在2022-03-31 08:47:27的发言 >10楼

你不可以在PLC编程的时候就被上位机软件所束缚, ----这句话只能说对一半,但是你不能不管不顾上位机吧?

不可能为每一种上位机都专门对应一套PLC程序库。----这句话是对的,所以最佳方案,就是准备一个DB块,把上位机需要的东西都往那个块丢。那么这个块是不是很可能不是优化块?要知道不是每家每户都用得起wincc和opc ua?

以下是引用万泉河在2022-03-30 16:01:40的发言 >9楼:完全混为一谈了, 他...

引用9楼详细内容:

完全混为一谈了, 他这里是在探讨对PID块封装的问题。 


你不可以在PLC编程的时候就被上位机软件所束缚, 不可能为每一种上位机都专门对应一套PLC程序库。

以下是引用冬日在2022-03-30 08:47:36的发言 >7楼:如果你不想多花钱卖...

引用7楼详细内容:

如果你不想多花钱卖opc ua的授权,那么上位机怎么跟plc对接?还不是需要非优化的块?有非优化的块,就有可能需要peek/poke

以下是引用万泉河在2022-03-27 08:48:17的发言 >2楼:所以要学会封装, ...

引用2楼详细内容:

所以要学会封装, 而不是去学一些奇技*巧的函数。


如果有人不服气, 我直接告诉好了, 我做的所有标准化程序里面没有用到PEEK。 


也没有机会用到。 所以我虽然知道它的功能,但一直都没有找到应用的机会来练练手。


就像我曾经反对使用UDT一样, 是根本找不到需要用的机会。 


PORTAL的系统,未来的发展方向是全优化。 非优化只是用于与老旧系统的对接。根本没有PEEK的位置空间。 

所以当下的问题是FB块的设计问题, 不是数据整理的问题。 



微信公众号:PLC标准化编程,ZHO6371995
以下网友喜欢您的帖子:

  
侠士

经验值: 1732
发帖数: 104
精华帖: 6
回复:只通过传递DB名称或者编号怎么访问优化访问属性数据块中的内容


只看楼主 楼主 13楼 2022-03-31 17:19:02
以下是引用ETD在2022-03-31 09:00:04的发言 >11楼

可以另辟蹊径,用多重背景FB加数组化实例。

如果采用多重背景的方法就不需要这个讨论了。虽然经过万版的指点,但还是没想出怎么搞,有想到的小伙伴请不惜赐教。首先别偏题,就是怎么在原CONT_C上加一个通用的外挂,这个外挂可以针对所有CONT_C的PID,不用去修改外挂里边的程序。


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 2241
发帖数: 378
精华帖: 4
回复:只通过传递DB名称或者编号怎么访问优化访问属性数据块中的内容


只看楼主 14楼 2022-03-31 19:09:00

自己写PID算法(很多教程上都有SCL的PID基础算法),可以根据实际的行业应用自由编写。这样1200、1500通用。


这样是不是可以解决你的问题?


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 2331
发帖数: 382
精华帖: 3
回复:只通过传递DB名称或者编号怎么访问优化访问属性数据块中的内容


只看楼主 15楼 2022-04-01 00:51:20
最近也在试图通过这种方式来改, 之前认为variant可以做到,但是FB的背景应该是不行

工艺第一& 我所说的一切均代表个人意见
以下网友喜欢您的帖子:

  
侠士

经验值: 1732
发帖数: 104
精华帖: 6
回复:只通过传递DB名称或者编号怎么访问优化访问属性数据块中的内容


只看楼主 楼主 16楼 2022-04-01 11:11:58
以下是引用那一剑的温柔在2022-03-31 19:09:00的发言 >14楼

自己写PID算法(很多教程上都有SCL的PID基础算法),可以根据实际的行业应用自由编写。这样1200、1500通用。


这样是不是可以解决你的问题?

嗯,可以!其实这篇帖子也是通过CONT_C这个例子引出:怎样把一个优化DB块通过“输入、输入/输出”参数的方式传递到一个标准FB/FC,通过标准FB/FC去访问DB中的数据。在以前的Step7中这种方法很常见,实现起来也很简单,但在博图中如果DB使用了优化访问,实现起来好像很难,好像也只能另辟蹊径了。


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 2841
发帖数: 276
精华帖: 3
回复:只通过传递DB名称或者编号怎么访问优化访问属性数据块中的内容


只看楼主 18楼 2022-04-01 13:05:09

STL 中倒是有如下写法

OPN DB [ "DB编号"]  //打开全局数据块

OPN DI [ "DB编号"]  //打开背景数据块

但对于优化数据块也只能止步于此,因为后面想要访问具体数据还是要通过偏移地址和偏移量。





你若安好便是晴天
以下网友喜欢您的帖子:

  
游士

经验值: 256
发帖数: 33
精华帖: 0
回复:只通过传递DB名称或者编号怎么访问优化访问属性数据块中的内容


只看楼主 19楼 2022-04-07 21:09:55

DB_ANY可行?


言石
以下网友喜欢您的帖子:

  
版主

经验值: 76250
发帖数: 19148
精华帖: 378
回复:只通过传递DB名称或者编号怎么访问优化访问属性数据块中的内容


只看楼主 20楼 2022-04-08 08:36:08

不就是封装一个加了点外挂功能的PID吗?多重背景呀,绝对的思路有问题,基本功太差。


Zane 注册自动化系统工程师 Always save before download
以下网友喜欢您的帖子:

  
收起
只通过传递DB名称或者编号怎么访问优化访问属性数据块中的内容
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。