{"id":262,"date":"2024-05-17T09:09:31","date_gmt":"2024-05-17T07:09:31","guid":{"rendered":"https:\/\/blog.codesys.it\/?p=262"},"modified":"2024-05-15T10:35:28","modified_gmt":"2024-05-15T08:35:28","slug":"oop-nellautomazione","status":"publish","type":"post","link":"https:\/\/blog.codesys.it\/?p=262","title":{"rendered":"OOP nell\u2019automazione"},"content":{"rendered":"\n<p>La programmazione orientata ad oggetti (Object-Oriented Programming) \u00e8 un paradigma di programmazione usato da anni nello sviluppo software che permette di modellare elementi del mondo reale attraverso la definizione di classi. Le istanze generate dalle classi prendono il nome generico di <strong>oggetti<\/strong>.<\/p>\n\n\n\n<p>Tre sono i meccanismi che devono essere supportati da un linguaggio di programmazione perch\u00e9 si possa definire ad oggetti: <\/p>\n\n\n\n<p>-l\u2019incapsulamento<\/p>\n\n\n\n<p>-l\u2019ereditariet\u00e0 <\/p>\n\n\n\n<p>-il polimorfismo.<\/p>\n\n\n\n<p> Se anni fa la programmazione ad oggetti era esclusivo appannaggio dell\u2019informatica oggi \u00e8 entrata a pieno titolo nell\u2019automazione.<\/p>\n\n\n\n<p>La programmazione secondo lo standard <strong>IEC61131-3<\/strong> prevede la possibilit\u00e0 di creare blocchi funzionali da utilizzare attraverso le sue istanze. Questo modello \u00e8 stato esteso da CODESYS con l\u2019aggiunta di metodi, propriet\u00e0, eredit\u00e0 e polimorfismo. In questo modo, sono stati supportati tutti i meccanismi della programmazione ad oggetti permettendo di sviluppare <strong>codice OOP per automazione<\/strong>.<\/p>\n\n\n\n<p>Lo sviluppo di applicazioni tramite OOP pu\u00f2 portare molti benefici ma la sola conoscenza della sintassi non \u00e8 sufficiente: \u00e8 necessario pensare ad una architettura software dove i meccanismi OOP ci aiutino realmente a scrivere meno, isolare i problemi, confinare le dipendenze. <\/p>\n\n\n\n<p>Un\u2019architettura tipica pu\u00f2 essere quella descritta nell\u2019immagine. <\/p>\n\n\n\n<p>Un Function block base (Dispositivo), realizza le funzionalit\u00e0 base e generiche di una categoria di dispositivi (Motori, sensori o attuatori). Da questo FB sono derivati altri FB che re-implementano alcune funzioni, che differiscono da quelle base per la natura diversa dei dispositivi. Il programma principale comanda ed interroga tutti i dispositivi della stessa categoria allo stesso modo non curandosi delle differenze implementative. Queste saranno risolte dalla OOP. <\/p>\n\n\n\n<p>I <strong>vantaggi<\/strong>?<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Si affrontano le differenze tra dispositivi solo negli specifici FB (DispositivoA, DispositivoB, \u2026)<\/li>\n\n\n\n<li>Il codice in PLC_PRG \u00e8 indipendente dalle differenze tra dispositivi<\/li>\n\n\n\n<li>Sostituendo un dispositivo con un altro il codice di PLC_PRG non cambia.<\/li>\n\n\n\n<li>L\u2019aggiunta di un nuovo dispositivo comporta la sola scrittura di un nuovo FB derivato dal FB Dispositivo.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"658\" height=\"306\" src=\"https:\/\/blog.codesys.it\/wp-content\/uploads\/2024\/03\/Capture.png\" alt=\"\" class=\"wp-image-263\" srcset=\"https:\/\/blog.codesys.it\/wp-content\/uploads\/2024\/03\/Capture.png 658w, https:\/\/blog.codesys.it\/wp-content\/uploads\/2024\/03\/Capture-300x140.png 300w\" sizes=\"auto, (max-width: 658px) 100vw, 658px\" \/><\/figure>\n\n\n\n<p>In CODESYS, anche non scrivendo una sola riga di codice OOP, si beneficia della sua potenza. La gestione dei servodriver, ad esempio, \u00e8 implementata in OOP con una architettura simile a quella appena vista. Il codice che scriviamo per muovere gli assi \u00e8 indipendente dal tipo e dal costruttore di servodriver. Possiamo sostituire<strong> in pochi minuti<\/strong> un driver con un altro cambiando semplicemente la configurazione degli assi e ricompilando l\u2019applicazione. La magia la esegue la programmazione ad oggetti.<\/p>\n\n\n\n<p>L\u2019argomento pu\u00f2 essere approfondito tramite il <a href=\"https:\/\/www.codesys.it\/informazioni-sui-corsi-codesys.html\">corso <\/a>CODESYS di OOP.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La programmazione orientata ad oggetti (Object-Oriented Programming) \u00e8 un paradigma di programmazione usato da anni nello sviluppo software che permette di modellare elementi del mondo reale attraverso la definizione di classi. Le istanze generate dalle classi prendono il nome generico di oggetti. Tre sono i meccanismi che devono essere supportati da un linguaggio di programmazione [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[28,17,12],"tags":[20],"class_list":["post-262","post","type-post","status-publish","format-standard","hentry","category-avanzato","category-best-practice-e-consigli","category-oop","tag-avanzato"],"_links":{"self":[{"href":"https:\/\/blog.codesys.it\/index.php?rest_route=\/wp\/v2\/posts\/262","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.codesys.it\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.codesys.it\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.codesys.it\/index.php?rest_route=\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.codesys.it\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=262"}],"version-history":[{"count":4,"href":"https:\/\/blog.codesys.it\/index.php?rest_route=\/wp\/v2\/posts\/262\/revisions"}],"predecessor-version":[{"id":341,"href":"https:\/\/blog.codesys.it\/index.php?rest_route=\/wp\/v2\/posts\/262\/revisions\/341"}],"wp:attachment":[{"href":"https:\/\/blog.codesys.it\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=262"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.codesys.it\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=262"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.codesys.it\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=262"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}