Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Inizializzazione Programma


Messaggi consigliati

Inserito:

Buongiorno a tutti.

Sono passato dai plc ge al siemens da poco quindi ho qualche problemino.....

Qunado scrivevo i programmi col ge inizialmente facevo un reset di tutti i merker in modo da pulire eventuali bit che erano rimasti a 1 e quindi partire da una condizione nota.

Volevo sapere se c'e' la possibilita' di resettare tutto anche con il siemens visto che non trovo altra soluzione che muovere 0 nelle varie word da resettare. Non c'e' un istruzione che resetta tutte le word in contemporanea??? o un certo numero di word da me prestabilito???

Grazie,

Silver.


Inserita: (modificato)

Esiste un fc di sistema SFC21 che fa il tuo caso guarda nell'. dello step 7 o se devi cancellare una db c'è sfc23

Comunque ti consiglio di dare uno sguardo agli sfc e fc standard che sono nel firmware della cpu ,ti possono aiutare a risolvere parecchi problemi come quello che stai affrontando ora.

Modificato: da STEU
Gianmario Pedrani
Inserita:

Di solito al primo riavvio del plc tutti i merker sono a zero perche' non sono ritentivi senza corrente, a meno che non hai scelto nella configurazione ardware della cpu di mantenerli nel loro stato anche senza corrente, se entri nella configurazione ardware e metti tutto a zero allora anche i merker vanno a zero quando riavvii. Non e' la stessa cosa con idb, loro mantengono il valore che avevano, se li vuoi azzerare devi inserire la tua funzione di reset nell OB100 che viene eseguito prima di tutti i tuoi fc o fb all'avvio e solo per un ciclo di scansione.

ciaooooooooooo B)

Inserita:

ok Grazie ragazzi ora do un occhiata a quello che avete detto.....

X Gianmario Pedrani:

Si infatti il problema lo incontro solo quando viene premuta l'emergenza a macchina gia' avviata.

Inserita:

Nelle proprietà dei DB li puoi impostare non ritentivi...

Inserita:

Ragazzi sto' dando un occhiata al blocco sfc21 "fill" ma non capisco come funziona.

ho scritto:

CALL "FILL"

BVAL := "LA MIA WORD CHE STA PERENNEMENTE A ZERO"

RET_VAL := "RETURN_VAL"

BLK := "DEVO RESETTARE LE WORD DALLA 20 ALLA 800"

non capisco come faccio ad indicare al blocco la quantita' di word che devo resettare o riempire "FILL"

Qualcuno puo' farmi un esempio???

Grazie,

Silver.

Gianmario Pedrani
Inserita:

CALL SFC 21

BVAL :=MW0 word contenente il valore da trasverire

RET_VAL:=MW20 se trova un errore lo mette li

BLK :=P#DB1.DBX 20.0 WORD 780 db da azzerare partendo dall word20 per 780 word

ciaoooooooo

Inserita:

Grazie Gianmario Pedrani.

Ora e' tutto chiaro......

Dalla guida non riuscivo a capire... :angry::angry:

Sai come' e' la prima esperienza col siemens!!!

Ciao.

Gianmario Pedrani
Inserita:
:lol: vedrai che poi ti piacera' :D
Inserita:

Per gian mario pedrani

per non confondere le idee a silver novizio Siemens non dovresti postare degli errorini ;) , al posto di word deve scrivere byte nel puntatore oppure se vuole a lavora a word al posto di 780 deve scrivere 390, per informazionE il puntatore di destinazione deve essere:

P#DB1.DBX 20.0 BYTE 780

OPPURE

P#DB1.DBX 20.0 WORD 390

OPPURE

P#DB1.DBX 20.0 DWORD 195

Gianmario Pedrani
Inserita:

Hai ragione, mi sono accortio ora, anche perche lo avevo fatto velocemente

ciaoooooooooooo

Inserita:

Ei ragazzi fatemi capire....

Ragioniamo a word:

P#DB1.DBX 20.0 WORD 390

Considerando che parto dalla word 20,

perche' devo scrivere 390 se voglio resettare fino alla word 800????

PS: non ha molta importanza visto che praticamente non uso le word piu' in alto della 800 quindi funzionerebbe anche come ha scritto Gianmario.... ma vorrei capire anche io quello che dice STEU.

Grazie,

Silver.

Inserita:

perchè partendo da DB1.DBX 20.0 e cancellando 390 word cancelli questo:

DB1.DBW20 // Prima word

DB1.DBW22 // Seconda word

DB1.DBW24 // Terza word

DB1.DBW26 // Quarta word

....

DB1.DBW800 // 390° word

Inserita:

Con il puntatore dai il bit di partenza DB1.DB20.0

Poi gli dici l'unità con cui lavori: a byte (8 bit), word (16 bit), dword(32 bit)

poi la quantità di unità,

Considera che Siemens lavora a byte

quindi se hai deciso byte devi mettere (byte finale - byte iniziale) = (800-20)=780 e fino a qui è tutto chiaro.

Se hai deciso di lavorare a word (quindi una word è "lunga" il doppio del byte) devi dividere per 2 infatti infatti

780 byte * 8 bit =6240 bit quindi se lavori a word deduci facilmente che:

6240 bit = 390 word * 16 bit quindi vai a cancellare tutti i bit solamente con 390 word contro 780 byte perchè la word è lunga il doppio del byte

da cui si intuisce che se lavori con doppie word ( 32 bit)

6240 bit =195 dword *32 bit utilizzi solo 195 dword la metà di quelle che utilizzeresti se usassi le word un quarto di quelle che utilizzeresti se usassi i bite.

Chiaro?

Inserita:

scusate ragazzi ho letto le risposte solo ora....

Siete stati chiarissimi ora e' tutto ok.

Grazie,

Silver.

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...