DECLARE
tmp VARCHAR2(2000);
tmp2 VARCHAR2(2000);
tmpfun VARCHAR2(2000);
allstr VARCHAR2(2000);
type curtype is ref cursor;
mycur2 curtype;
CURSOR mycur IS
SELECT
t.itemno,
t.itemname,
t.itemtype,
t.itemvalue,
t.itemfunction,
t.itemlength,
t.fillchar
FROM t -- 此处t应为工艺配方表
WHERE t.station = I_STATION -- 此处可添加更多的筛选条件
ORDER BY t.itemno;
BEGIN
-- 1. get all item for station
tmp := '';
tmpfun := '';
allstr := '';
FOR rec IN mycur
LOOP
IF rec.itemtype = 0
THEN tmp2 := rec.itemvalue; -->
get value
ELSE --> get function
tmpfun := rec.ITEMFUNCTION;
tmpfun := tmpfun || '(''' ||
TO_CHAR(I_SN) || ''')';
tmpfun := 'SELECT ' || tmpfun || '
myvalue FROM dual';
OPEN mycur2
FOR tmpfun; --> get item function
FETCH mycur2 INTO tmp2;
close mycur2;
END IF;
tmp := LPAD(tmp2, rec.itemlength,
rec.fillchar);
allstr := allstr || tmp;
END LOOP;
RETURN allstr;
|
2016年4月18日
浅谈MES的通用设计之:工艺参数的下载
2016年3月29日
MES中的松耦合设计一例
在不少领域,MES深入地参与现场作业,如将防错、配方等指令下发给工位和设备PLC,以指导现场作业。
通常这种MES与设备PLC的交互是实时通过OPC进行的,并且伴随不少的握手互锁逻辑。
但是在一些工厂,业务部门出于对IT系统的不信任,明确要求在MES服务器宕机的情况下不影响现场作业,从而实现所谓的松耦合设计。
以发动机拧紧防错为例,通常拧紧防错的方法是在MES里配置的,比如将机型在各工位的防错方法分配到拧紧枪号,并定义方向、次数、套筒号、扭矩等参数,但是拧紧的实现操作是由工位PLC配合拧紧枪控制器实现的。
因此对于工位PLC来说,有两种执行防错的方式:
方式一:每次当发动机到达拧紧工位时,工位PLC从MES下载拧紧防错参数,然后执行拧紧作业,此谓与MES的紧耦合设计,依赖与MES的实时通讯。
方式二:每次当发动机到达拧紧工位时,工位PLC从MES之外的某个介质获取拧紧防错参数,然后执行拧紧作业,此谓与MES的松耦合设计,不需要与MES进行实时通讯。
方式二的介质主要有两种:RFID与条码。
如下图所示,防错配置数据通过MES服务器>>OPC服务器>>IT PLC>>工位PLC>>RFID进行传递,在上线工位由工位PLC写到RFID上,并可在实际上线作业发生之前提前下载并缓存到IT PLC上,从而实现上线工位的松耦合。
当发动机到达装配工位时,工位PLC从RFID中提取防错配置数据,然后与拧紧枪控制器一起执行拧紧作业,因此拧紧作业发生时也不需要与MES进行实时交互。
利用条码进行防错也非常类似,在上线工位为每个拧紧工位打印一张拧紧参数条码,然后张贴到随车单上,当发动机到达拧紧工位时,操作工扫描对应工位的条码,即可将拧紧参数传递给工位PLC。
前面提到的IT PLC可以起到一个关键的数据缓存作用,即在上线作业实际发生之前,提前将上线所需的工单和防错配方等数据下载到IT PLC,这样在上线时,工位PLC直接从IT PLC获取数据,从而绕开了MES上层应用环境。
此外,IT PLC还可以起到数据上传的缓存作用,即设备PLC将业务数据(如过站记录和追溯数据)同步给IT PLC(工位PLC在普通作业工位将数据写到RFID,然后在同步工位将数据提取出来同步给IT PLC),然后由IT PLC在MES系统可用时同步到MES服务器,这样对于工位PLC而言,它无须与MES服务器进行通讯,更加专注于装配作业本身。
2016年3月17日
MES案例研究3 – 质量门检查
2016年3月9日
MES案例研究2 – OPC网络阻塞
2016年2月24日
MES案例研究1 - 大表并发查询
|
SELECT
MIN(serial_number)
FROM
t_product_history
t
WHERE t.type = ‘PN1’ //产品类型
AND t.status = 1; //产品状态,1表示尚未镭雕
|
|
SELECT
MIN(Current_sn),
//当前序列号
Pointer
//当前指针值
FROM
t_wo_pointer
WHERE t.type = ‘PN1’ //产品类型
AND t.status = 1; //产品状态,1表示尚未镭雕
|

