Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [OT] Da Function Block di Codesys alla programmazione OOP

    Buongiorno

    Mi occupo di automazione industriale, e sono abituato a programmare in ambiente di tipo Codesys (non � proprio codesys ma gli assomiglia molto). Ora, per un progetto, devo usare un linguaggio di pogrammazione OOP (cambiato controllore)

    Devo capire come tradurre in OOP quello che faccio abitualmente in codesys

    Non vorrei scendere nel dettaglio del codice, ma sono pi� interessato a capire il concetto

    Faccio un esempio:

    devo gestire una serie di valvole che, dal punto di vista della gestione sw; sono tutte uguali: (possono essere forzate, possono esistere su una macchina oppure no, possono andare in allarme di posizionamento, ecc)

    in codesys di solito opero cos�:

    1) creo una FB (Function Block) , che gestisce una valvola singola (Chiamiamola FbValvola)
    2) definisco una costante (chiamiamola "c") che indica il numero massimo di valvole che il mio sw pu� gestire
    3) creo una fb "generale",chiamiamola fbValvesManager, e al suo interno, nella dichiarazione delle sue variabili, definisco un array di questo tipo;

    aFbValvole: ARRAY [1..c] OF FbValvola

    4) nel codice della FbValvesManager metto un ciclo for che mi esegue tutte le Fb delle valvole singole, e inoltre eseguo operazioni del tipo verificare se c'� almeno una valvola in allarme, o impostarle tutte in modalit� automatica, ecc.

    Ora vorrei capire come tradurre ci� in OOP:

    ho creato una classe "valvola", ora devo capire come fare l'iterazione di cui ho parlato nei punto 3 e 4 sopra. Immagino che ci sia da creare la classe "gestoreValvole", ma in che relazione devono essere le due classi? � possibile fare l'iterazione di cui ho parlato sopra o devo "aprire" il ciclo for?

    Grazie a chi vorr� darmi un suggerimento

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,459
    Quote Originariamente inviata da italo2008 Visualizza il messaggio
    Ora vorrei capire come tradurre ci� in OOP [...]
    Da come lo descrivi, questo Function Block sembra essere molto vicino al concetto di classe della OOP.

    Tuttavia, sul design che si dovrebbe implementare e la definizione di quali altre classi ipoteticamente servirebbero, bisogna scendere nello specifico e conoscere il linguaggio a oggetti con cui hai a che fare.

    Tradurre tutto riportando in OOP quello che hai sull'altro sistema non è detto che sia una soluzione valida: meglio partire da zero pensando a ciò che va implementato e, conoscendo i principi della OOP (su cui puoi trovare materiale a perdita d'occhio nel web), disegnare una architettura di classi, interfacce, ecc. per implementarla adeguatamente.

    Le strade implementative dipendono però da qual è il nuovo linguaggio che stai utilizzando, e mi pare strano che non sia stato specificato.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    L'ambiente di sviluppo con cui ho a che fare è LASAL class2 di Sigmatek.
    Non l'ho scritto prima solo perchè le mie speranze di trovare uno che lo usa su questo forum sono abbastanza scarse, ma non si sa mai...

    quello che non riesco a capire è come istanziare un array di oggetti, analogamente agli array di functionBlock. Mi dà la possibilità di creare Array di tipi di dati base o di strutture di questi, ma non di oggetti di una classe.

    Forse il concetto di "tipo di dati" che ho io in testa non è lo stesso della programmazione a oggetti. In codesys, una volta che si definisce un FB "pippo", io ho a disposizione il tipo di dati "Pippo", con cui io posso definire degli array, ma qua mi sembra che non sia così.

    Come si procede in OOP per iterare gli oggetti istanziati di una classe per , ad esempio, sapere se ce n'è uno il cui "inAlarm" è a true?

    più a monte, istanziare un'array di oggetti si può fare in OOP?
    Ultima modifica di italo2008; 10-08-2023 a 10:37

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,459
    Quote Originariamente inviata da italo2008 Visualizza il messaggio
    L'ambiente di sviluppo con cui ho a che fare è LASAL class2 di Sigmatek.
    Non l'ho scritto prima solo perchè le mie speranze di trovare uno che lo usa su questo forum sono abbastanza scarse, ma non si sa mai...
    Ok, pensavo fosse qualcosa basata quantomeno su un linguaggio standard e non così "custom" e di nicchia.

    Quote Originariamente inviata da italo2008 Visualizza il messaggio
    quello che non riesco a capire è come creare un array di oggetti, analogamente agli array di functionBlock. Mi dà la possibilità di creare Array di tipi di dati base o di strutture di questi, ma non di oggetti di una classe.
    Forse il concetto di "tipo di dati" che ho io in testa non è lo stesso della programmazione a oggetti. In codesys, una volta che si definisce un FB "pippo", io ho a disposizione il tipo di dati "Pippo", ma qua mi sembra che non sia così
    Secondo me, per risolvere la problematica, il primo step da affrontare è uno solo: studiare la OOP e i suoi principi, quindi acquisire le nozioni di classi, interfacce, metodi, membri, visibilità, istanze, ecc.

    Una volta che la OOP è un background chiaro dal punto di vista delle nozioni, sarà senz'altro più facile capire quali elementi corrispondono alle strutture che troviamo nel linguaggio "vecchio", e come effettuare una traduzione efficace (non necessariamente 1 a 1) della logica nel linguaggio di partenza nel contesto del nuovo linguaggio.

    "Aggredire" una singola struttura cercando il corrispondente diretto nella OOP, che non è detto che esista, credo sia un modo per sfruttare poco l'OOP per quello che è, col rischio anzi di creare una architettura che sia meno gestibile rispetto alla precedente, sebbene il linguaggio di partenza fosse meno efficace.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955
    Quote Originariamente inviata da italo2008 Visualizza il messaggio
    L'ambiente di sviluppo con cui ho a che fare è LASAL class2 di Sigmatek.
    Non l'ho scritto prima solo perchè le mie speranze di trovare uno che lo usa su questo forum sono abbastanza scarse, ma non si sa mai...

    quello che non riesco a capire è come istanziare un array di oggetti, analogamente agli array di functionBlock. Mi dà la possibilità di creare Array di tipi di dati base o di strutture di questi, ma non di oggetti di una classe.

    Forse il concetto di "tipo di dati" che ho io in testa non è lo stesso della programmazione a oggetti. In codesys, una volta che si definisce un FB "pippo", io ho a disposizione il tipo di dati "Pippo", con cui io posso definire degli array, ma qua mi sembra che non sia così.

    Come si procede in OOP per iterare gli oggetti istanziati di una classe per , ad esempio, sapere se ce n'è uno il cui "inAlarm" è a true?

    più a monte, istanziare un'array di oggetti si può fare in OOP?
    Ciao,
    ovviamente non ho mai programmato in LASAL, ma facendo un giro in rete è aperto alla OOP (il sito dell'azienda produttrice https://www.sigmatek-automation.com/...ng-tool-lasal/).

    Ti posto questo video di YT che è molto interessante:

    https://youtu.be/fm491s8f8Rw

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.