Vai al contenuto
PLC Forum


Programmazione PLC in linguaggio C


s_ricc

Messaggi consigliati

Domanda semplicissima: vi risulta che si possa programmare un PLC in linguaggio C utilizzando Microsoft Visual Studio ?

Se sì, mi direste quali marche e/o modelli di PLC lo consentono e quali sono gli strumenti/tool sw necessari oltre al suddetto ?

 

grazie

Simone 

Link al commento
Condividi su altri siti


Beh, in linea teorica no. Perché in Europa dovremmo sottostare alla IEC 61131-3 che definisce 5 differenti linguaggi per PLC, che sono:

IL (Instruction List) similare a un assembler per operazioni time critical, oramai superato dai nuovi compilatori e velocità dei PLC

Ladder, o diagramma a contatti, il più richiesto dai clienti perché un po' più intuitivo e quindi possibile analizzarlo per soluzione problemi

FBD (Function Block Diagram) forma semigrafica a blocchetti piuttosto in voga di recente

SFC (Sequential Function Charts) molto grafico, per sistemi sequenziali (macchine a stati),

ST (Structured Text) linguaggio strutturato che ha qualche funzione che ricorda il C, ma con sintassi un po' diversa (e molta meno eleganza), era il candidato ideale per implementare il C per i PLC ma a pare mio si sono arenati in una specie di simil-Basic un po' più avanzato. Ottimo per le elaborazioni di dati e calcoli complessi, che in Ladder farebbero impazzire.

 

Ora poi i migliori sistemi di programmazione permettono la gestione di variabili simboliche, senza assegnazione di indirizzi assoluti, che consentono una versatilità elevata. Si usano strutture, in alcuni (Omron) le Union, si possono definire tipi di dati, insomma, la programmazione attuale (anche se in ladder) consente l'utilizzo di tecniche evolute che una decina di anni fa ci si sognavano. E i PLC attuali compilano ed eseguono programmi complessi in tempi sotto al ms che tempo fa erano solo appannaggio delle schede assi.

 

PS: dimenticavo; Mitsubishi per la serie iQ-R ha anche i moduli C-Controller programmabili in C e C++, ma credo sia roba ipercostosa e dedicata a configurazioni particolari.

Link al commento
Condividi su altri siti

Utilizzando Visual Studio puoi fare applicativi per Arduino, vedi ad es. https://www.visualmicro.com/

Non mi risulta esistano PLC, almeno tra quelli più comuni, che accettino un eseguibile compilato con il compilatore Microsoft.

C'erano i vecchi CNC Fanuc che utilizzavano il compilatore C++ Microsoft (a patto di fare il progetto scrupolosamente in ANSI C) per creare degli eseguibili.

Link al commento
Condividi su altri siti

9 minuti fa, lucios scrisse:

Non mi risulta esistano PLC, almeno tra quelli più comuni, che accettino un eseguibile compilato con il compilatore Microsoft.

 

Intendevo anche non utilizzando il compilatore Microsoft, magari usando Visual Studio solo per agevolare la stesura del codice, e poi compilando con altri tool (che però io appunto non conosco).

 

grazie

Link al commento
Condividi su altri siti

Beckhoff.

Twincat 3 utilizza come ambiente di sviluppo Visual Studio, poi se hai la versione professional puoi utilizzare anche il C/C++ oltre ai linguaggi IEC 61131-3.

Ciao

Link al commento
Condividi su altri siti

In Siemens qualcosa che si avvicina al C mi sembra sia l'SCL ma io preferisco sempre il ladder che in Siemens chiamano KOP,

io comunque mi sono abituato a fare calcoli complessi anche trigonometrici pure in ladder,

è vero in testo strutturato è meglio ma ci si può arrivare comunque con altri linguaggi.

Molto utile l'SFC segnalato da Ctec sperimentato in passato in Mitsubishi per programmazione a passi e transizioni passi sicure e certe.

L'ideale sarebbe utilizzare vari tipi di linguaggi contemporaneamente in base all'esigenza.

Comunque è vero che il C è molto potente ma è anche vero che presuppone di avere una macchina multitasking, cosa che il PLC classicamente non è,

o almeno quelli che ho conosciuto fino ad ora non lo sono

Link al commento
Condividi su altri siti

47 minuti fa, leleviola scrisse:

Comunque è vero che il C è molto potente ma è anche vero che presuppone di avere una macchina multitasking

Non so se ti riferisci a qualcosa di particolare, ma a me non risulta affatto che il C "presupponga" il multitasking, di certo lo può gestire, ma non lo richiede.

 

Ciao, Ale.

Link al commento
Condividi su altri siti

Si è vero ho detto una cosa non corretta, lo può gestire ma non presupporre, 

mi trovo a lavorare in azienda con un collega che mi dice sempre ciò perchè è vent anni che lavora su sistemi embedded o costruiti ad hoc per certe strutture

e in tali sistemi ha sempre usato il C perchè per lui molto più potente di un banale liguaggiio di programmazione di PLC,

adesso si trova a lavorare su PLC e trova il mondo molto obsoleto,

ma è anche vero che la macchina su cui si lavora è diversa e la CPU di un PLC non è quella di un PC,

un PC può fare multitasking un PLC banale o semplice affatto.

La stessa Mitsubishi mi sembra stia per presentare una macchina su base PC o qualcosa di simile, non ricordo il nome del prodotto

questo il link del prodotto http://www.mitsubishielectric.com/news/2018/0419-b.html

Link al commento
Condividi su altri siti

5 ore fa, leleviola scrisse:

La stessa Mitsubishi mi sembra stia per presentare una macchina su base PC o qualcosa di simile,

 

Nel 96, se ricordo bene, la siemens mise in catalogo una serie di macchine molto potenti basate su processori intel che potevano svolgere funzione di PLC, PC per supervisione e regolazione embedded basandosi sul sistema operativo RTOS.

Questa linea di CPU usava I/O ST-300 e poteva sostituire vantaggiosamente il PLC in applicazioni dove eran richiesti numerosi loop di regolazione.

 

Non ebbe molto successo, sia per i costi e, soprattutto, per la non facilità di programmazione.

Io nel 1998 feci anche un corso specifico su quella macchina sullo RTOS

Link al commento
Condividi su altri siti

Quote

Twincat 3 utilizza come ambiente di sviluppo Visual Studio, poi se hai la versione professional puoi utilizzare anche il C/C++ oltre ai linguaggi IEC 61131-3.

Interessante, ma cosa si può fare in C? Anche un intero progetto plc?

Beckoff supporta anche programmazione OOP con classi?

Link al commento
Condividi su altri siti

il 14/6/2018 at 18:21 , Ctec scrisse:

ST (Structured Text) linguaggio strutturato che ha qualche funzione che ricorda il C

 

No ha nulla a che fare col C .

E' un "dialetto" del Pascal il linguaggio che incontri uin tutti i corsi base di programmazione.

Link al commento
Condividi su altri siti

il 14/6/2018 at 18:02 , s_ricc scrisse:

Domanda semplicissima: vi risulta che si possa programmare un PLC in linguaggio C utilizzando Microsoft Visual Studio ?

Se sì, mi direste quali marche e/o modelli di PLC lo consentono e quali sono gli strumenti/tool sw necessari oltre al suddetto ?

 

grazie

Simone 

Ciao,

a me è capitato di usare un PC con interfaccia con I/O Beckoff, sviluppando un software in CVI. Non so se intendessi questo

Link al commento
Condividi su altri siti

Quote

e in tali sistemi ha sempre usato il C perchè per lui molto più potente di un banale liguaggiio di programmazione di PLC,

indubbiamente ma bisogna poi vedere se il sistema ha un debugger efficiente, ricorda che con il plc si lavora in realtime...

Quote

adesso si trova a lavorare su PLC e trova il mondo molto obsoleto

più che "obsoleto" direi "diverso". Ma di che PLC parliamo?

Quote

un PC può fare multitasking un PLC banale o semplice affatto

non so fino a che punto la definizione di multitasking abbia senso su un plc.

Per definizione un PLC è una macchina che esegue le operazioni programmate in un tempo finito. Il multitasking a cosa dovrebbe servire? Non è come su un PC dove, se devi gestire un processo lento, magari ti conviene farlo in un thread separato per non bloccare ad es. l'interfaccia operativa.

Poi, tra l'altro bisognerebbe fare chiarezza sul concetto di multitasking.

Dai un'occhiata qui ad esempio

Link al commento
Condividi su altri siti

Quote

più che "obsoleto" direi "diverso"

Concordo.
Chi si ritiene un mago della programmazione perché ha sempre programmato in C, e considera la programmazione dei PLC una programmazione di serie B, significa che non ha ancora capito cosa sia un PLC e quali siano i compiti di un PLC. Magari si tratta di un personaggio veramente bravo nel suo campo, ma non mi stupirei se poi sviluppasse programmi per PLC caotici e pieni di problemi. La programmazione di un PLC va affrontata con una diversa mentalità. Se si sbaglia approccio, si fanno solo casini.
Ma poi, ovviamente, la colpa è del PLC che si programma con linguaggi obsoleti :-(
 

Link al commento
Condividi su altri siti

10 ore fa, batta scrisse:

Chi si ritiene un mago della programmazione perché ha sempre programmato in C, e considera la programmazione dei PLC una programmazione di serie B, significa che non ha ancora capito cosa sia un PLC e quali siano i compiti di un PLC.

 

Concordo anch'io.

 

Io ho avuto esperienze di programmazione di sistemi dedicati con Sistemi Operativi RTOS veramente multitasking, e di PLC.

Se consideri il PLC solo come una scatola di relè in cui ficcare dentro a martellate un programma allora il PLC è uno strumento rozzo.

Però se sai veramente programmare, e non significa essere dei "maghi" nell'uso di linguaggi ad alto livello, se conosci bene lo strumento PLC che sta usando, allora sai che hai a disposizione uno strumento molto potente.

 

Tanto per cominciare un  PLC è multitasking per definizione. 

Il programma che esegue l'automazione, anche se fosse solo sequenziale, non è che uno dei jobs della macchina. In back ground, senza che l'utente possa interferire, "girano" parecchi tasks, anche prioritari, per il controllo delle risorse, per gestione della comunicazione, per gestione dell'apparato.

 

Poi, se se ne è capaci e se l'applicazione lo richiede, si può gestire anche un po' di processi non sequenziali ma in condivisione di tempo.

Link al commento
Condividi su altri siti

Quote

anto per cominciare un  PLC è multitasking per definizione. 

Il programma che esegue l'automazione, anche se fosse solo sequenziale, non è che uno dei jobs della macchina. In back ground, senza che l'utente possa interferire, "girano" parecchi tasks, anche prioritari, per il controllo delle risorse, per gestione della comunicazione, per gestione dell'apparato.

Vero, per questo penso che s_ricc con il termine "multitasking" si riferisca invece a "multithread", cioè alla possibilità di poter programmare, all'interno del programma utente, dei "pezzi di software" che vengono eseguiti appunto in thread dedicati in modo parallelo al thread principale, con il sistema operativo che schedula il tutto.

Questo viene fatto nel mondo PC principalmente per poter eseguire operazioni "lente" senza inficiare la reattività del thread principale, ma nei PLC normalmente le operazioni lente (tipo accesso alla seriale) vengono già gestite a livello di sistema operativo ed il programmatore non si deve certo preoccupare della gestione corretta dei thread e degli eventuali sincronismi.

Per questo dicevo che non ha molto senso porre il quesito in questo modo,

Link al commento
Condividi su altri siti

1 ora fa, lucios scrisse:

Vero, per questo penso che s_ricc con il termine "multitasking" si riferisca invece a "multithread", cioè alla possibilità di poter programmare, all'interno del programma utente, dei "pezzi di software" che vengono eseguiti appunto in thread dedicati in modo parallelo al thread principale, con il sistema operativo che schedula il tutto. 

 

In effetti quando, nel programma utente di un PLC, leghi l'esecuzione di alcuni jobs ad eventi di interrupts, siano eventi esterni o interni come clock di sistema, esegui un multithread, anche se non gestito da un apposoto schedulatore.

A stretto rigor di termini l'esecuzione parallela, in assenza di multiprocessori nella CPU, non esiste; la si considera parallela solo perchè i tempi di intervallo sono trascurabili rispetto ai tempi di processo.

Link al commento
Condividi su altri siti

il 24/6/2018 at 11:02 , lucios scrisse:

Vero, per questo penso che s_ricc con il termine "multitasking" si riferisca invece a "multithread", cioè alla possibilità di poter programmare, all'interno del programma utente, dei "pezzi di software" che vengono eseguiti appunto in thread dedicati in modo parallelo al thread principale, con il sistema operativo che schedula il tutto.

Questo viene fatto nel mondo PC principalmente per poter eseguire operazioni "lente" senza inficiare la reattività del thread principale, ma nei PLC normalmente le operazioni lente (tipo accesso alla seriale) vengono già gestite a livello di sistema operativo ed il programmatore non si deve certo preoccupare della gestione corretta dei thread e degli eventuali sincronismi.

Per questo dicevo che non ha molto senso porre il quesito in questo modo,

 

Non sono io ad aver parlato di multitasking. La mia domanda era semplicemente sul linguaggio di programmazione, se esistessero o meno plc programmabili in c.

Dalle risposte capisco che Beckhoff offre una valida soluzione.

 

Grazie a tutti

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...