Sviluppiamo applicazioni desktop multipiattaforma Windows/macOS/Linux

Garda Informatica è una software house specializzata nella progettazione, sviluppo e realizzazione di applicazioni desktop multipiattaforma (Windows/macOS/Linux).

Sviluppiamo software standalone comprensivi di installer e software di interfaccia utente nel campo dell'automazione industriale e nel campo embedded.

Il nostro approccio prevede l'uso di tecnologie originariamente nate nel mondo web e oggi disponibili anche nel mondo desktop. Questo ci permette di realizzare software e interfacce desktop in tempi rapidi e in modo che siano flessibili al cambiamento: abbiamo sviluppato software di automazione con oltre 20 richieste di modifiche strutturali in corso d'opera.

Inoltre le interfacce di queste applicazioni ereditano lo "stile" web moderno e di conseguenza sono intuitive, multipiattaforma, esteticamente accattivanti, pensate per schermi touch.

Garda Informatica opera principalmente nelle provincie di Brescia, Cremona, Bergamo e Verona.

Ambiti delle applicazioni desktop#

Operiamo nei principali ambiti in cui si rende necessario lo sviluppo di applicazioni Desktop.

Automazione Industriale

Realizziamo software di automazione industriale comprensivi di:

  • Interfacce Uomo Macchina pensate per schermi touch screen;
  • Logica di automazione industriale;
  • Logica di controllo e supervisione;
  • Controllo degli stati di funzionamento;
  • Gestione degli allarmi;
  • Archiviazione dei dati di processo su Database;
  • Gestione Log;
  • Multilingua;
  • Multiprofilo e Multiutente;
  • Integrati con i gestionali aziendali;
  • Interfacce di Calibrazione;

Configurazione di dispositivi hardware

Nei campi della domotica, sicurezza e Internet of Things capita spesso di installare un dispositivo hardware e configurarlo via PC (es. sensori di allarme, telecamere di videosorveglianza, ecc.). La configurazione del dispositivo hardware viene fatta per mezzo di un software desktop di comando.

I software di configurazione che realizziamo hanno le seguenti caratteristiche::

  • multipiattaforma (per poter essere eseguiti sia da installatori con PC windows che installatori con PC macOS);
  • comprensivi di installer;
  • multilingua;
  • multiruolo e multiutente (es. utente installatore con permessi diversi da quelli dell'utente "verificatore")
  • con generazione di report e stampe PDF;
  • con mini CAD per la configurazione spaziale dei dispositivi;

Prototipi

Studiamo e realizziamo prototipi per testare nuove idee nei seguenti ambiti:

  • Sistemi di Sicurezza;
  • Sistemi di Videosorveglianza;
  • Cloud Computing;
  • Macchine di automazione industriale;
  • Software per il settore medicale;
  • Software M2M (Machine To Machine);
  • Software per la Domotica;
  • Software IoT (Internet of Things);
  • Prototipi per Smart City;

Ingegnerizzazione

Effettuiamo ingegnerizzazioni di prodotto compiendo scelte di progetto riguardanti:

  • Ambienti di esecuzione;
  • Linguaggi;
  • Protocolli;
  • Database;
  • Strategie di Refactoring;
  • Studi di Usabilità;

Portfolio#

Case History: Algoritmo OCR numeri pettorine atleti

Software personalizzato per il riconoscimento automatico tramite OCR dei numeri delle pettorine degli atleti di un evento sportivo. L'utente effettua il training di un gruppo di immagini e l'algoritmo OCR riconosce e classifica in autonomia i numeri di pettorina di ogni fotografia.

Case History: Interfaccia touch QT Embedded in ambiente Linux

Interfaccia touch di controllo realizzata con le QT Embedded in ambiente Linux. Scheda: F&S armStone™ A5 con processore Freescale Vybrid Cortex-A5. Sistema di sviluppo: Qt Creator/Eclipse CDT (con remote debugging), Qt Embedded, Buildroot, U-Boot e Kernel Linux ricompilato su misura.

Vai all'elenco completo

Cos'è e come funziona un software di automazione industriale?#

Ogniqualvolta c'è bisogno di automatizzare un qualche processo produttivo ecco che si può pensare di realizzare un macchinario industriale di automazione che svolga il compito assegnato al posto di una persona umana. Il macchinario realizzato è a tutti gli effetti un robot.

Ad esempio su una linea di produzione di calze si potrebbe decidere di automatizzare l'imbustamento delle stesse implementando un nuovo robot di insacchettamento. Un altro esempio potrebbe essere un macchinario automatico per la raccolta di campioni di DNA.

Un robot o macchinario industriale che sia è composto da due parti principali: l'hardware e il software.

Nella parte hardware rientra tutto ciò che c'è di meccanico come: motori, attuatori, sensori, telecamere, ecc.

Il software invece si occupa di dirigere tutte le parti hardware al fine di raggiungere il processo automatico voluto. Ad esempio il software comanderà i motori, verificherà lo stato dei sensori, verificherà la correttezza delle operazioni svolte con algoritmi di visione artificiale ecc.

Più nel dettaglio si può dire che un software di automazione è composto generalmente dalle seguenti parti:

  • interfaccia uomo macchina: un processo produttivo si può suddividere in due fasi che sono l'attrezzaggio o setup e il processo vero e proprio. Durante la fase di attrezzaggio o configurazione, un operatore tipicamente configura la macchina agendo attraverso uno schermo touch screen. Ad esempio si può configurare il tipo di sacchetto che il macchinario utilizzerà per il confezionamento delle calze, si può decidere il tipo di chiusura ecc. Oltre alla fase di attrezzaggio, l'interfaccia uomo macchina entra in gioco durante l'esecuzione dell'automazione per segnalare attraverso dei sinottici l'avanzamento e lo stato del macchinario.
  • logica di automazione o di controllo: rappresenta il cuore del processo di automazione. Questa parte del software si occupa di comandare tutto l'hardware della macchina. Il software funge da supervisore, ovvero comunica ad ogni motore ed attuatore la singola azione semplice che dovrà compiere (in gergo "missione"). Una missione potrebbe essere ad esempio una delle seguenti: solleva puncher, leggi barcode, sposta la card nella posizione x,y, ecc. Questa parte di software solitamente è realizzata come una macchina a stati finiti ciclica. Ad ogni ciclo viene realizzata un'automazione completa. Ogni cliclo è composto da vari stati come ad esempio: l'apertura del sacchetto, l'inserimento delle calze, la verifica con un sensore della presenza delle calze, l'applicazione della chiusura, il deposito del prodotto ecc. Da uno stato si passa al successivo in base al tipo di lavorazione richiesta, in base alla presenza di anomalie ecc.
  • programmazione dei motori: anche in questo caso si devono creare delle routine o delle primitive che possano poi essere richiamate dalla logica di automazione. Ogni primitiva o missione implementata si preoccupa di svolgere una singola azione atomica e a basso livello di astrazione: es. spostare la plate alla posizione x,y.
  • gestione degli allarmi e delle anomalie: in ogni processo qualcosa può andare storto. Es. la calza cade dal sacchetto, il sacchetto si rompe, il contenitore dei sacchetti si svuota, ecc. La parte di gestione degli allarmi si preoccupa di verificare tutte le anomalie che si possono verificare e decidere come comportarsi in base all'anomalia verificatasi, es. chiedere l'intervento umano, riprovare l'azione, ecc.
  • archiviazione dei dati di processo su Database: questa parte del software si preoccupa di registrare tutte le azioni svolte in modo da poterle consultare a processo finito. Questa parte del software inoltre si interfaccia con il software gestionale aziendale ad esempio per registrare la produzione di un nuovo prodotto o di un semilavorato.

Il nostro approccio nello sviluppo di software industriale e di configurazione#

Un software industriale è composto da due parti:

  • la parte di interfaccia utente che permette l'interazione dell'utente con la macchina;
  • la parte di software a basso livello che "dialoga" con la macchina;

L'approccio "classico" sarebbe quello di realizzare un software monolitico che implementa tutte e due le parti, ma è l'approccio sbagliato perché:

  • si utilizzerebbe un solo linguaggio di programmazione, ma i linguaggi a basso livello (es. C, C++) non vanno bene per realizzare interfacce usabili e accattivanti e allo stesso modo i linguaggi pensati per realizzare interfacce utente non sono indicati per implementare il dialogo a basso livello con l'hardware;
  • chi sviluppa il software dovrebbe essere un esperto dei dettagli dell'hardware da comandare (in gergo un hardwareista) e al contempo un esperto di usabilità e di sviluppo di interfacce usabili. Caratteristiche che non si trovano in una sola persona.

Il nostro approccio prevede invece di suddividere il software in due parti.

Una CLI (command line interface) realizzata direttamente da chi ha progettato l'hardware e ne conosce i dettagli. Questa parte la sviluppa tipicamente chi ha realizzato l'hardware o il firmware presente sulla scheda da comandare.

L'applicativo desktop che si occupa dell'interazione con l'utente. Noi ci occupiamo dello sviluppo di questa parte.

Le due parti software dialogano tra di loro tramite il meccanismo dei socket o delle PIPE e sono responsabili ciascuno della propria parte.

I vantaggi sono molteplici:

  • lo sviluppo può avvenire in parallelo. Una volta definito il protocollo di dialogo tra le due parti ciascuno può procedere a sviluppare la propria.
  • è possibile testare ciascuna parte singolarmente. Ad esempio per effettuare il testing delle interfacce senza avere la CLI vera è possibile realizzare una CLI "fantoccio" che simula le risposte della CLI reale e permette di provare l'interfaccia ancor prima che l'hardware sia pronto.
  • lo sviluppo può avvenire da remoto. Chi sviluppa l'interfaccia non ha bisogno di avere l'hardware fisico a disposizione.
  • la proprietà intellettuale e i segreti di chi ha progettato l'hardware restano protetti. Chi sviluppa l'interfaccia utente non ha bisogno di conoscere i dettagli dell'hardware.
  • è possibile utilizzare il linguaggio di programmazione più adatto allo scopo. I due software sono scritti da persone diverse con gli strumenti più adatti al caso.

Quanto costa un software desktop?#

Effettuare una stima del costo di un software desktop di automazione industriale o standalone è un'attività piuttosto complessa.

Si può dire che alcuni dei parametri che vengono valutati per effettuare una stima sono i seguenti:

  • numero e tipologia delle interfacce uomo-macchina;
  • numero e tipologia dei dispositivi su cui verrà eseguito il software;
  • numero e tipologia degli attuatori che andranno comandati (Es. periferiche, motori, ecc.);
  • complessità del ciclo di controllo che andrà implementato: numero degli stati, transizioni;
  • complessità delle scelte di configurazione che è possibile scegliere prima dell'avvio del ciclo;
  • numero e tipologia di interventi umani e interazioni uomo macchina;
  • quantità di anomalie da gestire e complessità della loro gestione;
  • grado di parallelismo delle attività compiute dalla macchina: sequenziale o movimentazioni concorrenti?
  • protocolli di comunicazione da implementare con i motori, i sensori, i lettori di barcode ecc.

Data la complessità della stima a volte conviene partire con lo sviluppo di un prototipo con un insieme minimo di funzionalità. Il prototipo serve a valutare la fattibilità del progetto e ad anticipare eventuali problematiche con le tecnologie scelte.

Una volta realizzato un prototipo è possibile procedere a raffinamenti successivi fino ad arrivare al prodotto finito.

Una tipologia di sviluppo che si addice a questo tipo di progetti è la modalità di sviluppo iterativo che abbiamo descritto nel nostro blog.

Tecnologie#

Calcolatore prezzi#

Che piattaforme deve supportare la App?
La App deve gestire utenti con livelli di accesso diversi e permessi diversi?
La App deve interfacciarsi con hardware specifico?
La App deve interfacciarsi con database specifici?
La App deve generare delle stampe in PDF?
La App deve esportare dei dati in formato Excel o CSV?
La App deve importare dei dati da file in formato Excel o CSV?
La App deve consentire una qualche forma di configurazione visuale/grafica come un piccolo CAD?
Come viene distribuita la app?
La App deve avere una dashboard riepilogativa che fornisca delle statistiche d'insieme come ad esempio l'elenco dei sensori e il loro stato?
La App deve essere multilingua?
La app deve permettere all'utente di salvare e caricare il lavoro su disco ("Apri", "Salva", "Salva con nome...")?

Sto calcolando...

Clienti/utilizzatori finali#

Le nostre soluzioni fanno crescere il business delle seguenti realtà

Focus di Garda Informatica#

Garda Informatica è una software house specializzata nello sviluppo di software personalizzato.

I software sviluppati da Garda Informatica comprendono gestionali personalizzati, software verticali, App iOS/Android, web bot crawler, integrazioni con software ERP, interfacce operatore per l'automazione industriale, algoritmi di visione artificiale, integrazione di software di terze parti ed estensioni a pacchetti open source come Joomla e Wordpress.

Comune denominatore di tutti i software sviluppati sono le tecnologie web che permettono lo sviluppo di software longevo, affidabile, manutenibile, scalabile, ubiquo e facile da usare. Prediligiamo gli standard aperti e il software open source per garantire longevità e interoperabilità ai nostri progetti.

Il nostri clienti tipo sono le aziende PMI o le micro imprese italiane che, per via dei loro flussi di lavoro innovativi, non trovano software a pacchetto adatti alle loro esigenze. Specialmente nel campo dei servizi, dove il software è una parte importante della qualità del servizio offerto, le aziende si rivolgono a noi per realizzare soluzioni su misura.

Negli anni abbiamo messo a punto una serie di tecnologie che ci consentono di realizzare soluzioni affidabili in tempi rapidi.

Garda Informatica opera principalmente nella provincia di Brescia e nel nord Italia.

Chi siamo#

Siamo due ingegneri informatici nonché fratelli, con la passione per la programmazione. Sviluppare software è quello che amiamo fare da quando ci regalarono il nostro primo personal computer: un commodore 64 che nostro padre, anch'egli ingegnere, acquistò nel lontato 1984 e con cui abbiamo cominciato a fare i nostri primi esperimenti. In più di 30 anni ne è passata di acqua sotto i ponti dell'informatica, ma la nostra passione e la nostra curiosità per questo "paese delle meraviglie" resta immutata.

Ing. Lorenzo Chiodi

Posizione: Senior developer
Campi di interesse: Database, gestionali/ERP, web, web scraping, app Android, sviluppo frontend.

Ing. Giovanni Chiodi

Posizione: Senior developer
Campi di interesse: Algoritmi, reti, linux/cloud hosting, computer vision, app iOS, sviluppo backend.

Storia#

Di seguito i principali avanzamenti tecnologici raggiunti da quando siamo partiti.

Perché scegliere noi#


Siamo trasparenti

Le nostre offerte sono chiare e puntuali, non hanno costi nascosti e non generano mai sorprese per il Cliente. Leggi i nostri Termini di servizio.

Siamo flessibili

Una volta che il Cliente ci ha spiegato il suo problema siamo in grado di proporre una soluzione che rispetti il budget e i tempi richiesti.

Siamo dei professionisti

Da più di 10 anni ci occupiamo di sviluppo software su misura.

Siamo divulgativi

Trasferiamo volentieri ai nostri Clienti tutta la conoscenza e tutto il materiale necessario perché diventino autonomi: sharing is caring.

Siamo oggettivi

Per ogni soluzione che proponiamo evidenziamo pregi e difetti in modo che i nostri Clienti possano fare una scelta consapevole.

Perché non scegliere noi#


Non andiamo di fretta

Per fare le cose fatte bene serve tempo. In genere lo sviluppo di un progetto su misura può richiedere qualche mese di lavoro.

Non seguiamo le mode

Tendiamo sempre a prediligere tecnologia mature e scelte conservative per minimizzare i rischi dei nostri Clienti.

Non andiamo in giro

Ci possiamo incontrare di persona per conoscerci e/o per definire lo stato di avanzamento del progetto, ma il lavoro lo svolgiamo dal nostro ufficio.

Non entriamo in società

Il nostro business è lo sviluppo software.

Non firmiamo contratti

Pur mantenendo la riservatezza su quanto ci vorrai raccontare, non firmeremo NDA, accordi di riservatezza o contratti in generale.

Votazione pagina#

[Voti: 1 Media voto: 5/5]

Contattaci#

Ti risponderemo il prima possibile. I campi marcati con * sono obbligatori. Inviando i dati della form accetti le condizioni sulla privacy riportate in calce a questo sito.

Attendere prego...

Dove siamo#

Indirizzo: Via Padana Superiore 82/i - 25080 Mazzano (Brescia)

Telefono: 030 68 98 477

Email: info@gardainformatica.it

Ultime dal Blog#

Vai all'elenco completo

Promemoria sui Cookie e sulla Privacy

Leggi l'informativa