Software per interfaccia function block per arduino

Ciao a tutti, ho sviluppato un software per la gestione dei programmi (tipo DCS) con i function block. Ho sviluppato già alcuni blocchi tipo AND , OR , SWITCH, MOVE, DIGITAL_IN, DIGITAL_OUT, CONV_LI,CONV_IB,CONV_LB, SetReset, ADD, SOTT, etc.

Prevedo di svuluppare altri blocchi come TIMER, CLOCK, DISPLAY, ma avrei bisogno di betatester per provarlo sul campo.
Attualmente con i blocchi che vi ho elencato, il programma viene compilato da arduino (Il mio programma genera un sorgente in c che viene passato a arduinoIDE).

Ci sono un mucchio di altre cose da implementare. (ne ho la testa piena) Sarà possibile anche fare il debug ON_LINE. con la visualizzazione sui blocchi.

Avevo già postato alcune schermate nella sezione sviluppo altri software.
Ciao

Interessante, però lo sai che nei sistemi chiamati DCS il fornitore del software dovrebbe fornire anche l' hardware comprese le shede di tutte le periferiche, se fai solo il software diventa un sistema Scada dove il software controlla l'hardware di altri produttori, quindi di terze parti.
Mi resta difficile credere che arduino da solo possa gestire abbastanza velocemente tutti quei blocchi che hai citato e i molti altri che hai in mente, reggere tutto il software necessario, stai usando una macchina esterna che elabora e archivia il tutto? immagino che arduino sia solo occhi e braccia.

Avevo già postato alcune schermate nella sezione sviluppo altri software.

di quale sezione parli?

ciao

pablos:
Interessante, però lo sai che nei sistemi chiamati DCS il fornitore del software dovrebbe fornire anche l' hardware comprese le shede di tutte le periferiche, se fai solo il software diventa un sistema Scada dove il software controlla l'hardware di altri produttori, quindi di terze parti.
Mi resta difficile credere che arduino da solo possa gestire abbastanza velocemente tutti quei blocchi che hai citato e i molti altri che hai in mente, reggere tutto il software necessario, stai usando una macchina esterna che elabora e archivia il tutto? immagino che arduino sia solo occhi e braccia.

Avevo già postato alcune schermate nella sezione sviluppo altri software.

di quale sezione parli?

ciao

Ho tradotto semplicemente i blocchi nel codice di arduino le AND sono semplici && le or || etc.
( Questi sono quelli + immediati. lo switch è un select case, chiaramente va gestito il tipo di variabile che piò essere byte, int o long.
Il blocco che ha una uscita Long non può essere collegato ad un ingresso int a meno che non venga interposto un CONV_LI (dove va segnato quali due 2 interi vuoi).
IL TRIG utilizza una memoria di appoggio etc.

Però gestire logiche complesse guardando cosa è stato scritto risulta meno chiara che vedere dove sono collegati i fili.

Vai a vedere in Other software.

Ciao

Io non leggo quasi mai il forum internazionale, solo se una ricerca specifica mi ci indirizza allora lo leggo. Però non capisco il senso di questi 2 treadth, perchè li hai scritti? hai messo le foto di 2 schermate con alcuni quadretti and, or, ecc, hai detto ho fatto questo e quello però se non metti software, dimostrazioni, spiegazioni, che serve se non spieghi nessun concetto, come sono strutturati i controlli degli eventi, come leghi lettura eeprom con calcolo.
quanti pin al massimo gestisce?
Come gestisci i timer se per i potesi tutti i pin hanno 4 on e 4 off dal lunedi al venerdì?
Come gestisci in memoria i valori maggiori e minori tra i diversi pin analogicie come li elabori? magari anche alcuni offset
Se un pin è ad accensione o spegnimento ritardato?
Se un pin è impulsivo es: On per 200ms (per comandare i relè passo passo o sistemi ad autoritenuta)
Se il pin 10 va a 1 e voglio di conseguenza commutare 11=0, 12=1, 5=1, 7=1 per 10 minuti lo posso fare con quei blocchi?
ecc ecc sono tantissime le combinazioni che un utente potrebbe chiedere

Spiega cosa fa ... volevi condividere il progetto o volevi solo farci sapere che hai avuto un idea?

avrei bisogno di betatester per provarlo sul campo

Non lavoro più nell'automazione delle centrali di cogenerazione, se però domani faccio un termovalorizzatore magari lo proviamo :smiley:

Ps mettilo un link la prossima volta :slight_smile:
ciao

pablos:
Io non leggo quasi mai il forum internazionale, solo se una ricerca specifica mi ci indirizza allora lo leggo. Però non capisco il senso di questi 2 treadth, perchè li hai scritti? hai messo le foto di 2 schermate con alcuni quadretti and, or, ecc, hai detto ho fatto questo e quello però se non metti software, dimostrazioni, spiegazioni, che serve se non spieghi nessun concetto, come sono strutturati i controlli degli eventi, come leghi lettura eeprom con calcolo.
quanti pin al massimo gestisce?
Come gestisci i timer se per i potesi tutti i pin hanno 4 on e 4 off dal lunedi al venerdì?
Come gestisci in memoria i valori maggiori e minori tra i diversi pin analogicie come li elabori? magari anche alcuni offset
Se un pin è ad accensione o spegnimento ritardato?
Se un pin è impulsivo es: On per 200ms (per comandare i relè passo passo o sistemi ad autoritenuta)
Se il pin 10 va a 1 e voglio di conseguenza commutare 11=0, 12=1, 5=1, 7=1 per 10 minuti lo posso fare con quei blocchi?
ecc ecc sono tantissime le combinazioni che un utente potrebbe chiedere

Spiega cosa fa ... volevi condividere il progetto o volevi solo farci sapere che hai avuto un idea?

avrei bisogno di betatester per provarlo sul campo

Non lavoro più nell'automazione delle centrali di cogenerazione, se però domani faccio un termovalorizzatore magari lo proviamo :smiley:

Ps mettilo un link la prossima volta :slight_smile:
ciao

quanti pin al massimo gestisce?
Quando crei un nuovo progetto, selezioni la scheda (ho fatto 2 libreria al momento ) e imposti per ogni pin che tipo è : INPUT, OUTPUT, ANALOG, etc.
Come gestisci i timer se per i potesi tutti i pin hanno 4 on e 4 off dal lunedi al venerdì?
IL blocchetto non l'ho ancora fatto, ma si può fare, basta creare 4 blocchi (TIMER) di inizio ora , fine ora, con byte del giorno 1111100 (LU,ME,ME,etc.) che vanno in un OR poi in uscita
Come gestisci in memoria i valori maggiori e minori tra i diversi pin analogicie come li elabori? magari anche alcuni offset
L'uscita analogica viene scalata in intero e appoggiata ad una variabile (con il nome del blocco) , poi la passo ad un blocco LIV che verifica se la variabile è maggiore di un altro pin
Se un pin è ad accensione o spegnimento ritardato?
metto un TON l'ho pensato così, memorizzo il millis() in un long, verifico che il millis-old_millis sia >= del tempo, dopodik alzo l'uscita
Se un pin è impulsivo es: On per 200ms (per comandare i relè passo passo o sistemi ad autoritenuta)
E' possibile aggiungere pagine (funzioni), e sempre secondo l'impostazione iniziale, agganciare la pagina al trigger.
Se il pin 10 va a 1 e voglio di conseguenza commutare 11=0, 12=1, 5=1, 7=1 per 10 minuti lo posso fare con quei blocchi?
Certo, ti metto l'immagine, al posto del move va messo il timer, al momento non l'o fatto

Appena finisco una versione decente, la posto. L'idea l'ho avuta ma ho bisogno di prove.

Spero di averti risposto

Ciao

Siccome sono ignorante in materia, potresti (a me ed a quelli come me che non conoscono questo sistema) spiegare come agisce il tuo software?

Tu hai un'interfaccia grafica in cui posizioni dei "blocchi" che rappresentano graficamente il compito da eseguire. Poi questa rappresentazione viene trasformata in codice arduinico?

Potresti fare un esempio con uno screenshot di un paio di blocchi ed il relativo codice finale?

Premetto che le cose migliori si fanno con gli analogici, allego piccolo programma che ho fatto in 15 secondi a blocchi. Anche se è semplicissimo nel solito tempo non riusciremmo a farlo scrivendolo.
Poi quando un blocco funziona, non c'e' da provare.

Il codice creato è:

void setup()
{
pinMode(0, INPUT);
pinMode(1, INPUT);
pinMode(2, INPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(7, OUTPUT);
pinMode(10, INPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
Serial.begin(9600);
}
void loop()
{
// Dichiaro le variabili locali
static byte Accenso,Trig_acceso,Spegnimento,SetReset_Acceso;
// Fine dichiarazione
Accenso = digitalRead(2);
// TRIG dichiarazione mem
static boolean MEM_Trig_acceso;
MEM_Trig_acceso =(Accenso == true && Trig_acceso == true);
Trig_acceso =(Accenso == true && Trig_acceso == true);
Spegnimento = digitalRead(10);

// SET RESET NON ANCORA IMPLEMENTATO

// DIGITAL OUT
if (SetReset_Acceso = true) digitalWrite(true,3); else digitalWrite(false,3);
}

Non hai però risposto alla mia domand :sweat_smile:a: stai usando quindi un'interfaccia grafica, giusto?
Aggiungo.... l'hai programmata tu, immagino. L'hai basata su qualche altro progetto oppure no? Che linguaggio hai usato? Su che SO gira? :sweat_smile:

Scusa se ti tempesto di domande ma son curioso :stuck_out_tongue:

leo72:
Non hai però risposto alla mia domand :sweat_smile:a: stai usando quindi un'interfaccia grafica, giusto?
Aggiungo.... l'hai programmata tu, immagino. L'hai basata su qualche altro progetto oppure no? Che linguaggio hai usato? Su che SO gira? :sweat_smile:

Scusa se ti tempesto di domande ma son curioso :stuck_out_tongue:

Ho sviluppato il programma con VB6, (lo so, lo so). L'ho basata su alcuni software a blocchi che ho visto in ambito industriale. Penso che possa girare benissimo anche su linux (via WINE) visto che non ho usato e non voglio usare particolari librerie di windows.(La cosa complessa è stato lo sbroglio dei fili, anche perchè ho deciso di poter posizionare liberamente i blocchi).

ps. Ho dimenticato di scriverti che visto che viene programmato a pagine, ho incluso la possibilità di creare altre pagine (che sono tradotte in funzioni) che vengono chiamate da blocchi tipo GOTO, cioè quando la sequenza dei blocchi arriva al GOTO, viene lanciata la pagine relativa. Le variabili che passano da una pagina ad un altre vengono inizialmente dichiarate globali.
Ho inserito anche una modalità di pagina a testo libero, con in alto tutte le variabili del progetto , in maniera da poterle inserire senza difficoltà.

Ciao

mha!!! mistero della fede!!!

Gabriele75:
Ciao a tutti, ho sviluppato un software per la gestione dei programmi (tipo DCS) con i function block. Ho sviluppato già alcuni blocchi tipo AND , OR , SWITCH, MOVE, DIGITAL_IN, DIGITAL_OUT, CONV_LI,CONV_IB,CONV_LB, SetReset, ADD, SOTT, etc.

Prevedo di svuluppare altri blocchi come TIMER, CLOCK, DISPLAY, ma avrei bisogno di betatester per provarlo sul campo.
Attualmente con i blocchi che vi ho elencato, il programma viene compilato da arduino (Il mio programma genera un sorgente in c che viene passato a arduinoIDE).

Ci sono un mucchio di altre cose da implementare. (ne ho la testa piena) Sarà possibile anche fare il debug ON_LINE. con la visualizzazione sui blocchi.

Avevo già postato alcune schermate nella sezione sviluppo altri software.
Ciao

ciao a tutti, sono nuovissimo.
mi occupo di architetture fw per sistemi embedded e conosco piuttosto bene la programamzione di PLC tramite blocchi funzionali.
Credo di poter dare una mano soprattutto lato fw.

Penso di aver un quadro abbastanza chiaro su ciò che intendi fare.
Sono molto interessato alla cosa e molto incuriosito. Ho visto anche le immagini che hai postato nel thread e devo farti i miei complimenti per l'ottimo lavoro

  • sono previste funzionelità per la simulazione?
  • sono previste funzionelità per il monitoraggio?

ora senza dilungarmi troppo, avrei qualche idea:

  • ad esempio servirebbe conoscere le risorse disponibili in termini di IN (digitali /analogici) , OUT (digitali /analogici) , comunicazione etc.
    quindi . Poiché non esistono schede standard, il sw dovrebbe permettere di conoscere l'hw con cui si va ad operare.
    questo permetterebbe di evitare un uso improprio dell'hw.

  • inoltre in alcuni blocchi sarebbero utile alcune funzionalità tipo la ritenzione: permanenza dello stato

  • oltre alle funzioni combinatorie, ho qualche idea su blocchi come calendario, timer settimanale, ritardi, interruttori etc...

  • sarebbe interessante introdurre la possibilità di passare ad un blocco un ingresso negato, senza dover introdurre un apposito blocco funzionale : ad es per fare Y=A&(~B)

ciao

sono previste funzionelità per la simulazione?
Si, è stata integrata in questo periodo di silenzio
sono prevste funzinelità per il monitoraggio?
Devo verificare per la comunicazione, forse può non servire se la simulazione è buona

ad esempio servirebbe conoscere le risorse disponibili in termini di IN (digitali /analogici) , OUT (digitali /analogici) , comunicazione etc.
quindi . Poiché non esistono schede standard, il sw dovrebbe permettere di conoscere l'hw con cui si va ad operare.
questo permetterebbe di evitare un uso improprio dell'hw.
Ho creato delle librerie HW dove vengono settati gli I/O
inoltre in alcuni blocchi sarebbero utile alcune funzionalità tipo la ritenzione: permanenza dello stato
Giusto, al momento ho creato 2 funzioni FUNCTIME e GOTO, la prima rimanda ad un altra pagina il programma ogni TOT secondi, la seconda immediatamente, un pin su entrambi abilita lo svolgimento del blocco

oltre alle funzioni combinatorie, ho qualche idea su blocchi come calendario, timer settimanale, ritardi, interruttori etc...
Vero, al momento ho creato il TON e il TOFF, da completare
sarebbe interessante introdurre la possibilità di passare ad un blocco un ingresso negato, senza dover introdurre un apposito blocco funzionale : ad es per fare Y=A&(~B)
Questa non l'ho capita, al momento c'e' la possibilità di negare un ingresso. non l'uscita

Ti ho mandata cmq un MS con la libreria fatta fino ad ora, se non la ricevi, riscrivimi pure.

Ciao

arduinoIDE_v2.bmp (2.08 MB)

Anche il Team Arduino stava sviluppando l'IDE per la programmazione a blocchi, fu presentato, da Massimo Banzi, un progetto preliminare (una sola slide) durante la presentazione di Arduino Due in una conferenza negli State. Credo poi che, con tutte le altre cose da fare (sono uscite intanto, le R3, l'Esplora, la Leonardo, versioni ridotte dell'Arduino, varie versioni dell'IDE) il progetto si sia arenato, se non proprio cancellato.