签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
原来一个测试试验项目中编写了类似队列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
是有点想多了,不过呢也不是不能实现,你的想法实际就是想造一把能打不同口径子弹的枪,看弹匣了的子弹口径,决定选哪个口径的枪管。
其实比较啰嗦,枪管和弹匣的配套还是要人为确定的。
Zane版的比喻很恰当,有时为了所谓结构化(标准化)而结构化(标准化)有点作茧自缚,就像为了显示程序有档次而用SCL语言啰里啰唆去写一大堆逻辑一个道理。殊途同归,何必在意是否用最直接简单的方法实现。
其实还是有好处的吗,类似S7-200 里的MOVB,MOVW,MOVD指令了,现在只要一个MOV就解决了
引用楼主详细内容:
博途的MOVE指令就是这样的,但两边的数据类型还是要人工匹配的
新功能需要被慢慢开发
是写一个FC(不需要写多个功能一样的FC),它的输入是Variant,它的输出是Variant。FC 的处理功能(操作内容)是一样的。
针对不同数据类型的FB,其调用这个同一个FC。
这里仅仅用到的功能是:数据类型不正确,不执行(不需要判断)。
FC仅使用临时变量。
可以通过ENO 来判断段指令是否正确执行
引用3楼详细内容:
是的,不过还好,如果类型不匹配编译时还是可以看到错误信息的。
楼主理解完全正确。我现在采用variant来处理输入量,这样不管输入是int 还是dint,还是real,都可以处理了。一个FB就可以了。原来一直用西家配套,这样的话,一个int就解决了。现在用第三方来配套,有可能输入的就是dint,又不想再写个FB。就把原FB输入量从int变成variant
不能为了标准化而标准化
去看LFG 的FIFO,里面写的variant很不错的
FIFO不涉及具体的逻辑运算,只是简单进出栈的移入移出操作。所以使用variant的话,除了struct,基本所有PLC数据类型和udt都能支持的。用put get指令可能不太方便,不好索引,建议用block move variant指令。
这不是很简单吗,
泛型方法, 泛型输入, 整体移动
分享
扫码分享好友 任选多种好礼
收藏
有帮助
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录