技术论坛

variant在队列中的应用困惑

作者 主题
至圣

经验值: 12688
发帖数: 2083
精华帖: 23
主题:【求助】variant在队列中的应用困惑
推荐帖


只看楼主 楼主 2021-08-25 13:42:39

原来一个测试试验项目中编写了类似队列FIFO的程序,当时有多种数据类型,REAL、DINT和字符串都有,所以写了几个FC(其实就是数组里的数据类型不同而已)。最近准备对项目升级,想用variant数据类型把队列程序写到一个FB里。本来想就是将输入的varitant数据进行判断通过VariantGet将其传送给FB静态变量里的DINT/REAL/STRING数组进行处理,处理完再结合数据类型通过VariantPut输出给variant数据。现在发现这样操作的话数组的处理程序不是要三遍(三种数据类型)?那样的1个FB工作量和三个FC程序没有区别,所以有此困惑。variant其实用得不多,感觉自己思路错了,请大家给点建议和帮助,谢谢!


 
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1712262&b_id=66&s_id=0&num=13

版主

经验值: 76195
发帖数: 19142
精华帖: 378
回复:variant在队列中的应用困惑
推荐帖


只看楼主 1楼 2021-08-25 22:38:26

是有点想多了,不过呢也不是不能实现,你的想法实际就是想造一把能打不同口径子弹的枪,看弹匣了的子弹口径,决定选哪个口径的枪管。

其实比较啰嗦,枪管和弹匣的配套还是要人为确定的。


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

  
至圣

经验值: 12688
发帖数: 2083
精华帖: 23
回复:variant在队列中的应用困惑
推荐帖


只看楼主 楼主 2楼 2021-08-26 07:16:59

Zane版的比喻很恰当,有时为了所谓结构化(标准化)而结构化(标准化)有点作茧自缚,就像为了显示程序有档次而用SCL语言啰里啰唆去写一大堆逻辑一个道理。殊途同归,何必在意是否用最直接简单的方法实现。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 13937
发帖数: 2008
精华帖: 43
回复:variant在队列中的应用困惑
推荐帖


只看楼主 3楼 2021-08-26 08:29:06
以下是引用刚刚入门在2021-08-25 13:42:39的发言 >楼主

原来一个测试试验项目中编写了类似队列FIFO的程序,当时有多种数据类型,REAL、DINT和字符串都有,所以写了几个FC(其实就是数组里的数据类型不同而已)。最近准备对项目升级,想用variant数据类型把队列程序写到一个FB里。本来想就是将输入的varitant数据进行判断通过VariantGet将其传送给FB静态变量里的DINT/REAL/STRING数组进行处理,处理完再结合数据类型通过VariantPut输出给variant数据。现在发现这样操作的话数组的处理程序不是要三遍(三种数据类型)?那样的1个FB工作量和三个FC程序没有区别,所以有此困惑。variant其实用得不多,感觉自己思路错了,请大家给点建议和帮助,谢谢!

其实还是有好处的吗,类似S7-200 里的MOVB,MOVW,MOVD指令了,现在只要一个MOV就解决了


人生就像一场旅行!
以下网友喜欢您的帖子:

  
版主

经验值: 76195
发帖数: 19142
精华帖: 378
回复:variant在队列中的应用困惑


只看楼主 4楼 2021-08-26 14:04:36
以下是引用Letham在2021-08-26 08:29:06的发言 >3楼

其实还是有好处的吗,类似S7-200 里的MOVB,MOVW,MOVD指令了,现在只要一个MOV就解决了

以下是引用刚刚入门在2021-08-25 13:42:39的发言 >楼主:原来一个测试试验项...

引用楼主详细内容:

原来一个测试试验项目中编写了类似队列FIFO的程序,当时有多种数据类型,REAL、DINT和字符串都有,所以写了几个FC(其实就是数组里的数据类型不同而已)。最近准备对项目升级,想用variant数据类型把队列程序写到一个FB里。本来想就是将输入的varitant数据进行判断通过VariantGet将其传送给FB静态变量里的DINT/REAL/STRING数组进行处理,处理完再结合数据类型通过VariantPut输出给variant数据。现在发现这样操作的话数组的处理程序不是要三遍(三种数据类型)?那样的1个FB工作量和三个FC程序没有区别,所以有此困惑。variant其实用得不多,感觉自己思路错了,请大家给点建议和帮助,谢谢!

博途的MOVE指令就是这样的,但两边的数据类型还是要人工匹配的


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

  
侠士

经验值: 1867
发帖数: 330
精华帖: 0
回复:variant在队列中的应用困惑


只看楼主 5楼 2021-08-27 11:15:34

新功能需要被慢慢开发


低调做人,高调做事
以下网友喜欢您的帖子:

  
至圣

经验值: 127330
发帖数: 22001
精华帖: 824
回复:variant在队列中的应用困惑
推荐帖


只看楼主 6楼 2021-08-27 11:53:29

是写一个FC(不需要写多个功能一样的FC),它的输入是Variant,它的输出是Variant。FC 的处理功能(操作内容)是一样的。

针对不同数据类型的FB,其调用这个同一个FC。

这里仅仅用到的功能是:数据类型不正确,不执行(不需要判断)。

FC仅使用临时变量。



学而时习之,不亦说乎?温故而知新,不亦乐乎?
以下网友喜欢您的帖子:

  
至圣

经验值: 13937
发帖数: 2008
精华帖: 43
回复:variant在队列中的应用困惑


只看楼主 8楼 2021-08-27 15:01:09
以下是引用yming在2021-08-27 11:53:29的发言 >6楼

是写一个FC(不需要写多个功能一样的FC),它的输入是Variant,它的输出是Variant。FC 的处理功能(操作内容)是一样的。

针对不同数据类型的FB,其调用这个同一个FC。

这里仅仅用到的功能是:数据类型不正确,不执行(不需要判断)。

FC仅使用临时变量。


可以通过ENO 来判断段指令是否正确执行


人生就像一场旅行!
以下网友喜欢您的帖子:

  
至圣

经验值: 13937
发帖数: 2008
精华帖: 43
回复:variant在队列中的应用困惑


只看楼主 9楼 2021-08-27 15:14:38
以下是引用Zane在2021-08-26 14:04:36的发言 >4楼

博途的MOVE指令就是这样的,但两边的数据类型还是要人工匹配的

以下是引用Letham在2021-08-26 08:29:06的发言 >3楼:其实还是有好处的吗...

引用3楼详细内容:

其实还是有好处的吗,类似S7-200 里的MOVB,MOVW,MOVD指令了,现在只要一个MOV就解决了

以下是引用刚刚入门在2021-08-25 13:42:39的发言 >楼主:原来一个测试试验项...

引用楼主详细内容:

原来一个测试试验项目中编写了类似队列FIFO的程序,当时有多种数据类型,REAL、DINT和字符串都有,所以写了几个FC(其实就是数组里的数据类型不同而已)。最近准备对项目升级,想用variant数据类型把队列程序写到一个FB里。本来想就是将输入的varitant数据进行判断通过VariantGet将其传送给FB静态变量里的DINT/REAL/STRING数组进行处理,处理完再结合数据类型通过VariantPut输出给variant数据。现在发现这样操作的话数组的处理程序不是要三遍(三种数据类型)?那样的1个FB工作量和三个FC程序没有区别,所以有此困惑。variant其实用得不多,感觉自己思路错了,请大家给点建议和帮助,谢谢!

是的,不过还好,如果类型不匹配编译时还是可以看到错误信息的。


人生就像一场旅行!
以下网友喜欢您的帖子:

  
奇侠

经验值: 6265
发帖数: 696
精华帖: 19
回复:variant在队列中的应用困惑
推荐帖


只看楼主 10楼 2021-08-27 15:30:48

楼主理解完全正确。我现在采用variant来处理输入量,这样不管输入是int 还是dint,还是real,都可以处理了。一个FB就可以了。原来一直用西家配套,这样的话,一个int就解决了。现在用第三方来配套,有可能输入的就是dint,又不想再写个FB。就把原FB输入量从int变成variant


 
以下网友喜欢您的帖子:

  
侠士

经验值: 1383
发帖数: 133
精华帖: 0
回复:variant在队列中的应用困惑


只看楼主 11楼 2021-09-19 14:56:15

不能为了标准化而标准化


突破
以下网友喜欢您的帖子:

  
至圣

经验值: 13749
发帖数: 2032
精华帖: 16
回复:variant在队列中的应用困惑


只看楼主 12楼 2021-09-22 14:26:42

去看LFG 的FIFO,里面写的variant很不错的


工控毁我青春!
以下网友喜欢您的帖子:

  
侠圣

经验值: 2625
发帖数: 734
精华帖: 3
回复:variant在队列中的应用困惑


只看楼主 13楼 2021-09-22 14:45:41

FIFO不涉及具体的逻辑运算,只是简单进出栈的移入移出操作。所以使用variant的话,除了struct,基本所有PLC数据类型和udt都能支持的。用put get指令可能不太方便,不好索引,建议用block move variant指令。


 
以下网友喜欢您的帖子:

  
侠客

经验值: 653
发帖数: 21
精华帖: 1
回复:variant在队列中的应用困惑


只看楼主 14楼 2022-11-24 16:24:23

这不是很简单吗, 

泛型方法, 泛型输入, 整体移动


 
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
variant在队列中的应用困惑
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。