206 lines
7.6 KiB
Markdown
206 lines
7.6 KiB
Markdown
# 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**
|
|
|
|
<!-- TOC -->
|
|
|
|
- [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)
|
|
|
|
<!-- /TOC -->
|
|
|
|
## 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` |