签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
如下系统中,一台PLC控制【总进水】到储水装置中,储水装置有一个液位检测开关,当检测到水装满后,就可以随机往下面的3个搅拌装置中通水,通水满后,开始搅拌10分钟,搅拌完成后放水。
搅拌装置共有3个(#1搅拌装置、#2搅拌装置、#3搅拌装置),每个搅拌装置有1个进水阀、搅拌棒和出水阀。
1、储水装置水满后,随机选择1个搅拌装置(该装置必须空闲),假如选择空闲的#1,则#1的进水阀动作,开始注水,注水满后,开始搅拌,搅拌完成,#1出水阀动作
2、储水装置水满后,如果#1搅拌正在搅拌,因此只能从#2和#3中选择一个空闲的设备(不能选择#1,因为#1正在工作),如果选择空闲#3,则#3的进水阀动作,开始注水,注水满后,开始搅拌,搅拌完成,#3出水阀动作.
3、#1正在搅拌时,#3也有可能正在搅拌。
请求思路,#1,#2,#3的进水阀、搅拌棒、出水阀该如何控制呀!
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1615678&b_id=66&s_id=0&num=27
状态查询,1或者0
多个搅拌设备做好排序,按顺序来就可以,故障或者手动取消跳过该设备直到正常后继续参与轮询
每个搅拌设备做标志位,只有在空闲时参与轮询
允许操作的放到一个队列中,然后做一个索引变量,从1到队列长度每个周期+1,条件满足了,就把当前索引的移出队列,对这个进行操作,剩下的继续等着翻牌。如果工作完成了,继续加入到队列中
首先熟悉工艺流程
请问能说的具体点吗?
1、队列如何操作
2、如何判断哪个搅拌设备空闲
3、如何(或什么时候)让进水阀动作、让搅拌阀动作、让出水阀动作
这样的系统200Smart也能办到吧
先说储水罐利用液位开关控制总进水开关来达到储水罐的控制
每个搅拌设备利用条件判定是否满足加水条件(条件可以是多个,比如故障/手动停止/正在搅拌等等)
把几个搅拌设备编好号按照顺序先检查1#设备是否满足加水条件满足就加水(不满足就检查2#设备),加完水检查2#设备是否满足加水条件,一直到最后一个设备,然后再从1#开始,周而复始就可以了。
根据三台搅拌设备的运行状态(搅拌FB的状态反馈信号,是否使用中)向三个连续的不同的位赋值,如1号对应写0位,2号对应写1位,3号对应写2位,以包含此三位的字节值或者字值作为总状态字节或者状态字。
利用一个输出范围为1~3(共3台搅拌设备)的随机数发生器(西门子通用库LGF中有此FC),使用上述状态字值分别穷举(此处比较暴力)从0到7的8种情况(0值对应无设备使用中,7值对应3台设备全部使用中,二进制位权,8421)结合条件表达式(如为0值时,则输出的任意在1~3之间的随机值都是合法有效值),
伪代码:
if statusWord = 0 then//3台设备都未使用
mixID := randomRetVal;//随机数FC生成的1~3之间的任意数
end_if;
... ...
if statusWord = 7 then//3台设备全部使用中
;//执行空指令
得到合法的随机值,将此随机值按分别等于1,2,3的比较触点,赋予搅拌设备FB接口的start管脚,作为执行1,2,3搅拌设备FB的条件,二级搅拌FB块“mixingEquipment”在总功能块“tank"中作为多重背景使用,至此完成项目要求。
一码归一码,有码才有益。
@qing__lin__li 上面采用穷举法列出所有可能求mixID的方法不够通用,在设备数量比较少时尚可行,数量多了就不简洁了,有好方法的话不妨一起讨论讨论。
有没有搅拌机的各种工作状态
工作状态,水有没有满,等等信号
有这些就可以做当个搅拌机的工作流程了
剩下的就按照需求调用了
有水满标识和水空标识
设计2个队列,其中队列A用于存储空闲设备,另外一个队列B用于存储正在工作的设备。
1、初始化时,队列A为满,队列B为空
2、如果选定#1设备开始工作,则从队列A中将#1删除,然后添加到队列B。
3、如果#1设备工作结束,则从队列B中将#1删除,然后添加到队列A。
不知道可行不可行
这这方面还有点搞不清楚
假如:这次选择#1设备,#1设备开始工作,需要启动#1的进水阀;当#1设备工作完成,需要关闭#1的进水阀,该怎么开启和关闭#1进水阀呀(带电开、失电关)
这就要看工艺了
引用9楼详细内容:
使用Shine圣所提到的队列实现当然也可以,而且单从技巧上讲更精妙,更通用,抽象的是更本质的东西,涉及插入元素、删除元素,统计元素、间接寻址元素等数据结构方面的操作。但是对于你可能暂时用不上,因为从易到难循序渐进的学东西才更现实。
不知道你这个题目只是一道学习的练习题,还是某考试的试题。
先用最“笨”的方式实现它,然后再学习更精妙的技巧。
我上一张图,你琢磨琢磨。
亿图 官网链接
我来个通用的思路,假设有n个搅拌装置,建立一个db1数据块,里面建立一个数组名字为“搅拌装置”,数组元素为自定义变量类型,存放搅拌装置的状态信息,例如是否空闲,传感器信号,阀的动作信号等信号。
然后在空闲的搅拌装置中生成一个随机数X(这一步没想到怎么实现,有思路的可以讨论一下)
将DB1.搅拌装置[X].是否空闲信号,DB1.搅拌装置[X].动作信号等信号传入FC块,
在FC块里实现搅拌装置的控制
1、储水装置水满后(检测到DI信号)选择空闲的#1搅拌设备
2、#1搅拌设备开始进水(进水阀带电,即:Q100.0带电)
3、#1搅拌装置装满后(检测到DI信号),则关闭进水阀,即:Q100.0失电
4、然后开始搅拌,搅拌10分钟后
5、#1搅拌装置开始放水(出水阀带电,即:Q100.1带电)
6、水旋放完后,检测到DI信号,出水阀失电,即:Q100.1失电。
问题是:现在有3个搅拌装置,在OB1中需要始终让各自的进水阀要么带电,要么失电,我怎么
在程序设置 根据选择空闲设备的情况来让对应的进水阀和出水阀带电呢?
s,r指令置位,复位输出
分享
扫码分享好友 任选多种好礼
收藏
有帮助
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录