Table of Contents

Factory 4.0 Fabricated

Di seguito i documenti di progetto:

Di seguito la documentazione delle interfacce:

Di seguito la documentazione delle interfacce:

Processo Fac 40

App supporto magazzinieri

Aggiungere le seguenti tabelle

CREATE TABLE public.lotmap (
    codlot CHARACTER VARYING(51) NOT NULL,
    codlotp CHARACTER VARYING(51) NOT NULL,
    tm INTEGER,
    DATA CHARACTER VARYING(9),
    ora CHARACTER VARYING(9),
    codoper CHARACTER VARYING(51),
    codnote CHARACTER VARYING(51),
    qta DOUBLE PRECISION
);
COMMENT ON TABLE public.lotmap IS 'Mappa un lotto nuovo ad uno o piu'' lotti padri da cui si e'' generato';
ALTER TABLE ONLY public.lotmap
    ADD CONSTRAINT codlot_codlotp_pkey PRIMARY KEY (codlot, codlotp);
ALTER TABLE ONLY public.lotmap
    ADD CONSTRAINT ix_lotmap_codlot FOREIGN KEY (codlot) REFERENCES public.lottim(codice) ON UPDATE CASCADE ON DELETE CASCADE;
ALTER TABLE ONLY public.lotmap
    ADD CONSTRAINT ix_lotmap_codlotp FOREIGN KEY (codlotp) REFERENCES public.lottim(codice) ON UPDATE CASCADE ON DELETE CASCADE;
CREATE TABLE public.lotprod (
    codlot CHARACTER VARYING(51) NOT NULL,
    codprod INTEGER NOT NULL
);
ALTER TABLE ONLY public.lotprod
    ADD CONSTRAINT ix_lotprod_codlot_codprod PRIMARY KEY (codlot, codprod);
ALTER TABLE ONLY public.lotprod
    ADD CONSTRAINT ix_lotprod_codlot FOREIGN KEY (codlot) REFERENCES public.lottim(codice) ON UPDATE CASCADE ON DELETE CASCADE;
ALTER TABLE ONLY public.lotprod
    ADD CONSTRAINT lotprod_codprod FOREIGN KEY (codprod) REFERENCES public.produbi(codice) ON UPDATE CASCADE ON DELETE CASCADE;

Viene costruito l'agente AgentLog40

operazionerequestparametroritorno
askbaiestatusrec(codubi) codice della macchina di cui si chiede lo statorec(stato,codop,codart,descrizio,npz,tnuovamis,npztot,call,alarmcall,codoper) ove
stato = 0(mancanza materiale), 1(OK), 2(da caricare), 3(in caricamento)
codoper = codice dell'operatore che eventualmente ha in carico la missione per la specifica macchina
askinfopalletrec(codlot,codoper) in input può arrivare il pallet o un pezzo del pallet per vedere le informazioni del pallet stesso, passa anche il codice dell'operatore connessorec(codlot,ruek,codart,descrizio,codpf,descpfnpz,coil,isempty,codubi,dubi,visevadi,abievadi)
ruek = lista di ruek + codubi + dubi associati al pallet; gli attributi sono divisi da pipe, gli elementi da virgola
codubi, dubi = location ove il pallet si trova, vuoto se non e' da nessuna parte
visevadi = 1 se il codoper e' in qualche ubicaz.codoper con tiposet='P' e stato='B' altrimenti vale 0
abievadi = 1 se
a) il pallet e' configurato con RUEK dello stesso codubib che ha la location assegnata all'operatore
b) tutti i ruek richiesti siano inseriti
c) se richiesto sia specificato il codpf
altrimenti vale 0
askchangepalletrec(codlotold,codlotnew) palletold è il pallet da cui parte il trasferimento, palletnew è il pallet dove verrà spostato il materiale dell'old
update giacese set codubi='codlotnew' where codubi='codlotold';
update lotprod set codlot='codlotnew' where codlot='codlotold';
update lottim set codart=OLDLOT.codart,codagg=OLDLOT.codagg where codice='newcodlot';
update lottim set codart=' ',codagg=' ' where codice='oldcodlot';
rec(OK) se tutto OK, rec(err) se ci sono errori
sapnis.askgettc
(viene svolta ogni volta che si legge un ruek)
rec(rueck)rec(dati_ruek,codubi) se trovato, rec(null) se non trovato
codubi = codice del centro di lavoro associato
asksavepallet
(crea la produbi e la associa al pallet; a produbi non viene avviata)
0) confronta il contenuto attuale del pallet con quello richiesto (codart + codpf + qta + ruek)
1) crei un lottim per ogni unità di qta mettendo anche il codpf (lottim.codagg)
2) depositi i lottim nel pallet
rec(codlot,ruek,codart,qta,codagg) ruek puo' avere piu' di un ruek divisi da virgola del tipo:
ruek pipe codubi virgola …
rec(OK) se tutto OK, rec(err) se ci sono errori
askinitpalletrec(codlot,codcoil) ruek puo' avere piu' di un ruek divisi da virgolarec(OK) se tutto OK, rec(err) se ci sono errori
askconfirmcallrec(codubi,codoper) codice della macchina per la quale l'operatore prende la missione, operatore che prende la missionerec(ok) se tutto OK, rec(err) se ci sono errori (oppure potrebbe essere richiamata la baiestatus
askevadimissionerec(codubi,codlot) codice della macchina per cui si sta evadendo la missione, codice del pallet interessatorec(ok) se tutto OK, rec(err) se ci sono errori; temporaneamente l'agente svolge i seguenti passi:
1) cerca una baia vuota della linea in ordine di pos
2) deposita nella prima baia vuota che trova
3) se non trova baie vuote da errore svolge lo stesso 4, 5
4) setta ubicaz.codoper='' e ubicaz.stato='A' per la macchina
Nella versione definitiva saranno svolti solo i punti 4, 5

Al fine di identificare la baia in fase di lavorazione si utilizzerà il flag ubicaz.stato:

Personalizzazione

Flusso dati

Cambio produzione

Ingresso Pezzo



Dataset ingresso pezzo:

d1=codubi, d2="workorder"
Nome campoDescrizio
codlotCodice della matricola in ingresso letta dal OPC e resettata da IMPROVE
codopWorkorder scritto da IMPROVE
codmodCodice prodotto in lavorazione scritto da IMPROVE
qtaQuantità da produrre per il WO scritto da IMPROVE
codaggCodice della ricetta scritto da IMPROVE

Dataset uscita pezzo:

d1=codubi, d2="exit"
Nome campoDescrizio
codlotCodice della matricola in uscita letta dal OPC e resettata da IMPROVE

Dataset fermate stato macchine:

d1=codubi, d2="fermate"
Nome campoDescrizio
pres_status Stato della macchina pressa valori 1=ready 2=work 3=not ready
bay_status Stato della baia di carica e scarico valori 1=pronta 2=lavorazione 3=caricare scaricare
*_piece Stato della presenza pezzo valori 0=non presente 1=presente
pres_oil Stato olio del livello oil valori 0=KO 1=OK
robot_status Stato del robot valori 1=Errore 2=stop 3=run

Piano attività