图中是8工位瓷砖分拣系统示意图:
蓝色是光电开关,瓷砖从左方入料口进入分拣系统,皮带输送,皮带在分拣出砖的时候不停止;
总共有八种类别的瓷砖需要分类,当瓷砖经过左边第一个光电的时候,操作员通过操作屏将此瓷砖的类别输入PLC系统,比如属于第一类就输入1,以此类推。8个出砖工位分别对应8个瓷砖类别,各有一个光电确定瓷砖到了该工位,当属于这一工位类别时利用气缸将瓷砖推入出瓷砖机构进行出砖,反之瓷砖继续在瓷砖上输送,如果出砖机构还没结束本次出砖动作的时候,属于本类的瓷砖已经到达光电位置,则放弃此瓷砖,让皮带将其输送到系统做右方,即放弃分拣此瓷砖。同时,用户可以将几个工位设置成一个种类。
我想了一下可以建立一个表格来管理瓷砖的种类,但是由于瓷砖可能不是连续进入的,而且同一种类的瓷砖有时会来很多片,这个从算法上怎么处理好一点。
问题补充:
图片
图片说明:
最佳答案
在第一个开关处操作员输入类别号,在1到8之间,建一个表,把类别号送入表中,类别号送入表中前进行处理,1变为00000001,2为00000010,3为00000100,依次类推。表格数据先入先出。
当第一个开光触发时,从表头取值赋给vw0,如果v1.0为1,则出砖口1动作,然后vw0右移一位赋给vw2。
当第二个开光触发时,若v3.0为1,则出砖口2动作,然后vw2右移一位赋给vw4。
当第三个开光触发时,若v5.0为1,则出砖口3动作,然后vw4右移一位赋给vw6。
后面以此类推。
如果砖块未能出去,因为它代表的数据已经右移为0,所以即便传递后面也不会再触发任何一个出砖口。
程序如下,拷贝到一个文本文件里可以直接导入到编程软件里。
ORGANIZATION_BLOCK 主程序:OB1
TITLE=I2.0为类别检定电眼;I0.0-I0.7为1到8号砖块检测电眼,I1.0-I1.7为1到8号出砖机构检测电眼,为1代表机构正在出砖。
// vw200为表头,表长度在初始化定义时可根据工艺要求设定一个合适的表长,可以足够存储第一个类别识别电眼和1号出砖电眼之间的砖块数。
// vb100为上位机给定的类别号,1-8之间。
// vb1-vb8存放当前类别号。
BEGIN
Network 1
// 初始化表,定义表长
LD SM0.1
MOVW 6, VW200
AENO
FILL 0, VW202, 7
Network 2
LD I2.0
EU
DECB VB100
Network 3
// 把vb100中的1-8的类别号转变为00000001、00000010......类似的编码
LD I2.0
EU
MOVB 1, VB101
AENO
SLB VB101, VB100
AENO
BTI VB101, VW102
Network 4
// 编码填入表中
LD I2.0
EU
ATT VW102, VW200
Network 5
// 一号出砖机构砖块到达,表中取类别编号
LD I0.0
EU
FIFO VW200, VW104
AENO
MOVB VB105, VB1
Network 6
// 若为1号砖,且出砖机构未运动,输出
LD V1.0
AN I1.0
S Q0.0, 1
Network 7
LD I0.0
EU
SRB VB1, 1
Network 8
// 输出延时一段时间后自动复位,延时时间根据工艺调节。
LD Q0.0
TON T37, 50
Network 9
LD T37
R Q0.0, 1
Network 10
// 2号出砖
LD I0.1
EU
MOVB VB1, VB2
Network 11
LD V2.0
AN I1.1
S Q0.1, 1
Network 12
LD I0.1
EU
SRB VB2, 1
Network 13
LD Q0.1
TON T38, 50
Network 14
LD T38
R Q0.1, 1
Network 15
// 3到8号程序类似于2号。
END_ORGANIZATION_BLOCK
SUBROUTINE_BLOCK SBR_0:SBR0
提问者对于答案的评价:
算法不错
专家置评
可参考“空气微凉 - 资深学长 ”的思路。
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc299370.html