Vai al contenuto
PLC Forum


Funzione UMOVE_BLK, TIA PORTAL


salernozz

Messaggi consigliati

Ciao a tutti sono un autodidatta (almeno per adesso) e oggi stavo studiando se fosse meglio utilizzare il MOVE normale o il UMOVE_BLK: premetto che alcuni concetti non mi sono ancora chiari ma sembra che il UMOVE_BLK vada meglio rispetto al MOVE dato che il primo mi copia i dati senza interruzione.

 

Un altra cosa:

 

 

 

2077902762_ScreenHunter14.jpg.89da788671f9818af06425c07302ae91.jpgimage.png.0ee64441c5d12b77576dc651dd91a69c.png

 

Cosa è in sostanza quel count? e perché UInt? 

 

UInt: 16 bit senza segno da 0 a 65535 ---> uso questo formato perchè non metterò mai un numero negativo nel count, allora perché non uso USInt?

 

USInt: 8 bit senza segno da 0 a 255

 

Modificato: da salernozz
Link al commento
Condividi su altri siti


MOVE_BLK oppure UMOVE_BLK servono per copiare elementi di un array da un array all'altro. COUNT non è altro che il numero di elementi che vuoi copiare.
Qual è meglio tra le due? Dipende. Se si devono copiare blocchi di grandi dimensioni, con UMOVE_BLK hai la certezza che tutta l'operazione viene eseguita in un unico richiamo, mentre con MOVE_BLK l'operazione potrebbe essere spezzata in più cicli della CPU.
Questo però non vuol dire che UMOVE_BLK sia meglio di MOVE_BLK. Può darsi che non sia importante completare l'operazione in un unico richiamo, e che si preferisca non rischiare di allungare troppo il tempo di scansione. In questo caso, meglio MOVE_BLK.

 

Però non capisco perché tu voglia usare questa istruzione. Non credo tu abbia già affrontato gli array, quindi, non vedo a cosa ti possa servire.

Per le normali operazioni di trasferimento si usa MOVE, che è un'istruzione molto diversa da UMOVE_BLK. MOVE viene comunque portata a termine in unico ciclo, come UMOVE_BLK, ma lavora in modo completamente diverso.
MOVE ti serve per copiare in una variabile il contenuto di un'altra variabile, o di una costante.
A dire il vero, MOVE fa molto di più, perché copia anche intere strutture o interi array, basta che l'area sorgente e l'area destinazione siano identiche.
Però non mi pare il caso, ora, di affrontare questi argomenti.
Prima dovrai capire bene come puoi organizzare le variabili in strutture e in array.

Link al commento
Condividi su altri siti

va bene batta

 

Questa mia domanda era solo completa di mie diverse curiosità che mi avrebbero portato a risolverne alcune, come la differenza tra i move o l' utilizzo dei tipi di dati.

Si hai ragione, gli array è un argomento a me quasi sconosciuto (oggi mi arriva il libro di TIA ''Programmare Con I Nuovi Plc S7-1200 E S7-1500'', speriamo che almeno qui ci siano spiegati bene i tipi di dati, memorie array e tutto quello che c' è da sapere)

 

20 minuti fa, batta scrisse:

COUNT non è altro che il numero di elementi che vuoi copiare.

Fin qui ci sono, ma in che senso numero di elementi da copiare? Io ne copierei sempre e solo uno, a cosa mi serve copiare due elementi in un unica memoria? (come minimo il ragionamento è sbagliato)

 

1 ora fa, salernozz scrisse:

UInt: 16 bit senza segno da 0 a 65535 ---> uso questo formato perchè non metterò mai un numero negativo nel count, allora perché non uso USInt?

Come mai non scelgo USInt?

 

 

 

 

Max li sto leggendo eccome i manuali, sta di fatto che sono spiegati (a parere mio) in un modo tale come se quello che stia leggendo sa già l' argomento. Ma non è affatto così!!!

 

Ho questi manuali in pdf, poi l' ho detto oggi mi arriva il libro:

19831426_ScreenHunter15.jpg.04db28bbd22ac109a1c04c194d8d1b8b.jpg

 

 

 

Nel caso ne avessi anche te me ne linkeresti qualcuno?

 

Ciao e grazie ad entrambi!

Link al commento
Condividi su altri siti

Quote

in che senso numero di elementi da copiare?

Immagina di avere 2 array di interi, Array1 ed Array2.. entrambi composti da [0..99] elementi di tipo Int (quindi 100 elementi ,per esempio).

Diciamo che vuoi copiare il contenuto dei primi 30 elementi dell'array1 nei primi 30 dell'array2..allora userai MOVE_BLK, specificando in 'Count' che vuoi copiare 'solo' 30 elementi. 

Se per esempio avessi voluto copiare tutto l'array1 nel 2, potevi fare con un semplice MOVE dato che gli array sono composti dagli stessi elementi. 

 

Potresti anche decidere che vuoi copiare i primi 30 elementi dell'array1 nell'array2, ma in quest'ultimo non partendo dall'elemento [0] ma dal [9] o quel che vuoi tu. Ecco che lo specificherai nel parametro OUT. L'istruzione copierà quindi l'elemento di array1[0] in array2[9] , array1[1] in array2[10] ,array1[2] in array2[11] e cosi via. 

Occhio che l'area di memoria dove deve copiare deve esistere altrimenti quasi sicuramente verrà generato errore(ma non lo conosco cosi bene Siemens, qui interverrà Batta:smile:). 

Voglio dire che se gli array sono composti da 100 elementi e vuoi copiare da o su il 101esimo...nun se poffàà

Link al commento
Condividi su altri siti

Va bene step, thanks

 

Premetto che non so specificare di ''prenderli e selezionarli 30 elementi di array 1'', da quello che ho capito quel COUNT è per il mio Arrayout (in questo caso Array2)

 

 

quindi se specifico in quel count il numero 30 avrò i miei dati da Array1[0] a Array1[30] ----> in array2[0], array2[1],array2[2],array2[3].....array2[30],

 

L' argomento degli array è il prossimo però, devo ancora saper utilizzare bene i tipi di dati. (sono al 5%)

 

Potresti farmi un esempio del perchè dovrei copiare 30 elementi array1 in un altro array2? Un esempio qualunque che potrebbe servire nella vita vera

 

 

Modificato: da salernozz
Link al commento
Condividi su altri siti

Quote

quindi se specifico in quel count il numero 30 avrò i miei dati da Array1[0] a Array1[30] ----> in array2[0], array2[1],array2[2],array2[3].....array2[30],

 Esatto.

Quote

L' argomento degli array è il prossimo però, devo ancora saper utilizzare bene i tipi di dati.

 

Devi immaginare l'area di memoria di un plc come una cassettiera enorme, dove tu apri un cassetto e ci metti dentro una informazione (scrivi) . Quando ti serve quella informazione, apri il cassetto e prendi quel dato (leggi). 

Detto questo, immagina un array come un cassetto che, quando lo apri, vedi che è suddiviso in altri 'n' mini cassetti. Come fai a identificare quei mini cassetti?semplice, ognuno di loro avrà lo stesso nome (Pippo) ma con un indice che ne identifica il numero (Pippo[0] , Pippo[1] , ecc). 

 

Quote

Potresti farmi un esempio del perchè dovrei copiare 30 elementi array1 in un altro array2? Un esempio qualunque che potrebbe servire nella vita vera

Hai detto niente:roflmao:comunque ci provo. 

A volte ho usato array di Bool per identificare i passi programma. Quindi ho dichiarato

 

Passo: Array[0..19] of Bool; 

 

Poi ho dichiarato un array identico dove però i bit non venivano toccati per avere la certezza che fossero sempre tutti OFF. Per esempio:

 

PassoZero: Array[0..19] of Bool;

 

Quando volevo azzerare tutti i passi scrivevo: Passo:=PassoZero; 

 

In Siemens esiste una istruzione specifica per fare questo , si chiama RESET_BF. Resetta tutti i bit dell'array a partire dall'elemento specificato per n elementi. 

 

Se stai pensando perchè complicarsi la vita con gli array , ti dico che è molto comodo quando devi analizzare lo stato degli elementi perchè sono indicizzati e quindi manipolando l'indice puoi con una sola istruzione scorrere tutti gli elementi, estrarre quello che ti interessa ecc (vedi istruzione FOR per esempio). 

 

 

Link al commento
Condividi su altri siti

56 minuti fa, step-80 scrisse:

Devi immaginare l'area di memoria di un plc come una cassettiera enorme, dove tu apri un cassetto e ci metti dentro una informazione (scrivi) . Quando ti serve quella informazione, apri il cassetto e prendi quel dato (leggi). 

Detto questo, immagina un array come un cassetto che, quando lo apri, vedi che è suddiviso in altri 'n' mini cassetti. Come fai a identificare quei mini cassetti?semplice, ognuno di loro avrà lo stesso nome (Pippo) ma con un indice che ne identifica il numero (Pippo[0] , Pippo[1] , ecc). 

 

Spiegazione più simpatica ma anche più di effetto che abbia mai sentito, ora ho capito come sono.

 

 

Per quanto riguarda l' esempio rimando ad una ''prossima puntata'' (cit batta) perché non capisco bene come li hai usati questi array.

 

Allora io ho capito che ti indicavano passo per passo a che punto era il processo (da 0 a 1, Bool), se nel tuo array aveva come numero 1 vuol dire che quel processo era già passato, oppure era in funzione stessa se quello dopo era 0. Quello che mi domando è

Ma come facevi a vederli? Per questo non ho capito molto

 

poi per il resto ci sono. (se ciò che ho capito non è sbagliato)

Da spiegare è molto per questo rimando ad un altra puntata. Piano piano arriverò pure lì.

 

Quindi tranquillo, se hai tempo di farmi due righe solo per farmi capire come fosse in modo generale fallo pure, accrescerebbe solo le mie conoscenze.

Se non hai tempo o voglia tranquillo che non vi è alcun problema, ora come ora non sto trattando quell' argomento.

 

Grazie step e buon proseguimento!

Link al commento
Condividi su altri siti

Benissimo i manuali, ma fa spesso anche l'esempio di cosa fa..

Quindi quando trovi le parentesi quadre e sintomo di un array, quindi di un db, un certo numero di Indici. 

Link al commento
Condividi su altri siti

Appena posso, credo domani, mi studio questo argomento.

ciao Max!

 

 

Va bene step, thanks!

 

Solo per pura curiosità:

Ma te step sei titolare di un azienda? (Si o No, stop) (se non si può chiedere per motivi personali, di privacy o per il forum non rispondere, non voglio rischiare o compromettere nulla)

Modificato: da salernozz
Link al commento
Condividi su altri siti

Un array non è altro che un insieme di dati DELLO STESSO TIPO ai quali puoi accedere attraverso un indice. 

 

Come dicevo prima, se hai un array di interi Pippo[0..19] , puoi dichiarare una variabile di tipo intero 'Indice' per accedere ai tuoi dati. 

 

Esempio: 

Se fai un MOVE del valore 55 dentro Pippo[3] , il quarto elemento del tuo array (Pippo[3] appunto) assumerà valore 55. 

Ma se fai un MOVE del valore 55 dentro la variabile Pippo[Indice], punti ad un elemento dell'array definito dal valore della tua variabile 'Indice'. Se da pannello ti fai un campo numerico che punta ad 'Indice', scrivendo '0' dentro quel campo ti troverai il valore 55 dentro Pippo[0]. Se ci scrivi '1' ti troverai 55 dentro Pippo[1] e cosi via. 

Ecco che non punti più ad una variabile fissa, ma condizionata dal tuo indice. 

 

Nessuno ti vieta di dichiarare 20 variabili di tipo intero che magari chiamerai

Pippo0

Pippo1

..

Pippo19.

Facendo in questo modo però ti precludi la possibilità di accedere a loro tramite indice(in realtà non è vero perchè esistono i puntatori, ma fai finta che sia cosi). 

 

Non credo tu conosca il linguaggio testuale ma per spiegarti bene il senso di un array non posso non tirarlo in ballo. 

Immagina che abbiamo sempre il nostro array Pippo ma questa volta composto da 1000 dati di tipo Bool. Immagina che siano allarmi di una macchina molto complessa e che ad un certo punto del tuo programma vuoi testare che tutti gli elementi (sono 1000, non proprio pochi) siano tutti OFF, per decidere se permettere all'operatore di fare altre operazioni. 

Se tu avessi dichiarato bool per bool(quindi non come array)dovresti scrivere una cosa del genere :

 

IF NOT

Pippo0 AND NOT

Pippo1 AND NOT 

Pippo 2 AND NOT

..

Pippo999 THEN 

  fai questo..                //condizione soddisfatta

END_IF

 

Capisci che una cosa cosi è inumana da scrivere, e noi programmatori siamo notoriamente pigri, quando qualcosa si può semplificare lo facciamo volentieri..

Usando un array tutto diventa molto piu semplice perchè puoi scrivere:

 

FOR indice:=0 TO 999 DO           //Ripeti per 999 volte

   IF Pippo[Indice] == TRUE         //se , partendo da Pippo[0] per 999 volte trovi un bit ad '1' 

      ...fai una certa cosa               //qui potresti alzare un bit che impedisce il ciclo automatico o altre operazioni

   END_IF;

END_FOR; 

 

Il ciclo FOR ripete per n volte(quante le decidi tu nella prima riga come vedi) un qualcosa che è scritto al suo interno. In questo caso Per prima cosa inizializza la variabile Indice a '0' e poi controlla con un IF che Pippo[Indice] sia Vero. Ma Indice è stato inizializzato a '0' e quindi controllerà Pippo[0] ...al secondo giro incrementerà la variabile 'Indice'(lo fa da solo il ciclo FOR, sempre perchè glielo abbiamo detto noi, da 0 a 999 appunto) e controllerà Pippo[1] ,[2] , [3] e cosi via sino a 999. 

 

Ecco che con una sola istruzione hai 'scansionato' tutto il tuo array di 999 bool...facile no?;).

 

Modificato: da step-80
Link al commento
Condividi su altri siti

AAhhhhhhh

 

Quindi è un aiuto. Invece di stare li a fare 283746 di condizioni per quello che devi fare o controllare basta che gli elementi da controllare (per esempio macchine in funzione o non) le salvi nel tuo array-----> poi le fai controllare magari facendo anche un confronto e poi viiiiia.

 

Giusto?

 

Quindi per esempio

 

Ho una luce che voglio usarla come ''macchine (tutte) in funzione''

non starò li a fare un ramo con 789232346 contatti in serie che poi mi faranno azionare la lampada.

Anzi! Salverò in un array tutte le mie macchine accese. Quindi variabile Q ha solo da 0 a 1

 

poi faccio un confronto:

se il mio indice dell array ha tutti gli elementi ==1 accendi la lampada.

 

Ora non so bene come farlo sul kop però mi basta capire che il ragionamento sia giusto.

Speriamo

 

Il problema è: per salvare tutte le accensioni delle mie uscite digitali devo fare un tanti move quante sono le mie uscite? Non c' è un modo per farlo in una mossa sola? (SI,NO) poi vedrò più avanti

 

speriamo davvero che ho capito giusto, principalmente mi interessa quello

 

Grazie step 

Modificato: da salernozz
Link al commento
Condividi su altri siti

Quello che voglio sia ben chiaro è che il plc ti da degli strumenti, ma non ti risolve i problemi. Potresti scrivere una stupidata dietro l'altra nel tuo programma ma se SINTATTICAMENTE è corretta e quindi la compilazione va a buon fine puoi caricare il tuo operato e la tua macchina farà esattamente quello che è descritto al suo interno.

 

Ricorda sempre...la macchina farà ciò che è scritto nel programma...non ciò che vorresti che lei facesse. Sono 2 cose completamente diverse.

 

Questo per dire che 

dentro il tuo array TU e SOLO TU saprai per che cosa l'hai dichiarato e che cosa ci hai messo dentro . Solo tu quindi potrai sapere come scansionarlo e soprattutto, cosa cercarci dentro. 

Ho fatto l'esempio degli allarmi, ma potrei farne altri 1000. Al posto degli allarmi potrebbero essere condizioni per cui la macchina deve andare in Automatico...in questo caso vorrai che tutti i bit siano TRUE ad esempio...quindi cercherai un elemento FALSE..se non ne trovi tutto ok. 

 

Se vuoi vederlo come un aiuto ok. potrebbe essere un aiuto ma se li sai usare. Impara bene prima le basi e poi approfondirai.

 

 

Link al commento
Condividi su altri siti

Quote

Ho una luce che voglio usarla come ''macchine (tutte) in funzione''

non starò li a fare un ramo con 789232346 contatti in serie che poi mi faranno azionare la lampada.

Anzi! Salverò in un array tutte le mie macchine accese. Quindi variabile Q ha solo da 0 a 1

 

//Dichiarazione variabili

Macchine in funzione : Array[0..59999] of Bool; 

Tutte le macchine in funzione: Bool; 

Almeno una macchina non attiva: Bool; 

Indice: UInt; 

 

//Ciclo

FOR Indice:=0 TO 59999 DO

  IF Macchine In Funzione[Indice] ==FALSE THEN 

     Almeno una macchina non attiva: TRUE; 

  END_IF; 

END_FOR; 

 

Se tutti i bit dell'array sono TRUE, 'Almeno una macchina non attiva' non sarà mai TRUE alla fine del ciclo FOR.

 

Quote

Il problema è: per salvare tutte le accensioni delle mie uscite digitali devo fare un tanti move quante sono le mie uscite? Non c' è un modo per farlo in una mossa sola? (SI,NO) poi vedrò più avanti

Come vedi non devi salvare proprio nulla. Nel momento in cui vuoi verificare I tuoi Bool lanci il ciclo FOR (Che si può fare anche in Kop) . 

Posto che io però non lo userei mai per fare una cosa del genere. Di solito quando ho compiti cosi uso una Word (o più Word) e dentro ogni bit ci memorizzo quello che voglio. 

Se per esempio ho una Word allarmi composta da 16 bit di allarme, per vedere se ho un bit qualsiasi alto basterà un banale confronto con Word <> 0 . 

 

 

Ps Perdonate eventuali errori di battitura ma sono di fretta. 

 

     

 

 

Modificato: da step-80
Link al commento
Condividi su altri siti

si un pò un casino, il C l ho fatto in terza ma veramente assurdo, lo odio.

 

Ora ho capito anche come dichiararle ora devo solo capire come usarli bene e come usarne più di uno insieme, integrando anche l argomento dei tipi di dati che non mi è molto chiaro, questi sono i miei prossimi obbiettivi

 

 

 

@batta,@step-80 o @max.bocca

Quanti argomenti e quali argomenti devo sapere prima di mettere mano al pannello operatore? Lo so non c' entra con la discussione, solo in parte, l' array è uno dei tanti argomenti fondamentali per arrivare là

Modificato: da salernozz
Link al commento
Condividi su altri siti

@salernozz scusami benedetto figliolo ma stai facendo un minestrone che non ha ne capo ne coda. Io e gli altri vorremo aiutarti ma ogni volta che non c'hai capito una mazza di un argomento, salti fuori con un argomento nuovo. 

 

Quote

l argomento dei tipi di dati che non mi è molto chiaro

 

 

Se non hai chiaro questo non andare avanti, sarà una carneficina. Piuttosto fai domande su questo..cosa non ti è chiaro? 

 

Per mettere mano al pannello operatore puoi anche non sapere nulla, finchè sei a banco e fai delle prove tutto ok. Il problema nasce quando la tua macchina va in mano ad un altro che magari(molto probabile) di automazione non sa una cippa e deve far produrre una macchina da parecchi mila euro/ora. Ecco che allora diagnostica, saper organizzare le pagine, gli allarmi, fare in modo che il fermo duri il meno possibile sono gli elementi chiave di un buon programmatore. 

L'operatore deve accendere la macchina e se non ci sono problemi premere start ed iniziare a produrre. 

Questo molto semplice a dirsi, molto meno a farsi

 

Quote

il C l ho fatto in terza ma veramente assurdo, lo odio.

Se odi il C cambia mestiere...finchè sei in tempo. Hai si o no 20 anni, non puoi pensare di campare sino a 70 con 4 rami di ladder, al giorno d'oggi per di più . La concorrenza sarà sempre piu spietata e soprattutto si venderanno tutti per 4 soldi sminuendo il lavoro di chi invece lo fa con criterio.

 

 

 

 

Modificato: da step-80
Link al commento
Condividi su altri siti

29 minuti fa, salernozz scrisse:

si un pò un casino, il C l ho fatto in terza ma veramente assurdo, lo odio.

Peccato, perché forse è il linguaggio più bello.

A me dispiace che, nei PLC, si sia scelto di usare il testo strutturato.
Per carità , per i costrutti FOR, CASE, IF (i più usati per i programmi PLC) non cambia quasi nulla.
Però la sintassi del C è più bella e più flessibile. Questo, almeno, è il mio parere.

Link al commento
Condividi su altri siti

34 minuti fa, step-80 scrisse:

Se odi il C cambia mestiere...finchè sei in tempo. Hai si o no 20 anni, non puoi pensare di campare sino a 70 con 4 rami di ladder, al giorno d'oggi per di più . La concorrenza sarà sempre piu spietata e soprattutto si venderanno tutti per 4 soldi sminuendo il lavoro di chi invece lo fa con criterio.

Invece mi continuerò ad impegnare in tutto ciò che incontrerò cercando di evitare il più possibile il C,

Fino alla morte o quasi

 

Se capirò che necessiterò del C PER LAVORARE O PER CAPIRE cosa devo dire.. a malincuore lo imparerò..

 

34 minuti fa, step-80 scrisse:

cosa non ti è chiaro? 

adesso te lo spiego proprio in generale come l' ho capito.

 

Mettiamo che devo salvare in memoria (una qualunque) un numero che è 35463456, uso il formato UDInt?

e se devo salvare un numero tipo da 250 a 254 uso USInt? Non mi serve UInt e nemmeno un DInt, giusto?

 

poi gli esadecimali? quando mi servono?

 

Spero veramente che nel libro che ho ordinato ci sia spiegato l'argomento in questione.

Ma non come te lo spiega la siemens che sembra che l' argomento debba conoscerlo già, nono, proprio da zero

 

Modificato: da salernozz
Link al commento
Condividi su altri siti

4 minuti fa, batta scrisse:

Peccato, perché forse è il linguaggio più bello.

A me dispiace che, nei PLC, si sia scelto di usare il testo strutturato.
Per carità , per i costrutti FOR, CASE, IF (i più usati per i programmi PLC) non cambia quasi nulla.
Però la sintassi del C è più bella e più flessibile. Questo, almeno, è il mio parere.

Forse a scuola me l' hanno spiegata in un modo tale da farmelo odiare? Non so, sta di fatto che da ciò che ricordo era difficilissimo ricordarsi tutto a memoria, tutti i passaggi a memoria, sapere quale variabile definire, utilizzare i cicli for o while. Tutti quei printf o scanf erano assurdi, non sapevo mai da dove partire. Ora è passato così tanto che non so neanche più come si fanno, lo abbiamo fatto solo metà anno in terza per poi non riprenderlo mai più. Esercizi come 'conta maggiore' ' conta minore' ' conta numeri positivi' 'somme' 'fai il menu di non so che cosa' 'somma solo numeri negativi'' ecc

 

Non ricordo se fosse in seconda superiore o in terza, vabbe però non cambia molto

Modificato: da salernozz
Link al commento
Condividi su altri siti

32 minuti fa, step-80 scrisse:

Se odi il C cambia mestiere...finchè sei in tempo.

Sarai anche sincero ma questa mi ha veramente spezzato.. sta di fatto che non credo sia arrivato il momento di mollare, anzi, ho un mondo da scoprire

 

L' unica cosa che mi annoia e che forse mi fa andare veramente in maniera un po' lenta è proprio il fatto di essere un autodidatta

Modificato: da salernozz
Link al commento
Condividi su altri siti

Il 1200 utilizza SCL molto più paragonabile come sintassi al Pascal. 

Anche per questa funzione c'è un bel manuale che si chiama 1200 e

1500 SCL ma se non ricordo bene solo in inglese.

Lo utilizzo per qualche FC quando con tre righe risolvi la funzione.

Ormai Kop permettere di fare tanto.

Link al commento
Condividi su altri siti

Quante cose da imparareeee, vabbe oh piano piano spero di arrivare anche io a gestirmi da solo come voi, sono sogni e ambizioni

Link al commento
Condividi su altri siti

Non vorrei essermi spiegato male. 

Questo è un mestiere che ti logora, dentro e fuori. Bello che hai l'entusiasmo di imparare, è lodevole. 

Ma questo è un mestiere che ti deve piacere ed incuriosire tutti i giorni, da qui alla pensione. Dire 'questo lo odio, non lo userò mai' , secondo il mio modesto punto di vista è sbagliatissimo. 

Tutti abbiamo delle preferenze ma la programmazione non la puoi odiare in nessuna delle sfaccettature. Se non ti piace il ciclo WHILE pazienza..puoi fare anche senza...ma se non ti piace il #C significa che il testo strutturato gli va dietro e questo vuol dire che ti precludi un mondo.

 

Se poi mi dici 'non ne vado matto, ma lo imparerò lo stesso' è già un modo molto diverso di approcciarsi alla cosa. 

 

Prova a cambiare mentalità, prova a cambiare modo di approcciarti alla cosa. In automazione non esistono scorciatoie, le cose o si sanno o si studiano. Non precluderti mai nulla e non escludere mai nulla..tutto ti può insegnare molto piu di ciò che credi, compreso il C. 

Impara a ragionare come una macchina, non da umano. Questo ti condizionerà l'intera esistenza perchè ogni volta che dovrai fare la piu stupida delle stupidate la trasformerai in un diagramma di flusso e poi a stati. 

Modificato: da step-80
Link al commento
Condividi su altri siti

5 minuti fa, salernozz scrisse:

Sarai anche sincero ma questa mi ha veramente spezzato..

Step-80 ha sicuramente esagerato un po'.
Per ora io ti consiglierei di concentrarti sul ladder (KOP).
Poi, col tempo, ti accorgerai che il ladder va benissimo per la logica booleana, ma è molto limitato per calcoli, cicli for, gestione di dati in genere, e molto altro.
Ti verrà da sola la voglia di imparare ad usare il testo strutturato (che, come dicevo, per gli scopi abituali dei PLC, non è poi così lontanissimo dal C).
Non è che un linguaggio sia migliore dell'altro, semplicemente ognuno si presta meglio dell'altro per svolgere certi compiti.
Una caratteristica del TIA che trovo molto comoda, è poter inserire segmenti in testo strutturato all'interno di blocchi in ladder.

Link al commento
Condividi su altri siti

  • Alessio Menditto locked this discussione
Ospite
Questa discussione è chiusa alle risposte.
×
×
  • Crea nuovo/a...