Vai al contenuto
PLC Forum


Trasferire Valori Su Unica Db


Coriolano

Messaggi consigliati

Ciao a Tutti

come posso trasferire un centinaio di valori booleani interi ecc. su un unico DB da andare a leggere?

Grazie a tutti

Coriolano.

Link al commento
Condividi su altri siti


Ciao Vincenzo,

io devo mettere su unico DB gli allarmi , gli stati delle utenze dalla macchina i pezzi prodotti ecc.

Quindi alcune cose saranno su merker altre su ingressi/uscite altri su DB ecc.

Come posso fare?

Grazie

Link al commento
Condividi su altri siti

Ciao Coroliano;

per fare quello che ti serve devi crearti una DB dove dovrai prevedere tutti gli elementi che dovrai salvare, sia Boolean che Integer ecc, dopo di che nel tuo codice dovrai scrivere nella DB i dati che ti interessano.

Esempio:

Copia di un bit da merker a DB

U M0.0

= DBn.DBX0.0 //dove n è il numero della DB ed ipotizzo che all'indirizzo 0.0 tu metta il valore di M0.0

Copia di un integer sulla DB

L MW10

T DBn.DBW10 //dove n è il numero della DB ed ipotizzo che all'indirizzo 10 tu metta il valore di MW10

Copia di un double sulla DB

L MD20

T DBn.DBD20 //dove n è il numero della DB ed ipotizzo che all'indirizzo 20 tu metta il valore di MD20

Spero di essere stato chiaro.

Good Luck, Jake B)

Link al commento
Condividi su altri siti

Quanto spazio ho su una unica DB?

Bella domanda :huh:

Sinceramente non so risponderti; credo dipenda dalla CPU che stai utilizzando.

Io di solito ho usato DB abbastanza grandi e non ho mai avuto problemi, inoltre con l'utility che trovi sulla configurazione HW riesci a vedere l'occupazione di memoria dati del PLC e da quì puoi renderti conto di quanto spazio tu stia utilizzando.

Good Luck, Jake B)

Link al commento
Condividi su altri siti

Buongiorno, sto cercando di capire(autodidatta confuso) leggendo fra i vari post questo è quello che si avvicina di più a ciò che io vorrei sapere.

Sto affrontando le variabili presenti in un DB globale. Vedendo dagli esempi del manuale siemens e dal corso presente su questo portale non mi è chiaro come, e da dove, potrei prendere ad esempio una MW20 come nel tuo esempio jake

L MW10 // e come si fa a definirla la mw e dove!!! come fa la CPU a capire dove si trova?! è un indirizzo assoluto come db1.dbx 0 ad esempio?

T DBn.DBW10

Mi spiego, se per accedere ad una data variabile DBx,w etc. , di un dato DBn, basta scrivere ad esempio DB4.DBW10, non so come e dove poter creare le mw, eb. Io sono riuscito solo a definirle nella tabella dei simboli ma poi non ho alcun riscontro!!

Nella tabella dei simboli scrivo mw0 | WORD

oppure eb20 | BYTE

e poi?!

Se provassi a caricarle, che carico il nulla? Che sono semplici locazioni di memoria pre-allocate per poterle usare in un secondo momento?!

Spero che mi aiutiate.

Link al commento
Condividi su altri siti

Ciao Claudio900, le aree di memoria che cominciano con M sono le così dette Merker.

Sono delle aree di memoria disponibili all'interno del PLC (la quantità varia a seconda della taglia della CPU utilizzata) non ritentive (in verità puoi decidere se usare una parte di Merker ritentive :P )

Non hai bisogno per forza di dichiararle nella lista dei simbolici.

Facciamo un esempio:

hai un ingresso digitale E0.0, questo ingresso deve impostare ad uno il merker M0.0 quando è attivo.

Il merker M0.0 setterà ad 1 il merker M0.1 quando è attivo.

L'ingresso digitale E0.1 setterà a 0 M0.1 quando è attivo.

U M0.0

S M0.1 //in questo caso M0.1 rimarrà a 0 perchè M0.0 non è stato ancora scritto da nessuno, di default è FALSE o 0.

U E0.0

= M0.0

U M0.0

S M0.1 //in questo caso M0.1 andrà a 0 perchè M0.0 è stato scritto da E0.0.

U E0.1

R M0.1 //Viene resettato M0.1, il suo valore diventa nuovamente 0

Spero che sia stato di aiuto.

Good Luck, Jake B)

Link al commento
Condividi su altri siti

Grazie per la risposta jake, era una cosa evidente ma che non riuscivo a vedere.

Un ultima cosa: un dato che arriva in ingresso di tipo word, quindi una EW , in questo caso si parla di input analogico giusto?!

Se volessi assegnare ad un merker quindi una MW n quel dato EW n ricevuto in ingresso si farebbe cosi?!

UW EW byte.bit

= MW byte

non so se ho scritto una baggianata perdonami.

Spero sia una tua svista altrimenti mi demoralizzo perchè non ci ho capito nulla!!!

U E0.0

= M0.0

U M0.0

S M0.1 //in questo caso M0.1 andrà a 1 perchè M0.0 è stato scritto da E0.0.

Ciao Jake! grazie ancora!

Link al commento
Condividi su altri siti

Ciao Claudi900;

gli ingressi analogici sono sì dati i tipo intero, ma al contrario dei booleani si interrogano con il comando L (ovvero Load, carica) e si indicano come PEW.

Nel tuo caso dovresti scrivere questo, premesso che l'ingresso analogico sia PEW124 ed il merker sia MW0, il codice sarà come segue:

L PEW124 //Carica in AR1(Registro di sistema) il valore di PEW124

T MW0 //Trasferisce il valore letto da PEW124 su MW0 (passando da AR1)

Ricordati che tutti i valori diversi da BOOLEAN (INT, DINT, WORD,BYTE, REAL) vanno maneggiati coi comandi L(per scrivere su AR1 il dato) e T(per trasferire da AR1 sulla memoria target);

Spero di essere stato chiaro ;)

Good Luck, Jake B)

Link al commento
Condividi su altri siti

Non mollare mai, anche se la strada è lunga, perchè comunque è molto soddisfacente - almeno da parte mia - programmare i PLC.

Io ti consiglio di dare un occhio ai manuali siemens, che sono fatti bene ed hanno anche molti esempi.

Good Luck, Jake B)

Link al commento
Condividi su altri siti

  • 2 weeks later...

Ciao a tutti e grazie per l'aiuto e il sito molto bello.

pongo questa domanda:

come comunicano il PLC tramite CP343 e un protocollo OPC?

posso evitare di usare un fornitore OPC e andare direttamente su un PC in maniera autonoma?

Grazie per i chiarimenti a tutti

Coriolano.

Link al commento
Condividi su altri siti

Beh, puoi inviare i dati via socket TCP o UDP.

Controlla le seguenti funzioni:

TCON : Crea la connessione TCP o UDP

TDISCON : Distrugge la connessione

TSEND : Invia un'area dati su una connessione definita

TRCV: riceve un'area dati da una connessione definita

Per FW precedenti al 3.x la connessione la configuri da NetPro e usi AG_Send AG_Recv per inviare e ricevere ...

Se vuoi fare qualche test puoi usare Hiperterminal, basta che lo metti in ascolto sulla porta giusta :-) e poi ci mandi qualche cosa dal tuo S7-300 ...

... Fare un po di palestra aiuta ;-)

Link al commento
Condividi su altri siti

  • 6 years later...
  • 11 months later...
Il 6/6/2012 alle 15:20 , Coriolano ha scritto:

Ciao a Tutti

 

come posso trasferire un centinaio di valori booleani interi ecc. su un unico DB da andare a leggere?

 

Grazie a tutti

Coriolano.

3D tutt'ora interessante

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