homeira Inserito: 30 settembre 2013 Segnala Share Inserito: 30 settembre 2013 Ciao tutti , mi potete aiutare dove posso trovare esempi ed esercizi su linguaggio ST , magari esercizi con soluzione , vi ringrazio. Link al commento Condividi su altri siti More sharing options...
j_watt Inserita: 2 ottobre 2013 Segnala Share Inserita: 2 ottobre 2013 potreste indicarmi una guida per il linguaggio st ? Link al commento Condividi su altri siti More sharing options...
step-80 Inserita: 2 ottobre 2013 Segnala Share Inserita: 2 ottobre 2013 Mi aggiungo alla richiesta, se qualcuno puo indicarmi dove scaricare materiale per linguaggio ST ed IL gliene sarei enormemente grato. Link al commento Condividi su altri siti More sharing options...
zanellatofabio Inserita: 2 ottobre 2013 Segnala Share Inserita: 2 ottobre 2013 Per step-80 Credo che sei interessato al linguaggio ST per SoMachine, vero ? Io ti consiglio di scaricarti dal sito http://www.oscat.de/downloadmanager2.html il pdf OSCAT Basic Docu. English Version:3.33 e il file di testo oscat-basic-text sono una marea di librerie da spulciare per capire l' ST e poi che un copia incolla dal file di testo al' editor di programma puoi crearti le tue funzioni . Come già detto in passato anche io dal mondo Siemens sono passato ad esplorare il mondo codesys. Anche se trovi poco su questo forum non scoraggiarti, io finora ho fatto quasi un centinaio di quadri con l'M238, quindi c'è anche chi, magari non facendo un gran fracasso ..... oltre alle marche più blasonate usa plc con codesys. Ciao Link al commento Condividi su altri siti More sharing options...
step-80 Inserita: 3 ottobre 2013 Segnala Share Inserita: 3 ottobre 2013 Ciao( immagino Fabio) Ti ringrazio del link e soprattutto della solidarietà. Per le tue applicazioni che linguaggio di programmazione usi? Ho provato a giocherellare un po coi vari linguaggi. Oltre al classico ladder mi trovo abbastanza bene col CFC . Io mi occupo di macchinari per il packaging. Per chi usa il linguaggio ST: ok per la programmazione, ma quando vado online, cosa vedo? Link al commento Condividi su altri siti More sharing options...
step-80 Inserita: 3 ottobre 2013 Segnala Share Inserita: 3 ottobre 2013 Ragazzi non me ne voglia l'autore del post se vado leggermente fuori ot ma ormai mi son preso male con questo ST Link al commento Condividi su altri siti More sharing options...
zanellatofabio Inserita: 3 ottobre 2013 Segnala Share Inserita: 3 ottobre 2013 per un lavoro del genere( intendo i due cilindri ecc) è meglio usare altri linguaggi Va a gusti. Io che non sono un gran che come programmatore preferisco il ladder. Dopo il cfc e alla fine l'st. Ma per realizzare semplici movimenti direi che il ladder va piu che bene, l'st lo lascio per le funzioni potenti. Per l'uso del TON nella guida di SoMachine cerca TON e hai l'esempio in IL, FBD e ST. Se dichiari il TON come variabile "locale" del blocco che stai scrivendo allora sarà visibile solo dentro a quel blocco, se lo dichiari nelle GVL allora avrà visibilità globale nell'intero programma . in codesys non si usa U E0.0 tipo simatic ma si dichiarano le variabili per esempio dichiarandole nelle GVL VAR_GLOBAL TONInst: TON; VarBOOL1: BOOL; END_VAR e poi si usano nella scrittura del codice Link al commento Condividi su altri siti More sharing options...
step-80 Inserita: 4 ottobre 2013 Segnala Share Inserita: 4 ottobre 2013 Ma solitamente(parlo da perfetto ignorante in materia) si usa prima dichiarare le variabili e poi andarle a richiamare,oppure le creo nel momento stesso in cui le inserisco? Link al commento Condividi su altri siti More sharing options...
step-80 Inserita: 4 ottobre 2013 Segnala Share Inserita: 4 ottobre 2013 Chiedo scusa, la risposta è nell'ultima parte del post dell'utente zanellatofabio Link al commento Condividi su altri siti More sharing options...
Water Inserita: 5 ottobre 2013 Segnala Share Inserita: 5 ottobre 2013 anch'io come Fabio vengo dal Ladder .. però con SoMachine ho scoperto l'acqua calda! quale linguaggio usare? .. semplice .. tutti! ... ovviamente grazie alla caratteristica di SoMachine, già perché ti permette di usarli tutti all'interno della stessa applicazione, io per esempio uso quasi esclusivamente il CFC ma per impostare/scrivere dei valori meglio ST in una schermata a video vedi una quantità di dati impensabile in ladder e quindi in fase di test è decisamente meglio il ladder ormai non lo uso più ... mentre ho trovato veramente interessante SFC anche se nel mio caso serve a poco insomma il bello di SoMachine è che puoi utilizzare il linguaggio che vuoi dove vuoi ciao Link al commento Condividi su altri siti More sharing options...
step-80 Inserita: 5 ottobre 2013 Segnala Share Inserita: 5 ottobre 2013 Se devo essere sincero, l' idea di usare un linguaggio che non sia ladder non mi ha mai nemmeno sfiorato. Almeno sino a quando non ho scoperto somachine.. Ora sto giocherellando con i vari linguaggi, e devo dire che cosi a pelle IL non mi attira per nulla. SFC nemmeno, ma questo probabilmente perchè non ho mai amato i diagrammi di flusso. Mi sta invece intrigando parecchio ST, che sto praticamente riscoprendo dopo averlo usato per programmare arduino qualche anno fa, quando ero agli albori della mia curiosità verso i controllori programmabili. In seguito lo misi da parte, un po perchè cominciai ad approcciarmi coi primi relè programmabili, un po per la "poca praticità" nel senso che molte funzioni che su uno zelio per esempio si trovano bell'e pronte( temporizzatore ad impulsi, fronti di salita/discesa, toggle ecc) col linguaggio c te le devi creare da zero. Una domanda, forse stupida, ma che mi faccio spesso mentre giocattolo: Se scrivo IF puls_a THEN FAI QUESTO ; End_if; IF puls_b THEN FAI QUEST'ALTRO; End_if; Equivale a scrivere: IF puls_a THEN FAI QUESTO ; ELSE IF puls_b THEN FAI QUEST'ALTRO; End_if; Sono equivalenti le due scritture? Il comando else if serve solo a non ripetere un altro if? Grazie a tutti coloro mi illumineranno Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 5 ottobre 2013 Segnala Share Inserita: 5 ottobre 2013 Non credo proprio. basta l'analisi logica per vedere la differenza. Nel primo caso lo stato del puslante B viene comunque testato, nel secondo caso viene testato solo se non è vera la condizione dle pulsante A. In tutti il linguaggi che lo ammenttono la condizione "ElseIf" dipende sempre dallo "if" primario. Euovale a scrivere: If (condizione) esegui; else If (condizione) esegui endif endif Link al commento Condividi su altri siti More sharing options...
step-80 Inserita: 5 ottobre 2013 Segnala Share Inserita: 5 ottobre 2013 La ringrazio Livio della pronta risposta. Quindi se ho capito bene, nel secondo caso la condizione del pulsante b viene testata SE E SOLO SE non è vera la prima condizione, cioè solo se il pulsante a si trova nella condizione logica 0. Sbaglio? Link al commento Condividi su altri siti More sharing options...
Giuseppe Signorella Inserita: 5 ottobre 2013 Segnala Share Inserita: 5 ottobre 2013 (modificato) Si, è corretto. Essi sono due costrutti uno dentro l'altro. Il costrutto if -then - else lo puoi "interpretare" nel seguente modo: If (condizione) Se la condizione è soddisfatta eseguo le istruzioni sottostante fino a raggiungere l'istruzione else e poi esco dal costrutto. Se la condizione non è soddisfatta faccio un salto fino all'istruzione else Se dopo l'istruzione else, non ho altre condizioni eseguo direttamente le istruzioni fino alla fine del costrutto. Altrimenti (come sopra) verifico la condizione, se è soddisfatta proseguo, altrimenti faccio un salto fino alla fine del costrutto. (o se presente al successivo else del secondo costrutto). Modificato: 5 ottobre 2013 da Giuseppe Signorella Link al commento Condividi su altri siti More sharing options...
step-80 Inserita: 5 ottobre 2013 Segnala Share Inserita: 5 ottobre 2013 Chiaro. Gentilissimi. Si puó affermare secondo voi che il costrutto if-then-è la base di tutto? Voglio dire, prendiamo in considerazione un segmento ladder del genere: ----I I-------------------------( ) Dove il contatto si chiama M1 e la bobina Q1, che differenza c'è nello scrivere in ST: M1:=Q1; e scrivere invece If M1 then Q1:=1 Else Q1:=0 End_if Secondo me dovrebbe essere uguale, sbaglio? Grazie Link al commento Condividi su altri siti More sharing options...
Giuseppe Signorella Inserita: 5 ottobre 2013 Segnala Share Inserita: 5 ottobre 2013 Stai facendo un pò di confusione. In primo luogo il costrutto IF-THEN-ELSE non è alla base di tutto. Esistono diversi tipi di costrutti. Il SELECT CASE, il ciclo FOR-TO-NEXT, Anche i salti, sia condizionati che incondizionati, possono essere considerati dei costrutti ecc. Ritornando al tuo esempio, se tu scrivi: M1:=Q1 Non fai altro che assegnare ad M1 il valore o la condizione di Q1 Se invece scrivi: If M1 then Q1:=1 Else Q1:=0 End_if Premesso che ad M1 manca la condizione, ad esempio M1=true, Avresti che Q1 sarebbe vero se lo è M1 , altrimenti Q1 è falso. Le cose si invertono se invece scriveresti M1=false. Avresti che Q1 sarebbe vero se M1 non lo è , altrimenti se M1 diventa vero Q1 è falso Link al commento Condividi su altri siti More sharing options...
step-80 Inserita: 5 ottobre 2013 Segnala Share Inserita: 5 ottobre 2013 (modificato) Non ho specificato la condizione di m1 perchè mi sembra di aver capito ( almeno nell'ST di schneider) che se scrivo If M1 then.... La condizione di M1 si presume voglia essere testata se vera. Nel caso voglia testare la falsa, dovrei specificare If m1=0 then.... Almeno questo ho letto dal manuale, ed in compilazione non vengono rilevati errori. Scusa Giuseppe ma non capisco proprio... In un programma non si fa altro che testare condizioni ed eseguire azioni in base ai risultati... Quindi ho dedotto che il costrutto if -then fosse praticamente la base del programma. Ma magari sbaglio. Non capisco invece a livello di programma che differenza faccia scrivere M1:=Q1 ; (Come hai detto tu in questo caso si assegna lo stato di M1 a Q1 e questo significa che se M1 va ad 1 pure Q1 ci va, e se M1 torna a zero Q1 la segue.) Ed invece scrivere If m1 then Q1:=1; Else Q1:=0; End_if Se lo volessi in ladder, sarebbe uguale a: M1 Q1 ---I R I-----------------------( S ) M1 Q1 ---I F I-----------------------( R ) R ed F stanno per Rising e Falling edge, cioè fronte di salita e discesa. Dove sto sbagliando?? Ps iphone non mi fa distanziare M1-Q1 sopra i segmenti ladder ma credo che il concetto sia chiaro Modificato: 5 ottobre 2013 da step-80 Link al commento Condividi su altri siti More sharing options...
Giuseppe Signorella Inserita: 5 ottobre 2013 Segnala Share Inserita: 5 ottobre 2013 (modificato) Io non conosco ST, pertanto ti parlo in modo generico. In ogni caso le regole fondamentali della programmazione testuali sono uguali per tutti i linguaggi, poi la sintassi può cambiare da un ambiente di sviluppo ad un'altro. Due PLC di marche differenti, anche se si programmano con il medesimo linguaggio, ad esempio Basic possono avere differenze di sintassi. La medesima cosa vale per il ladder. Il ladder è uguale per tutti i PLC che si programmano in ladder, ma poi ogni marca e spesso ogni famiglia di PLC anche se della stessa marca, hanno una "sintassi" di Ladder differente uno dall'altro. M1:=Q1 ;(Come hai detto tu in questo caso si assegna lo stato di M1 a Q1 e questo significa che se M1 va ad 1 pure Q1 ci va, e se M1 torna a zero Q1 la segue.) No è il contrario, M1 assume lo stato di Q1. E come se tu volessi scrivere: A= 3+2 A assume il valore dell'addizione. Modificato: 5 ottobre 2013 da Giuseppe Signorella Link al commento Condividi su altri siti More sharing options...
step-80 Inserita: 5 ottobre 2013 Segnala Share Inserita: 5 ottobre 2013 È vero hai ragione: è m1 che assume lo stato di q1, secondo quello che ho scritto. Pertanto la scrittura esatta sarebbe: Q1:=M1; Questo peró non risponde alla mia domanda: è o non è ( intendo a livello di programma, perchè siamo tutti d'accordo che concettualmente sono due cose diverse) equivalente a scrivere If M1 then Q1:=1; Else Q1:=0; End_if Grazie Link al commento Condividi su altri siti More sharing options...
Water Inserita: 6 ottobre 2013 Segnala Share Inserita: 6 ottobre 2013 sì è la stessa cosa come tutti i linguaggi, puoi arrivare allo stesso risultato percorrendo strade diverse, l'uso dell'IF però ti permette di implementare/aggiungere/costruire altre cose per esempio la gestione degli errori con l'utilizzo dell'Else se il valore fosse una variabile numerica e non boleana, l'uso dell'IF con ELSE ti permetterebbe di "cogliere" questa problematica Sì in SoMachine se scrivi IF M1 THEN, è implicito che vuol dire se M1 è vero, nota: meglio usate TRUE o FALSE piuttosto che 0 oppure 1 ciao Link al commento Condividi su altri siti More sharing options...
step-80 Inserita: 6 ottobre 2013 Segnala Share Inserita: 6 ottobre 2013 sì è la stessa cosa come tutti i linguaggi, puoi arrivare allo stesso risultato percorrendo strade diverse, l'uso dell'IF però ti permette di implementare/aggiungere/costruire altre cose per esempio la gestione degli errori con l'utilizzo dell'Else se il valore fosse una variabile numerica e non boleana, l'uso dell'IF con ELSE ti permetterebbe di "cogliere" questa problematica Sì in SoMachine se scrivi IF M1 THEN, è implicito che vuol dire se M1 è vero, nota: meglio usate TRUE o FALSE piuttosto che 0 oppure 1 ciao Grazie proprio ció che immaginavo. L'altro mio dubbio è relativo alle chiamate di blocchi funzione: qual'è la sequenza corretta? Mi spiego: se voglio partire col mio programma rilevando il fronte di salita di un pulsante collegato ad un ingresso fisico per settare il bit M1, è giusto richiamare il blocco in questo modo? Db_fronte1( clk:=puls_1; Q:=(M1:=1) ); Altra domanda:quando vado a premere F2>accesso facilitato> scorro fino a trovare il blocco che mi interessa e lo seleziono mi appare un editor per la dichiarazione dove mi chiede che nome voglio dare al db. Ora, sia in ladder che in CFC ed FBD mi appariva un aiuto che mi mostrava tutti gli altri db da me dichiarati e mi aiutava a ricordare ad esempio a che numero di db ero arrivato, per non nominare 2 fronti con lo stesso db. In ST non vedo questa possibilità.... Chiedo a voi piu esperti: c'è un modo per aggirare tutto questo? Ovviamente parlo sempre del linguaggio ST riferito a soMachine. Grazie a tutti e buona domenica Link al commento Condividi su altri siti More sharing options...
step-80 Inserita: 7 ottobre 2013 Segnala Share Inserita: 7 ottobre 2013 È tutta la sera che provo, ma sembra proprio che somachine non accetti sintassi ELSE IF. Volevo scrivere un codice cosi composto: IF PLS1 THEN ESEGUI AZIONE 1; ELSE IF PLS2 THEN ESEGUI AZIONE 2; END_IF Compilando peró sembra proprio non accettare la sintassi else if, sembra che accetti solamente degli if, al limite annidati. Vi risulta tutto ció? Link al commento Condividi su altri siti More sharing options...
Giuseppe Signorella Inserita: 7 ottobre 2013 Segnala Share Inserita: 7 ottobre 2013 (modificato) Ad occhio manca un end if.Ciao Modificato: 7 ottobre 2013 da Giuseppe Signorella Link al commento Condividi su altri siti More sharing options...
step-80 Inserita: 7 ottobre 2013 Segnala Share Inserita: 7 ottobre 2013 Ma di norma una serie di else if non vorrebbe un solo end_if finale? Link al commento Condividi su altri siti More sharing options...
Giuseppe Signorella Inserita: 7 ottobre 2013 Segnala Share Inserita: 7 ottobre 2013 No!. Ogni costrutto deve avere una sua struttura ben identificata. Un inizio ed una fine. E devi necessariamente chiudere per primo sempre l'ultimo costrutto aperto. In tal modo il sistema sa esattamente dove iniziano e dove terminano le istruzioni da eseguire ed appartenenti a quel determinato costrutto. Vedi anche l'esempio postato da Livio Orsini al post n° 22. ciao Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora