diff --git a/StateMachine/README.md b/StateMachine/README.md new file mode 100644 index 0000000..7fc2b1f --- /dev/null +++ b/StateMachine/README.md @@ -0,0 +1,206 @@ +# State MAchine + +Qui sono raccolte le state machine in termini di file origine (*.rul) e file di configurazione delle state machine ingressi dei vari **IOB** + + + +- [State MAchine](#state-machine) + - [Standard Tecnici](#standard-tecnici) + - [Definizione ed acronimi](#definizione-ed-acronimi) + - [Descrizione Impiego](#descrizione-impiego) + - [Sintassi file RULES](#sintassi-file-rules) + - [Commento iniziale](#commento-iniziale) + - [Definitions](#definitions) + - [BIT](#bit) + - [STATES](#states) + - [EVENTS](#events) + - [**RULES**](#rules) + + + +## Standard Tecnici + +Il progetto impiega i seguenti standard tecnici: + +- http call +- Python 2.7 (R-IOB) +- asp.net / C# (W-IOB) + +## Definizione ed acronimi + +Di seguito una legenda degli acronimi usati in seguito (per Compoenti, Sistemi, Attori, ...): + +| Acronimo | Definizione | +| ----------- |:--------------------------------------------------| +| **MapoState** | Applicazione epr compilazione rul --> stati | +| ***.rul** | RULES: File regole generazione macchina a stati | +| ***.csv** | CSV: File compilato macchina a stati | + +## Descrizione Impiego + +Il sw principale (che deve tipicmaente trovarsi installato in c:\lavori) permette di compilare un file rul per generare la macchina a stati come file csv che può venire caricato nel DB nelal tabella delle **TransizioniIngressi** ovvero quella ceh descrive la macchina a stati degli ingressi epr il riconoscimento degli **EVENTI MACCHINA** del sistema Mapo + +## Sintassi file RULES + +Il file dei rules prevede la seguente struttura riportata e commentata a blocchi di seguito. I commenti iniziano col carattere **#**. + +### Commento iniziale + +L'area iniziale prevede i commenti descrittivi tra cui + +- nome macchina +- ragionamento globale macchina a stati deis egnali **S.IOB** +- modalità di implementazione sistema contapezzo +- ... + +``` +# +# Donati Macchine SM05 , SM06 , SM09 , SM10 ( PLC Stefano ) +# Macchine Ghidini +# +# v.1 31-X-2013 prima versione compilata : sostituisce versione scritta a mano +# v.2 9-XII-2013 rimessa regola : se segnale contapezzo, vale per tutti gli stati +# +# volendo fare i fighi , bit 4 sulla SM10 � fine nastro OR fine Spazzola +# +# nella macchina manuale era definito uno stato 8 "Scarico pieno" ma su queste macchine non c'� il segnale +# +# segnale contapezzo : non rimanda evento se gi� nello stato "Cycle end" <<<< no dalla versione 2 +# si faceva fottere da 3 o + campioni a 7 in ingresso +# primo input a 7 --> stato end cycle +# secondo input a 7 --> stato run !!! ( mancava la regola ) +# terzo input a 7 --> di nuovo stato end cycle ( e quindi un pezzo in pi� ) +``` + +### Definitions + +La seconda area è quella delle definizioni degli "ingredienti" del file di generazione della macchina a stati, con alcune aree di seguito definite + +- In primis sono definiti + - nome del ruolo + - **IDX** ovvero chaive univoca della **Famiglia Ingresso** + - numero Stati previsti + - numero bit di ingresso gestiti + +```csharp +$DEFINITIONS + +$NAME : stefano +$IDX : 11 +$N_STATES : 8 +$N_BITS : 8 +``` + +### BIT + +Successivamente vanno definiti i singoli bit (zero based) in quantità pari a quanto definito prima, attenzione al nome perché poi sarà chiave per le fasi successive + +```csharp +#definizione bit : obbligatorio iniziare da 0 + +$BIT : 0 : power_on +$BIT : 1 : run +$BIT : 2 : end_cycle +$BIT : 3 : alarm +$BIT : 4 : fine nastro +$BIT : 5 : manual +$BIT : 6 : spare1 +$BIT : 7 : spare2 +``` + +### STATES + +In modo analogo ai bit vanno definiti tutti glis tati previsti e configurati: + +- nome status deve iniziare (per convenzione) per ST_ +- vanno previsti MINIMO gli stati di init, power on, run, alarm, manual + +```csharp +#definizione stati : obbligatorio iniziare da 0 + +$STATE : 0 : ST_Init +$STATE : 1 : ST_Power off +$STATE : 2 : ST_Machine ready +$STATE : 3 : ST_Run +$STATE : 4 : ST_Cycle end +$STATE : 5 : ST_Alarm +$STATE : 6 : ST_Broken belt +$STATE : 7 : ST_Manual +#####$STATE : 8 : Output full +``` + +### EVENTS + +A questo punto sono indicati gli eventi che si potranno inviare a valle. QUesti DEVONO corrispondere agli eventi configurati nel DB di MAPO + +- gli eventi sono zero-based come indice interno +- i primi eventi riportati (EV_00 .. EV_12) NON saranno poi gestiti dalla macchina a stati, sono infatti eventi MANUALI gestiti dal DB centrale tramite interfaccia **TAB** +- vanno inseriti (e poi gestiti) quindi tutti gli eventi HW previsti e nel caso siano necessari nuovi eventi vanno configurati in modo analogo anche sul DB centraleS + +```csharp +#definizione eventi : obbligatorio iniziare da 0 + +$EVENT : 00 : EV_00 +$EVENT : 01 : EV_01 +$EVENT : 02 : EV_02 +$EVENT : 03 : EV_03 +$EVENT : 04 : EV_04 +$EVENT : 05 : EV_05 +$EVENT : 06 : EV_06 +$EVENT : 07 : EV_07 +$EVENT : 08 : EV_08 +$EVENT : 09 : EV_09 +$EVENT : 10 : EV_10 +$EVENT : 11 : EV_11 +$EVENT : 12 : EV_12 +$EVENT : 13 : HW - init +$EVENT : 14 : HW - power off +$EVENT : 15 : HW - power on +$EVENT : 16 : HW - machining +$EVENT : 17 : HW - end machining +$EVENT : 18 : HW - error +$EVENT : 19 : Barcode - cambio operatore +$EVENT : 20 : Contapezzi +$EVENT : 21 : HW - start pallet +$EVENT : 22 : HW - end pallet +$EVENT : 23 : HW rottura nastro abrasivo +$EVENT : 24 : HW manuale +$EVENT : 25 : HW nastro scarico pieno +$EVENT : 26 : Barcode - Manca Riforn. MPD +$EVENT : 27 : Timer - timeout tempo ciclo +$EVENT : 28 : Timer - timeout TURNO by tempo ciclo +$EVENT : 29 : HW - magazzino grezzi vuoto +$EVENT : 30 : HW - emergenza +``` + +### **RULES** + +Infine arrivano i veri RULES con i quali verranno costruite le macchine a stati + +- la regola è nel formato stato in cui va applicata (con la keyword **ALL_STATES** che indica tutti gli stati) +- l'input definisce quale bit genera un evento di stato (non come numero ma come nome descrittivo / 3° colonna della conf precedente) +- next state rappresenta il nuovo (micro)stato per la state machine ingressi (utile ad esempio epr definire loop/microstati transitori) +- event rappresenta l'evento che deve venire generato alal ricezione del valore in input quando ci si trova nello stato corrente +- è importante l'ordine: sarà eseguita la regola valida trovata per prima aprtendo dall'alto + +```csharp +$RULES + +# state : input : next state : event ------------------------------------------------- + +ALL_STATES : NOT power_on : ST_Power off : HW - power off +ALL_STATES : manual : ST_Manual : HW manuale +ALL_STATES : fine nastro : ST_Broken belt : HW rottura nastro abrasivo +ALL_STATES : alarm : ST_Alarm : HW - error + +# rimetta a posto la candela ! + +ALL_STATES : end_cycle : ST_Cycle end : HW - end pallet + +ALL_STATES : run : ST_Run : HW - machining +ALL_STATES : power_on : ST_Machine ready : HW - power on + +$DO +``` + +NB: il file deve chiudersi con il tag `$DO` \ No newline at end of file diff --git a/StateMachine/README.pdf b/StateMachine/README.pdf new file mode 100644 index 0000000..535cf8a Binary files /dev/null and b/StateMachine/README.pdf differ