Jump to content
PLC Forum


The Running Man

linguaggio strutturato : differenza di istruzioni

Recommended Posts

The Running Man

Cosa cambia effettivamente usando queste due istruzioni, all'atto pratico è come fare SET e RESET in entrambi i casi

 1)

 MOTOR S: START;

 MOTOR R:STOP;

 

oppure

2)

IF START THEN

MOTOR := TRUE ;

END_IF

 

IF STOP THEN

MOTORE :=FALSE;

END_IF

 

 

Grazie a tutti

Share this post


Link to post
Share on other sites

Yiogo

non ho capito quale ST hai usato, attento che non sono tutto identici

comunque riscrivilo in maniera precisa, così è sbagliato comunque

preciso che non sono certo come certi zoticoni che hanno da dire sugli errori espressivi linguistici quello che si capisce va bene a prescindere da piccole scorrettezze quando si tratta di leggere un testo

ma al contrario un codice pieno di errori non serve a nulla

Share this post


Link to post
Share on other sites
The Running Man

ho usato usato il linguaggio ST su una piattaforma CODESYS, mi risualtano entrambi scritti nella maniera corretta ( manca ovviamente la parte di dichiarazione delle variabili) e

funzionano nella stessa maniera, ma mi chiedo cosa cambia effettivamente tra una e l'altra opzione

Share this post


Link to post
Share on other sites
batta

Personalmente, non mi sono mai imbattuto in un sistema che, in strutturato, accetti una scrittura del tipo:

MOTOR S: START;

 

Share this post


Link to post
Share on other sites
step-80
Quote

ho usato usato il linguaggio ST su una piattaforma CODESYS, mi risualtano entrambi scritti nella maniera corretta ( manca ovviamente la parte di dichiarazione delle variabili) e

funzionano nella stessa maniera, ma mi chiedo cosa cambia effettivamente tra una e l'altra opzione

 

Ho usato in passato SoMachine di Schneider Electric e,programmando in ST , confermo che entrambi i metodi producono lo stesso effetto. La sintassi è esatta in entrambi i casi(anche se la nr 1 ammetto sia insolita ..ma esatta).

 

La differenza fra le 2 credo la faccia il tempo di esecuzione (ma potrei sbagliarmi, dipende sempre da come il software traduce il listato in linguaggio macchina) a favore del primo sistema. Usando l'IF solitamente vengono tirati in ballo JUMP che altrimenti non sarebbero usati.

 

ethgetrtgy.png.618f813ba3e00ca6705ad495dcadf516.png

 

Per dire, questo quello che viene tradotto usando GxWorks2 di Mitsubishi( non codesys) per fare il SET e RESET del bit M0, nei 2 sistemi. Le prime 4 righe sono relative al sistema nr 1, il resto al sistema nr 2. Sono 4 righe contro 10...e se il programma è di una certa entità la differenza in esecuzione potrebbe non essere cosi trascurabile.

Share this post


Link to post
Share on other sites
Yiogo

siete buffi

dite che la forma < MOTOR S: START;  > è coretta poi pubblicate il listato dove si legge tutt'altra cosa

come ho già detto prima possiamo essere, anzi lo dobbiamo, tolleranti sulle espressioni linguistiche ma sulle istruzioni proprio no

batta ha ragione, se < MOTOR S: START; > funzionasse vuol dire che sarebbe un'interpretazione molto proprietaria del CodeSys

 

entrando nel merito invece la prima forma non è affatto iinsolita ed è più efficente sul piano concettuale della seconda

Share this post


Link to post
Share on other sites
step-80

Ma non ce la fai a dire la tua senza le battutine ? 

 

Quote

come ho già detto prima possiamo essere, anzi lo dobbiamo, tolleranti sulle espressioni linguistiche

 

Quote

dite che la forma < MOTOR S: START;  > è coretta

 

Ti eri buttato avanti?

 

Quote

poi pubblicate il listato dove si legge tutt'altra cosa

 

Cioè? 

 

Comunque se ti riferisci al fatto che la forma corretta della prima opzione è :

 

Motore S = Motor_start; 
Motore R = Motor_Stop; 

 

E non: 

 

Motore S: Motor_start; 
Motore R: Motor_Stop; 

 

hai ragione , è stata solo una svista.Mi sto già versando l'olio bollente giu per la schiena per penitenza.

 

Quote

è più efficente sul piano concettuale della seconda

 

ma perchè io cosa avevo detto?

 

 

 

Share this post


Link to post
Share on other sites
Yiogo

comincia a distinguere le ugualianze dalle assegnazioni, poi andiamo avanti

Share this post


Link to post
Share on other sites
step-80

Oh ma che ti gira male stasera? Mestruazioni? Coronavirus? 🙁
 

So perfettamente la differenza tra uguaglianza e assegnazione, ma sono sempre disposto ad imparare. Se ne sai più di me , illuminami. Ma per favore, senza battutine da 3a elementare grazie. 

Come dicevo è stata una svista, come lo è stata probabilmente per l’autore del post. Ma tu continui con i tuoi interventi da zitella acida. 

 

Invece di prendere per i fondelli, perchè non ci investi col tuo sapere? 

Share this post


Link to post
Share on other sites
batta

Ragazzi, calmatevi. Forse si tratta solo di un malinteso.

 

 

Share this post


Link to post
Share on other sites
Livio Orsini

Se la discussione coninuasse con questo tono sarei costretto a chiuderla e, nel caso, anche a prendere qualche altro provvedimento regolamentare.

Share this post


Link to post
Share on other sites
step-80

Sono calmissimo😊. Ma se ho scritto qualcosa di sbagliato mi piacerebbe saperlo, senza inutili giri di parole. 
Chiedo scusa se ho alzato i toni. 

Share this post


Link to post
Share on other sites
Yiogo

sono stato un po' indeciso sul risponderti, in fondo nessuno è missionario di CodeSYS, solo che hai scritto troppi errori e va detto

l'unica affermazione tua giusta è che
    Motore S : Motor_start ;
    Motore R : Motor_Stop ;
è sbagliata, CONCORDO, affermi invece che  
    Motore S = Motor_start ;
    Motore R = Motor_Stop ;
è corretta, NON E' VERO, è completamente sbagliata perchè non è una assegnazione ma una verifica di egualianza per cui andrebbe inserita in un corretto contesto
per esempio  
  IF Motore S = Motor_start THEN
    ... azione qualsiasi da definire ;
  END_IF
peraltro ricordo anche che ; dopo END_IF è opzionale funziona sia con che senza, è una stranezza di codesys

ma la cosa più assurda che fai è pubblicare un listato sbagliato come se fosse giusto, per esseren sicuro al 100.% l'ho scritto nel mio codesys avendo lo stesso risultato
anche un asino vede che nella struttura
  IF Motor_start THEN
    M0 := TRUE ;
  END_IF ;
i termini assumono il corretto colore, nel dettaglio il blu per i comnandi e il sistema è validato
se si vede le righe
  SET (Motor_Start, M0) ;
  RST (Motor_stop, M0) ;
si nota subito che i termini SET e RST non sono validati, non solo, E L'HO VERIFICATO CON CODESYS 2.3.9.59 !
il compilatore non riconoscendo valenza del comando ai due termini chiede che sia dichiarati quali variabili e nell specifico ti propone BOOL per SET

ciò premesso affermo dopo adeguada evrifica, che stai proponendo codici totalmente sbagliati, i colori che il compilatore codesys IMPONE non sono decorativi ma hanno un preciso significato

peraltro la soluzione c'è è pure banale basta scriversi una funzione che chiami con un nome di fantasia per esempio S_R (ripeto, nome di fantasia, codesys non la prevede, io l'ho scelto nell mia personale libreria), scriverci dentro la funzione estesa ed usarla come libreria


anzi invito livio quando fa osservazioni sui dibattiti a privilegiare la giustezza tecnica di quanto affermato a prescindere dalle persone coinvolte

 

 

ho scritto questo SOLO per chiarezza tecnica, poi fate come volete ma sarebbe serio che chi vuole intevenire verificasse le due diverse tesi con un compilatore codesys al vero

a quel punto è inoppugnabile che ho oggettivamente ragione

Share this post


Link to post
Share on other sites
The Running Man

Scusate , ma non pensavo di causare tutto questo flame

 

Comunque c'è un errore mio di trascrizione nel primo post, di seguito metto la versione corretta.

 

MOTOR S= START;

MOTOR R=STOP;

 

Confermo che questa versione mi viene accettata dal codesys senza problemi.

18 ore fa, batta ha scritto:

Personalmente, non mi sono mai imbattuto in un sistema che, in strutturato, accetti una scrittura del tipo:

MOTOR S: START;

 

 

Errore mio di trascrizione, scusami, ecco quella corretta

 

MOTOR S= START;

 

 

Share this post


Link to post
Share on other sites
The Running Man
12 ore fa, Yiogo ha scritto:

comincia a distinguere le ugualianze dalle assegnazioni, poi andiamo avanti

 

Posso chiederti se potresti spiegarmi esattamente questo concetto ? ti ringrazio

Share this post


Link to post
Share on other sites
step-80

@The Running Man secondo me Yiogo non ha visto le lettere S e R davanti al simbolo di uguaglianza, che stanno ad indicare appunto le istruzioni Set e Reset. Tutto li. 

Share this post


Link to post
Share on other sites
Yiogo

egualianza è un verifica tra due dati che da luogo ad un risultato assegnazione è appunto il valore ssegnato, per esempio

 IF a = B  THEN

    c := TRUE ;

    d := 16#0056 ;

 END_IF

se a [BOOL] è uguale a b [BOOL] alza C [BOOL] ed assegna a d [WORD] il valore esadecimale 0056

l'ugualianza per ovvie ragioni è in lettura e usa l'identificatore =

l'assegnazione è in scrittura e usa l'identificatore :=

 

vorrei invece capire con che versione di codesys hai scritto

MOTOR S= START;

assegnando

MOTOR : BOOL ;

START : BOOL ;

e scrivendo la specifica riga comando CODESYS 2.3.9.59 la considera errore e la rifiuta

ho provato sia come variabile locale che globale, sempre usandolo in sub ST

 

 

Share this post


Link to post
Share on other sites
step-80

Come dicevo qualche post fa, usando SoMachine di Schneider Electric la sintassi 

Motor S = Start

è esatta , non da errori jn compilazione e funziona. Questo in SoMachine come dicevo! Il resto non so. 

Share this post


Link to post
Share on other sites
leleviola

a me sembra che vi state perdendo in un bicchier d'acqua, buona domenica

Share this post


Link to post
Share on other sites
Yiogo

interessante, questo vuol dire che è un'implementazione proprietatria, con codesys ufficiale NON funziona

 

comunque se qualcuno a colgia di provare con altre versioni oltre  aquella che ho indicato interessa a tutti

Share this post


Link to post
Share on other sites
step-80

@Yiogo meno male sono riuscito a spiegarmi, ora capisci perchè dicevo che è una sintassi un po insolita? Tanto che ogni volta che devo usarla in compilazione mi da errore perchè tendo sempre ad usare l’assegnazione classica := , mentre va usato solo S =.

Sembra una uguaglianza ma non lo è, se dici che in Codesys classico non funziona significa che probabilmente è una sintassi proprietaria Schneider. 
 

Per dovere di cronaca, tengo a precisare che anche l’istruzione di set e reset di cui parlavo sopra di Mitsubishi è scritta in modo corretta , cioè:

 

SET( “quello che scatena il Set”    ,     “ quello che vuoi Settare); 

 

Naturalmente ”quello che scatena il Set” può essere anche una combinazione complicatissima di bit,confronti fra interi o altro per esempio… L’importante è naturalmente è che il risultato finale dia come uscita un dato di tipo bool(vero o falso). 
Tanto che in ST di Mitsubishi scrivere :

 

IF Start Then 

  Motore:= True; 

End_if;

 

oppure: 

 

SET( Start , Motore); 

 

è la stessa identica cosa . 
esattamente come lo è scrivere: 

 

Motore := True; 

 

e

 

SET ( True , Motore ); 

 

per alzare incondizionatamente un bit. 

 

Con le dovute cautele e attenzioni si potrebbe scrivere anche

 

OUT( True , Motore) ; 

OUT(False , Motore) ;
 

ma è una sintassi che non uso mai. 

 

Share this post


Link to post
Share on other sites
leleviola
51 minuti fa, step-80 ha scritto:

 

SET( “quello che scatena il Set”    ,     “ quello che vuoi Settare); 

 

Naturalmente ”quello che scatena il Set” può essere anche una combinazione complicatissima di bit,confronti fra interi o altro per esempio… L’importante è naturalmente è che il risultato finale dia come uscita un dato di tipo bool(vero o falso). 
Tanto che in ST di Mitsubishi scrivere :

 

SET( Start , Motore);

Caspita questa del SET con la condizione che scatena il SET non la sapevo nonostante uso spesso e da anni Mitsubishi, se ne impara sempre di nuove,

uso sempre l'istruzione semplice del SET "quello che vuoi settare",

grazie a te @step-80

Edited by leleviola

Share this post


Link to post
Share on other sites
Yiogo

prima di rispondere ho verificato con la versione codesys che ho dichiarato prima

non accetta l'istruzione SET ()

devo pensare che sia un'implementazione proprietaria

Share this post


Link to post
Share on other sites
step-80
1 ora fa, leleviola ha scritto:

Caspita questa del SET con la condizione che scatena il SET non la sapevo nonostante uso spesso e da anni Mitsubishi, se ne impara sempre di nuove,

uso sempre l'istruzione semplice del SET "quello che vuoi settare",

grazie a te @step-80

@leleviola ma intendi in ladder? Perchè non mi risulta si possa usare l’istruzione Set come dici tu in ST. 
 

Se scrivo SET M0 me lo da errore, lo stesso se scrivo 

IF M100 Then 

  SET M0; 

End_if; 

 

ovviamente se parli di ladder o ladder strutturato esiste l’istruzione SET ma devi anteporre i contatti che vuoi attivino l’istruzione. 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...