Vai al contenuto
PLC Forum


Salvare Dei Dati E Visualizarli Su Un Tp170a


Messaggi consigliati

Inserita: (modificato)

Ciao tecnologyassistence :)

Dunque andiamo per parti....

Io adesso sono ONLINE con una CPU 314... ho il FC11 richiamato da OB35 che mi aggiorna il DB11 ogni 500ms ... tutto normale.

Allora, innazitutto... verifica ed eventualmente aggiorna l'orologgio PLC utilizzando il box del SW S7... vai sulla barra del menu in alto, seleziona PLC / Diagnostic-Setting / Set time of Day... ( PLC/ Diagnostica-Impostazioni / Imposta .....)

Dal box del Set Time of Day sincronizza l'orologgio PLC con quello del PC....

Poi, sulla tabella di variabili VAT1 dovresti ricavare la data ed ora per forza.

LB 17

T MB17

LB 16

T MB16

LB 15

T MB15 e cosi via

non possiamo utilizare questo sistema in qualche modo?

Certo che puoi.... Io pensavo che l'orologgio non ce lo avevi... <_<

...adesso vorrei chiedervi se qualcuno di voi mi sa spiegare come posso fare a sapere ad esempio:

in quale momento la rigenerazione e' partita e memorizzare l'ora in cui il ciclo e' partito e' magari settare delle memorie associate ad un testo che rimangono memorizzate assieme all'ora e' possibile farlo grazie a tutti ciao Domenico

Per fare questo potresti escrivere qualcosa del genere..

        UN M 1.0   // se ce l'evento  
        O   M 2.0   // solo una volta
        SPB salto
        Carica i valori di data ed ora  (6 bytes)
        Trasferisci nel DB del archivio Date&Time ( non so... DB12 per esempio)
        Carica i valori di ....
        Trasferisci nel DB del archivio Altri_Dati( non so... DB13 per esempio)
        Incrementa l'indice
        S M 2.0     
salto   NOP 0
        UN M 1.0   // se non ce l'evento 
        R   M 2.0
Dovresti creare una FC che riceva in INPUT l'indice per il DB e l'offset per la DW a partire da dove salvare piu' i valori da salvare cioe' i 6 bytes data ed ore... altri dati. Esempio..
 
FC 12
Name      DataType      Commento
-----------------------------------------------------------------------
IndiceDB    Word           
OffsetDW    Word
data        Byte            
ore         Byte           
min         Byte           
...
..
altri dati..

Volendo potresti pasarli anche dei dati del tipo DWord oppure in Date_And_Time direttamente.

Nel FC 12 dovresti usare dei puntatori...

Non so, se vedi che non ci riesci potrei vedere di preparati qualcosa... fammi sapere.

....Ma approposito.. dopotutto l'orologgio ce lo hai girando o cosa <_<

Modificato: da Savino

  • Risposte 50
  • Created
  • Ultima risposta

Top Posters In This Topic

  • tecnologyassistence

    24

  • Savino

    18

  • ken

    5

  • Gianmario Pedrani

    1

tecnologyassistence
Inserita:

ciao savino pensavo che la discussione con ken l'avevi letta gli avevo gia detto che usavo LB17 ecc..

comunque scusami ancora ho letto tutto quello che hai scritto e ti ringrazio ancora per la tua pazienza sto cercando di tirare su l'esempio che mi hai scritto ma non ho capito come usare i puntatoridevo fare cosi?:

un m1.0 questo corrisponde al merker es:che dara' l'allarme?

0 m2.0

spb salto (non mi permette di scriverlo e' evidenziato in rosso)

devo fare cosi?

l lb12

l lb13

l lb14

l lb15

l lb16

l lb17

t db12

carico valori???non ho capito quali

t db 13

incrementa

s m2.0

nop 0

un m1.0

r m2.0

adesso cosa faccio creo un fc12

e scrivo

indice db

offset ecc..sicuramente sto sbagliando

non so :(

Inserita:

Ciao,

Ho capito, tu ricavi dalle variabili globali del OB1, quindi tu hai:

      L     LB    12
      T     MB    12  // anno
      L     LB    13
      T     MB    13  // mese
      L     LB    14
      T     MB    14  // giorno
      L     LB    15
      T     MB    15  // ora
      L     LB    16
      T     MB    16  // min
      L     LB    17
      T     MB    17  // sec
spb salto (non mi permette di scriverlo e' evidenziato in rosso)
Utilizza piuttosto di "salto" un'altra eticchetta non so M1 ... vedi sotto
        .....
        .....
        SPB   M1
        .....
        .....
  M1:   NOP   0
        .....

carico valori???non ho capito quali

Quelli sulle MB 12 alla MB17...

Comunque, visto che sei alle prime armi, penso che ti sara' un po' durina creare questo FC :(

Vedo cosa posso eventualmente fare <_<

tecnologyassistence
Inserita:

ok savino se non ti chiedo troppo accetterei ben volentieri un tuo esempio

nell'attesa vedo di provarci grazie ancora. :(

tecnologyassistence
Inserita:

il problema piu' grosso e' che mi sono impelagato in questo lavoro e devo cercare di venirne fuori portando a termine e soddisfando tutte le richieste fatte dal mil cliente

non so ma penso che questo tipo di problema sia + grande di me :(

Inserita: (modificato)
adesso vorrei chiedervi se qualcuno di voi mi sa spiegare come posso fare a sapere ad esempio:

in quale momento la rigenerazione e' partita e memorizzare l'ora in cui il ciclo e' partito e' magari settare delle memorie associate ad un testo che rimangono memorizzate assieme all'ora e' possibile farlo

Dunque.. crea il FC 12.. lo chiami "WriteOffset"..

Nella tabella d'interfaccia inserisce le variabili sotto elencate per IN e TEMP:

FC 12 : Write Offset

IN 
Name      DataType      Commento
-----------------------------------------------------------------------
DB_NUM      Word           
DB_OFFSET   Word
VAL1        Word            
VAL2        Word           
VAL3        Word     

TEMP
Name      DataType      Commento
-----------------------------------------------------------------------
AKK1      DWord           
AKK2      DWord
STW       Word            
INDEX     Word
Poi nel segmento 1 scrivi: ( copia / incolla )
 
      L     #DB_NUM
      T     #INDEX
      TAK   
      L     #AKK1
      AUF   DB [#INDEX]

      L     #VAL1
      T     #AKK1
      TAK   
      T     #AKK2
      L     STW
      T     #STW
      L     #DB_OFFSET
      SLW   4
      LAR1  
      L     #STW
      T     STW
      L     #AKK2
      L     #AKK1
      T     DBW [AR1,P#0.0]

      L     #VAL2
      T     #AKK1
      TAK   
      T     #AKK2
      L     STW
      T     #STW
      L     #DB_OFFSET
      SLW   4
      LAR1  
      L     #STW
      T     STW
      L     #AKK2
      L     #AKK1
      T     DBW [AR1,P#2.0]

      L     #VAL3
      T     #AKK1
      TAK   
      T     #AKK2
      L     STW
      T     #STW
      L     #DB_OFFSET
      SLW   4
      LAR1  
      L     #STW
      T     STW
      L     #AKK2
      L     #AKK1
      T     DBW [AR1,P#4.0]
Come richiamare FC12 WriteOffset:
 
      UN    M    165.0       //  trigger 
      SPB   M001
      CALL  "WriteOffset"    //  FC 12
       DB_NUM   :=MW240      //  N. Data Block (DB) 
       DB_OFFSET:=MW242      //  Offset 
       VAL1     :=MW244      //  prima word di dati
       VAL2     :=MW246      //  seconda word di dati
       VAL3     :=MW248      //  terza word di dati
M001: NOP   0
Il FC 12 scrive 3 WORDS di dati a partire dal offset DBx1DWx2. x1 ( DB_NUM ) e' il numero del DB: Deve esistere ed essere lungo almeno di 3 words. x2 (DB_OFFSET ) e' il numero della DW di offset, a partire da dove verrano scritte le 3 words. VAL1 - 2 e 3 sono i 6 bytes di dati. Ad esempio supponiamo che lo richiami 2 volte per salvare dei dati su 2 DB diversi, DB 2 e DB 3. Nel DB 2 salvi i 6 bytes di data ed ora. Nel DB 3 salvi 6 bytes di altri dati.
 

     //Carichi l'orologgio
      L     LB    12
      T     MB    244  // anno
      L     LB    13
      T     MB    245  // mese
      L     LB    14
      T     MB    246  // giorno
      L     LB    15
      T     MB    247  // ora
      L     LB    16
      T     MB    248  // min
      L     LB    17
      T     MB    249  // sec 

      L     2         
      T     MW240            // DB 2

      L     0
      T     MW242           //  DW 0

      // Se tigger =1, allora salvi. 

      UN    M    165.0       //  trigger 
      SPB   M001
      CALL  "WriteOffset"    //  FC 12
       DB_NUM   :=MW240      //  N. Data Block (DB) 
       DB_OFFSET:=MW242      //  Offset 
       VAL1     :=MW244      //  prima word di dati
       VAL2     :=MW246      //  seconda word di dati
       VAL3     :=MW248      //  terza word di dati
M001: NOP   0

Costruisce un DB 2 lungo 12 words.

Poi richiami il FC 12 .

Se..

MW 242 =0 : FC12 scrive la data ed ora negli offset 0 - 2 - 4.

MW 242 =3 : FC12 scrive la data ed ora negli offset 6 - 8 - 10.

MW 242 =6 : FC12 scrive la data ed ora negli offset 12 - 14 - 16.

MW 242 =9 : FC12 scrive la data ed ora negli offset 18 - 20 -22.

Prova a scrivere la funzione e testarla con una tabella VAT.

Poi vediamo se cominci a vedere piu' chiaro ;)

Modificato: da Savino
tecnologyassistence
Inserita:

ciao savino ho fatto tutto il copia e incolla di tutto ma nel segn°2 come richiamare fc12

a partire da DB_NUM :=M240 ho tutto evidenziato in rosso come faccio?

Inserita:

Ciao,

Allora.. quando hai finito il segmento 1, salva e chiude il blocco.

Poi, devi richiamarlo da un'altro FC oppure da OB1.

tecnologyassistence
Inserita:

ok savino funziona adesso se voglio provare on-line con il simulatore del tp a memorizzare un testo e l'ora e poi resettarla come posso fare?

tecnologyassistence
Inserita:

e allora savino cambiando lo stato dell'M 165.0 nella tabella delle variabili e' cambiata qualcosa ma rimane

invariata nonostante cambia lo stato dell'ingresso ma se visualizzo lo stato del mio FC vedo che variando lo stato dell'ingresso MW240 ed il resto iniziano a girare cambiano i numeri se metto a0 il segnale IN vedo memorizzati dei valori adesso sto provando a visualizzare qualcosa sul TP sto cercando di capire come fare apparire l'ora associata ad un MERKER che a sua volta restando settato rimanga invariato fino a quando non viene resettato :rolleyes:

Inserita: (modificato)
....ad esempio:

in quale momento la rigenerazione e' partita e memorizzare l'ora in cui il ciclo e' partito e' magari settare delle memorie associate ad un testo che rimangono memorizzate assieme all'ora

undefined

Allora, dovresti assocciare delle memorie di "stato delgi eventi" con le variabili di data ed ora per esempio :

M 10.0 = start ciclo di regenerazione => salvi data ed ora a partire dal offset 0 della DB2

M 10.1 = stop ciclo di regenerazione => salvi data ed ora a partire dal offset 6 della DB2

M 10.2 = Fault avvenuto => salvi data ed ora a partire dal offset 6 della DB2

..

Contemporaneamente salvi anche nella DB 3 questa MB 10 o MW 10 insieme ad altri due words che potrebbero essere dei valori di temperatura e pressione.

se voglio provare on-line con il simulatore del tp

Non conosco il simulatore del TP.... comunque dovreti sempre associare delle variabili tags nel ambiente TP con le aree di questi DBs.

...e poi resettarla come posso fare?

Anche qui... devi crearti delle pagine con dei pulsanti virtuali associati con delle memorie, etc.. nel PLC.

non so ma penso che questo tipo di problema sia + grande di me

Vedi te... il mio aiuto era mirato a darti una idea di massima ma non di farti tutto il programma...e quindi il discorso cambiarebbe.... per mettere giu' un programmino "ben fatto" anche se non molto grande ci vorrebbe avere innazitutto tutta l'info neccessaria per cosi estimare il tempo di sviluppo e test che ci vorrebbero.

Comunque,penso che tutto sommato, con le informazioni ti avevo dato avresti dovuto vedere piu' chiaro :huh:

Modificato: da Savino
Inserita: (modificato)

Utilizza una VAT come quella di sotto.

Address      Symbol             Display Format   Status value  Modify value
-------------------------------------------------------------------------------
MW   240                            DEC            2               2
MW   242                            DEC            9               9
MW   244                            HEX            W#16#0612     
MW   246                            HEX            W#16#0319     
MW   248                            HEX            W#16#0054     
DB2.DBW  0   "Data&Time".DB_VAR0    HEX            W#16#0612    
DB2.DBW  2   "Data&Time".DB_VAR1    HEX            W#16#0309    
DB2.DBW  4   "Data&Time".DB_VAR2    HEX            W#16#3923    
DB2.DBW  6   "Data&Time".DB_VAR3    HEX            W#16#0612    
DB2.DBW  8   "Data&Time".DB_VAR4    HEX            W#16#0309    
DB2.DBW 10   "Data&Time".DB_VAR5    HEX            W#16#3932    
DB2.DBW 12   "Data&Time".DB_VAR6    HEX            W#16#0612    
DB2.DBW 14   "Data&Time".DB_VAR7    HEX            W#16#0309    
DB2.DBW 16   "Data&Time".DB_VAR8    HEX            W#16#3942    
DB2.DBW 18   "Data&Time".DB_VAR9    HEX            W#16#0612    
DB2.DBW 20   "Data&Time".DB_VAR10   HEX            W#16#0319    
DB2.DBW 22   "Data&Time".DB_VAR11   HEX            W#16#0054    
MB   165                            BIN            2#0000_0001     2#0000_0001

Per esempio, se guardi la MW242 ha un valore 9. Quindi se la M 165.1 e' a 1 la data ed ora vengono scritte nelle DW 18,20.22.

Quindi a secondo l'evento imposti un indice diverso in MW244 in un intervallo 0-3-6-9 se la DB ha 12 words. Dovresti fare molto feedback ;)

Modificato: da Savino
tecnologyassistence
Inserita:

ok savino grazie ancora come provo ti faccio sapere grazie mille :rolleyes:

Inserita:
M 10.2 = Fault avvenuto => salvi data ed ora a partire dal offset 6 della DB2

Correzione

M 10.2 = Fault avvenuto => salvi data ed ora a partire dal offset 12 della DB2

tecnologyassistence
Inserita:

ciao savino volevo farti sapere che sono riuscito a far girare tutto non voglio chiederti piu' niente hai fatto moltissimo per aiutarmi l'unico ostacolo che rimane e' l'ora e minuti e secondi in pratica quando il trigger va su cambiano i valori non appena torna giu nella tabella delle variabili vedo i dati DATE_TIME ma trasferendoli al TP non corrispondono a quelli reali nonostante l'orologio corrisponde al pc bohhh..

comunque grazie non sono stato cosi bravo nonostante il tuo aiuto molto semplice ho stampato tutto l'ho riletto 100 volte sto cercando di saltare l'ostacolo grazie ancora ciao.

Domenico

Inserita:

Ciao Domenico,

.....

Bravo! :)

... ma trasferendoli al TP non corrispondono a quelli reali nonostante l'orologio corrisponde al pc bohhh..

Forse non stai indirizzando bene dal lato TP. Se non sbaglio dovresti indirizzare 3 bytes in formato decimale <_<

tecnologyassistence
Inserita:

ciao Savino come va devo distubarti ancora una volta ho fatto il programmino e' funziona ma non capisco una cosa perche sulla tabella della variabili non visualizzo i secondi i minuti e l'ora corretta?

in pratica vedo muovere a secondo il merker che metto a 1 ma i valori non vorrispondono a l'ora reale

mi aiuteresti ancora una volta ciao Domenico

Inserita:

Ciao tecnologyassistence,

Dunque.. il formato delle variabili sulla tabella e' in esadecimale (HEX) ?

L'orologgio del PLC e' aggiornato con rispetto all'orologgio del PC. ?

Quali valori ricavi ?

tecnologyassistence
Inserita:

MW 240 DEC 2

MW 242 DEC 0

MW 244 HEX W#16#0612

MW 246 HEX W#16#0918

MW 248 HEX W#16#4600

DB2.DBW 0 HEX W#16#0612

DB2.DBW 2 HEX W#16#0918

DB2.DBW 4 HEX W#16#4525

DB2.DBW 6 HEX W#16#3843

DB2.DBW 8 HEX W#16#1704

DB2.DBW 10 HEX W#16#0000

DB2.DBW 12 HEX W#16#0000

DB2.DBW 14 HEX W#16#0000

DB2.DBW 16 HEX W#16#0000

DB2.DBW 18 HEX W#16#0000

DB2.DBW 20 HEX W#16#0000

DB2.DBW 22 HEX W#16#0000

MB 165 BIN 2#0000_0000

M 10.0 DEC 0 0

M 10.1 BOOL false false

M 10.2 BOOL false false

allora sull' fc12 scrivo cosi'

L 2

T MW 240

L MW 10 [appoggio pompa in marcia] metto questo dovrebbe essere M10.0

T MW 242

UN M 165.0

SPB M001

CALL "writeoffset"

DB_NUM :=MW240

DB_OFFSET:=MW242

VAL1 :=MW244

VAL2 :=MW246

VAL3 :=MW248

M001: NOP 0

questo e' quanto ho scritto ma della dbw4 non corrispondono i minuti,nella dbw2 il 18 dovrebbe essere l'ora

ma sono le ultime due cifre ma non riesco a visualizarle sul tp dove scrivo

rappresentazione:DATA E ORA

tipo WORD

numero della WORD

come mai???

Inserita:
questo e' quanto ho scritto ma della dbw4 non corrispondono i minuti,nella dbw2 il 18 dovrebbe essere l'ora

MW 240 DEC 2 
MW 242 DEC 0 
MW 244 HEX W#16#0612 
MW 246 HEX W#16#0918 
MW 248 HEX W#16#4600 

DB2.DBW 0 HEX W#16#0612 
DB2.DBW 2 HEX W#16#0918 
DB2.DBW 4 HEX W#16#4525
Dunque andiamo per parti..... vedo che quando salve nella DB2 , i minuti e secondi non corrispondono !!
L MW 10 [appoggio pompa in marcia] metto questo dovrebbe essere M10.0 T MW 242
Questo non va bene... Sulla MW 242 devi dare l'offset del DB ... se questo e' lungo 12 WORDS puoi darli solo i valori tra 0-3-6-9 Dovresti fare presa poco cosi'...
        UN M 10.0   // se ce l'evento 1  
        O   M 2.0   // solo una volta
        SPB M001
        L 2
        T MW 240      
        L 0
        T MW 242
        CALL "writeoffset"      // salva 
        DB_NUM :=MW240
        DB_OFFSET:=MW242
        VAL1 :=MW244          // ora
        VAL2 :=MW246          // min
        VAL3 :=MW248          // sec
        S M 2.0                     // solo una volta
M001:   NOP 0
        UN M 10.0   // se non ce l'evento 1
        R   M 2.1
       ......
        UN M 10.1   // se ce l'evento  2 
        O   M 2.1   // solo una volta
        SPB M002
        L 2
        T MW 240
        L 3
        T MW 242
        CALL "writeoffset"      // salva
        DB_NUM :=MW240
        DB_OFFSET:=MW242
        VAL1 :=MW244          // ora
        VAL2 :=MW246          // min
        VAL3 :=MW248          // sec
        S M 2.1                     // solo una volta
M002:   NOP 0
        UN M 10.1   // se non ce l'evento 2 
        R   M 2.1

Allora prova a impostare il codice cosi.... setta la M 10.0 e poi la M 10.1

Dovresti salvare la data e ora sulle WORDS 0-2-4 e 6-8-10 del DB2 !

tecnologyassistence
Inserita:

ok Savino funziona tutto alla perfezione adesso ho capito e riesco a vedere che salva nelle dbw in funzione del valore 0-3-6-9 ok ma come faccio a trasferire la es:DBW4 con questo valore es:w#16#0612 il 06 dovrebbe essere l'anno 2006 ed il 12 dovrebbe essere dicembre ecco una volta che trasferisco il dato come WORD mi ritrovo l'anno prima ed il mese dopo e cosi anche per i minuti assieme ai secondi come faccio?

Inserita: (modificato)
...ma come faccio a trasferire la es:DBW4 con questo valore es:w#16#0612 il 06 dovrebbe essere l'anno 2006 ed il 12 dovrebbe essere dicembre ecco una volta che trasferisco il dato come WORD mi ritrovo l'anno prima ed il mese dopo e cosi anche per i minuti assieme ai secondi come faccio?

Devi leggere byte x byte e poi li ordeni a secondo la tua necessita'... allora ... supponiamo che hai:

DB2.DBW 0 HEX W#16#0612  
DB2.DBW 2 HEX W#16#0918 
DB2.DBW 4 HEX W#16#4525
Poi, dal lato TP dichiari 6 tags (variabili) del tipo BYTE e fai la associazione con le data byte della DB2.
 Tags TP          PLC
---------------------------------
Var_Giorno = DB2.DBB 2
Var_Mese   = DB2.DBB 1
Var_Anno   = DB2.DBB 0
Var_ore    = DB2.DBB 3
Var_Min    = DB2.DBB 4 
Var_Sec    = DB2.DBB 5

Var_Giorno / Var_Mese / Var_Anno 
Var_ore : Var_Min . Var_Sec

Purtroppo non possiedo il SW del TP e quindi non potrei indicarti la procedura con esattezza ma dovrebbe presa poco essere cosi.

Modificato: da Savino
Inserita:
Poi, dal lato TP dichiari 6 tags (variabili) del tipo BYTE e fai la associazione con le data byte della DB2.

I/O Integer (intero... INT) ... tanto nel PLC le variabili sono gia' in BCD. ;)

tecnologyassistence
Inserita:

ciao Savino sei un grande mi hai risolto 1000 problemi non so come ringraziarti grazie d'avvero sei stato gentilissimo adesso che ho capito e provato tutto vado alla grande se non ho capito male se devo allungare e quindi usare unaltra DB ES: DB2 comunque grazie mille :):);) ciao Domenico

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