签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
一、在写自动流程的时候,经常会对PLC自动程序(通常是FB块)进行操作。
工控方面气缸是最普通的应用。所以经常会使用Set(气缸工作),Reset(气缸返回)对气缸进行操作。当然这两个一般不直接用输出点。
在一个程序中可能有几十乃至上百个气缸,所以会对各个气缸进行分类(主要是功能及位置)。在这个FB 功能里面只有两个气缸。分别为顶升气缸及升降(下压)气缸。
XA和XB为输入,分别对应1#气缸工作位和返回位;
YA和YB为输入输出,对应自动时候刷气缸的变量;
实际上自动功能,就是刷这两个气缸及附属工作的。假如叫名称DB_Cylinder.1.AutoGoWork和DB_Cylinder.1.AutoGoHome
在实际情况下,可能有不同的地方会用到这个气缸的输入输出接口,例如标定位置。
所以在这个FB块没有对输入输出进行操作(DB_Cylinder.1.AutoGoWork、DB_Cylinder.1.AutoGoHome)。而另外一个地方,例如标定位置也有一个FB块想刷这两个变量,也是输入输出接口。会导致标定的FB块无法将这两个输入输出变量Set或者Reset。我的印象中300的PLC是不可以,1500的LAD块有时候可以,有时候不行。可能跟FB块扫描顺序有关系。但是这种情况也不应该算双线圈输出;
以前因为这个也问过别人。有的同事说Graph可以。
所以这具体跟什么情况有关系?有的时候为了避免这个麻烦,做自动程序的时候,将标定FB前面EN给屏蔽,不让标定的FB块运行。
二、在数据传输的时候,会使用UDT。例如有一个泵,后屁股有二维码,进行扫码、拍照工作。会将信息从一个夹爪传递到另外一个夹爪,最终有可能两个夹爪上的产品信息合并。
所以这个UDT可能包含的信息有型号(INT)、二维码(string)、读码结果(INT)、拍照结果(INT)等等。
这个信息,考虑到通用性,很大概率也是放在FB的输入输出接口上的(我是喜欢这样操作,这样不同的FB块可以拷来拷去)。
例如初始化话时候,该位置夹爪打开、或者夹爪上没有产品。会将这个UDT全部FILL清零。夹爪上有产品,同时判断PLC记忆中的数据是不是匹配。假如这个位置记忆中没有产品,但是存在了一个产品,需要提示将产品取掉。或者记忆中是型号A的产品,产品换型了,现在做的是B的产品,需要型号匹配,要不然误动作,会将机器人或者其他的东西碰坏。
字符串(String)作为UDT中的一个参数,并且作为IO输入输出接口,在没有东西的情况下,会对整个UDT区进行FILL清零操作。
如果下次又有产品了,通过move或者smove,都发现了博图系统的一个Bug,
西门子的字符串前面有两个byte,分别对应字符串长度和有效长度。move或者字符串move后,有效长度仍然为0。后面的字符串也是存在的。但是因为少了报文前面的有效长度,导致该字符串不能够被识别。需要额外给这个有效长度赋值。
也曾尝试过,将string单独拎出来当成输入输出接口变量是没有问题的。
曾经测试过,不对这个UDT进行FILL可以使用。不知道什么鬼。但是在两个夹爪之间信号交换肯定会用到Block_MOVE进行传递,同时将原有数据区FILL的情况。
处理方法,也是没有办法的办法。建立char数组。将char数组转换成字符串;
所以有没有遇到上面两个问题的朋友有什么好方法的。
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1617151&b_id=66&s_id=0&num=2
UDT初始化目前直接赋值是有问题的,可以建一个公共的NULL的UDT,用于数据初始化
一团浆糊!
分享
扫码分享好友 任选多种好礼
收藏
有帮助
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录