Compare commits
36 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d1e9467395 | |||
| 5f952faad7 | |||
| c6f3f7a50a | |||
| d449d60e09 | |||
| 3caeebcffa | |||
| 1288b3f119 | |||
| 8323373e78 | |||
| b19c153466 | |||
| d97eb23b5e | |||
| fd1a74986e | |||
| 6cfc850276 | |||
| a7c3312574 | |||
| 802c748e56 | |||
| 727c03ac7f | |||
| 0835f942ee | |||
| aeab49bbc7 | |||
| db5bb9f2e1 | |||
| 8b1d297068 | |||
| 7387c51631 | |||
| 2198f01425 | |||
| 1f31183e8d | |||
| 4752bf6fcf | |||
| cb914a4f56 | |||
| 328a5fe540 | |||
| 1c1344ea63 | |||
| d09977f17a | |||
| 7eaf82a248 | |||
| 6bb6e8b4f9 | |||
| 66fd0f417c | |||
| 69540243d4 | |||
| 4b6d7b415c | |||
| c859db736f | |||
| b8c24f8458 | |||
| 40f50c27c2 | |||
| eddc8af40b | |||
| 63f5a41628 |
@@ -0,0 +1,72 @@
|
||||
[id]
|
||||
idxMacchina = 0001
|
||||
#idxMacchina = SIMUL_01
|
||||
#numParams=8
|
||||
numParams=12
|
||||
|
||||
[web]
|
||||
URLBASE = http://10.74.82.218/MP/RIOC/api/IOB/input/
|
||||
URLALIVE = http://10.74.82.218/MP/RIOC/api/IOB
|
||||
URLENABLED = http://10.74.82.218/MP/RIOC/api/IOB/enabled/
|
||||
URLADV1 = ?valore=
|
||||
URLREBO = http://10.74.82.218/MP/IOC/api/IOB/sendReboot/
|
||||
URLINFO = http://10.74.82.218/MP/RIOC/api/IOB/setM2IOB/
|
||||
|
||||
[time]
|
||||
SAMPLETIME = 0.10
|
||||
TIMEOUTSHORT = 0.50
|
||||
TIMEOUTLONG = 80
|
||||
SENDURLTIME = 0.10
|
||||
NMAXSEND = 5
|
||||
|
||||
[log]
|
||||
LOGLEVEL = 10
|
||||
LOGFILE = logfile.txt
|
||||
LOGREBO = logReboot.txt
|
||||
|
||||
[comm]
|
||||
port = /dev/ttyAMA0
|
||||
|
||||
[blink]
|
||||
MAX_COUNTER_BLINK = 30
|
||||
bit0 = 0
|
||||
bit1 = 0
|
||||
bit2 = 0
|
||||
bit3 = 0
|
||||
bit4 = 0
|
||||
bit5 = 0
|
||||
bit6 = 0
|
||||
bit7 = 0
|
||||
bit8 = 0
|
||||
bit9 = 0
|
||||
bit10 = 0
|
||||
bit11 = 0
|
||||
|
||||
[invert]
|
||||
bit0 = 0
|
||||
bit1 = 0
|
||||
bit2 = 0
|
||||
bit3 = 0
|
||||
bit4 = 0
|
||||
bit5 = 0
|
||||
bit6 = 0
|
||||
bit7 = 0
|
||||
bit8 = 0
|
||||
bit9 = 0
|
||||
bit10 = 0
|
||||
bit11 = 0
|
||||
|
||||
[filter]
|
||||
MAX_COUNTER_FILTER = 8
|
||||
bit0 = 0
|
||||
bit1 = 0
|
||||
bit2 = 0
|
||||
bit3 = 0
|
||||
bit4 = 0
|
||||
bit5 = 0
|
||||
bit6 = 0
|
||||
bit7 = 0
|
||||
bit8 = 0
|
||||
bit9 = 0
|
||||
bit10 = 0
|
||||
bit11 = 0
|
||||
+69
-2
@@ -8,20 +8,87 @@ Se il minion è taggato come iop-pi bast dare state apply, poiché dallo stato t
|
||||
* iob-pi.sls
|
||||
* iob-setup.sls
|
||||
|
||||
altrimenti meglio dare
|
||||
* iob-pi-install
|
||||
* iob-pi-upgrade
|
||||
|
||||
## approfondimenti
|
||||
va poi controllato il numero di inputs e va specificato all'inizio del file IOB.cfg a seconda che abbia 8 o 12 inputs
|
||||
|
||||
<code>
|
||||
#numParams=8
|
||||
|
||||
numParams=12
|
||||
</code>
|
||||
|
||||
|
||||
## Approfondimenti
|
||||
|
||||
Valutato python-rq x gestione code con redis tramite esecuzione workers python gestiti in autonomia:
|
||||
|
||||
<code>
|
||||
https://python-rq.org/
|
||||
|
||||
https://python-rq.org/docs/workers/
|
||||
</code>
|
||||
|
||||
Testato ma al momento non è rispondente ai requisiti del programma per cui si rischia un blocco inf ase di invio se server non OK, per ora implementata copia "manuale" della coda verso redis per salvaguardare dati accumulati (vers 2.6.x)
|
||||
|
||||
|
||||
## MD5 zip##
|
||||
|
||||
creazione MD5: da powershell
|
||||
|
||||
<code>
|
||||
Get-FileHash .\Mapo.zip -Algorithm MD5
|
||||
</code>
|
||||
</code>
|
||||
|
||||
|
||||
## ReadParallela IOB-PI
|
||||
|
||||
### Panoramica
|
||||
`readParallela.py` è uno script di acquisizione dati ad alta frequenza progettato per Raspberry Pi. Interfaccia una scheda GPIO personalizzata per leggere 12 ingressi digitali paralleli, applica vari filtri di elaborazione del segnale e mette in coda gli eventi per la trasmissione asincrona a un server remoto tramite Redis e HTTP.
|
||||
|
||||
### Funzionalità Principali
|
||||
|
||||
#### 1. Acquisizione e Elaborazione Segnali
|
||||
Lo script interroga 12 pin GPIO a un intervallo configurabile (`SAMPLETIME`). Per ogni ingresso, applica una pipeline di elaborazione a tre stadi:
|
||||
* **Inversione:** Inverte la logica del segnale se configurata per un bit specifico.
|
||||
* **Filtraggio Segnali Brevi (Debounce):** Filtra i picchi elettrici o il rumore richiedendo che il segnale rimanga stabile per un numero specifico di cicli (`MAX_COUNTER_FILTER`).
|
||||
* **Gestione Blinking:** Rileva e gestisce segnali "blinking", permettendo il rilevamento di eventi basati su timing specifici.
|
||||
|
||||
#### 2. Impacchettamento Dati
|
||||
Una volta elaborati, i 12 bit vengono aggregati in un unico valore intero e convertiti in una stringa Esadecimale.
|
||||
|
||||
#### 3. Code e Trasmissione Eventi
|
||||
Per garantire che la lettura ad alta velocità non sia interrotta dalla latenza di rete:
|
||||
* **Coda Redis:** Le variazioni rilevate (e gli eventi di timeout) vengono datate e inserite in una lista Redis (`IOB`).
|
||||
* **Invio Asincrono:** Un thread dedicato in background (`svuotaCoda`) estrae periodicamente gli elementi dalla coda Redis e esegue richieste HTTP a un server centrale.
|
||||
* **Affidabilità:** Lo script implementa un meccanismo di "retry" e monitora la disponibilità del server (`URLALIVE`) per gestire i periodi offline.
|
||||
|
||||
#### 4. Gestione Timeout
|
||||
Lo script monitora due tipi di timeout:
|
||||
* **Timeout Breve:** Assicura che lo stato di un segnale venga registrato anche se cambia rapidamente.
|
||||
* **Timeout Lungo:** Fornisce un sistema di fallback per garantire la coerenza dello stato su periodi più lunghi.
|
||||
|
||||
### Dettagli di Implementazione (Versione Refactored)
|
||||
Lo script è stato modernizzato con i seguenti miglioramenti:
|
||||
* **Design Orientato agli Oggetti:** La logica è incapsulata all'interno della classe `ReadParallelaIOB`, eliminando la dipendenza da variabili globali pericolose.
|
||||
* **Operazioni Bitwise Efficienti:** Sostituzione dei controlli manuali `if` con operatori bitwise per una ricostruzione dei bit più veloce e ottimizzazione dell'accesso agli attributi nelle loop critiche.
|
||||
* **Networking Moderno:** Sostituzione di `urllib` con la libreria `requests` per una comunicazione HTTP più robusta e leggibile.
|
||||
* **Configurazione Ottimizzata:** Utilizzo di cicli per caricare le impostazioni per singolo bit dal file di configurazione.
|
||||
|
||||
### Configurazione
|
||||
Le impostazioni sono gestite tramite `IOB.cfg`, tra cui:
|
||||
* `[time]`: Frequenze di campionamento e timeout.
|
||||
* `[id]`: Identificativo macchina.
|
||||
* `[web]`: URL per la trasmissione dati e controlli di connettività.
|
||||
* `[blink]`, `[invert]`, `[filter]`: Configurazione per singolo bit per l'elaborazione dei segnali.
|
||||
* `[log]`: Livello di logging e percorsi dei file.
|
||||
|
||||
### Dipendenze
|
||||
* `RPi.GPIO`: Per l'interfacciamento hardware.
|
||||
* `redis`: Per la gestione della coda locale.
|
||||
* `requests`: Per la comunicazione web.
|
||||
* `configparser`: Per la gestione della configurazione.
|
||||
|
||||
|
||||
|
||||
Binary file not shown.
+3
-1
@@ -8,13 +8,15 @@ Conflicts=shutdown.target
|
||||
|
||||
[Service]
|
||||
Type=forking
|
||||
Restart=no
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
TimeoutSec=5min
|
||||
IgnoreSIGPIPE=no
|
||||
KillMode=process
|
||||
GuessMainPID=no
|
||||
RemainAfterExit=yes
|
||||
SysVStartPriority=1
|
||||
ExecStartPre=/bin/sleep 5
|
||||
ExecStart=/etc/init.d/MapoIOB start
|
||||
ExecStop=/etc/init.d/MapoIOB stop
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user