Vai al contenuto
PLC Forum


Visualizzare temperature su hmi ktp600 siemens


massimo1234

Messaggi consigliati

Ciao 

sono nuovo del forum

ho fatto un programma come autodidatta dove ho usato una cpu 313c

a questa ho creato dei temporizzatori e ho collegato delle pt100 per leggere delle temperature 

la mia domanda era come posso collegare un pannello ktp600 per visualizzare le temperature e impostare i temporizzatori 

come dovrei procedere?

il programma sul plc l ho fatto in kop senza utilizzare fb,db o altro solo in fc

grazie

Link al commento
Condividi su altri siti


Come lo programmi il pannello ? Tia o WInCC Flexible ?

 

Non importa se hai usato solo merker, va bene uguale per imparare. Devi creare il collegamento tra il tuo plc e il pannello in WinCC. Sia che lo metti in Ethernet, sia che usi la vecchia MPI. In pratica devi dirgli al pannello dove e come comunicare col plc e poi abbini le variabili che crei sul pannello, ai merker del plc collegato.

Link al commento
Condividi su altri siti

Quello che mi è sconosciuto abbinare le variabili sul pannello

per esempio volevo cambiare da pannello i settaggi di un temporizzatore o di una soglia di temperatura come dovrei fare 

come si fa a creare delle variabili sul pannello ed abbinarle 

uso wincc flexible 

Link al commento
Condividi su altri siti

Non lo uso più molto, ma nella finestra PROGETTO , praticamente la finestra verticale di sinistra, hai la sottocartella COMUNICAZIONE ( Sta sotto a PAGINE )

 

Li crei il collegamento al tuo PLC

Poi nella cartella variabili inserisci il nome della variabile, il collegamento che hai creato, il tipo di dato, il simbolo che vuoi dargli e il merker equivalente sul PLC

Link al commento
Condividi su altri siti

Ciao ho fatto esattamente come mi hai detto

si ho creato delle variabili e le ho abbinate

volevo solo sapere se posso comandare direttamente un uscita con un pulsante sul pannello o devo creare un merker per poi attivarlo e comandare l uscita 

perché ho provato direttamente a comandare l uscita cioè ad abbinare il pulsante sull uscita ma non me la fa salire

grazie 

Link al commento
Condividi su altri siti

Ciao ho fatto esattamente come mi hai detto

si ho creato delle variabili e le ho abbinate

volevo solo sapere se posso comandare direttamente un uscita con un pulsante sul pannello o devo creare un merkel per poi attivarlo e comandare l uscita 

perché ho provato direttamente a comandare l uscita cioè ad abbinare il pulsante sull uscita ma non me la fa salire

poi un altra precisazione per sincronizzare l orario con la cpu come devo fare ?

grazie 

Link al commento
Condividi su altri siti

Non mi comanda le uscite o ingressi sul plc

metto boleana ma non mi fa impostare il bit di comando 1 nell evento pulsante

invece se imposto tag come byte 

sull evento mi fa mettere bit 1 come comando pressione pulsante ma però mi fa salire l intero byte ?

le letture analogiche delle temperature le leggo

ho un plc 313c

Link al commento
Condividi su altri siti

Sul comandare direttamente un'uscita da HMI non so risponderti e purtroppo non ho hw per testarlo, ma gli ingressi sicuramente non li comandi in nessun modo nemmeno da pc.

 

Ti posso dire che solitamente non si fa ( almeno io non l'ho davvero mai fatto ) un comando diretto da pulsante HMI a uscita fisica ( A x.x ) di un PLC, ma si preferisce appoggiare a merker. Questo per permettere di comandare la stessa uscita in altre casistiche, senza doverla scrivere due volte nel programma e rischiare di creare non pochi problemi se sbagli qualcosa nel ciclo del plc.

Solitamente le uscite si vanno a scrivere a fine ciclo plc, così sei certo che le scrivi una volta sola e non hai problemi, andando ad abbinare i merker ai relativi A x.x  ( Edito .. do per scontato che ovviamente anche il singolo merker lo scrivi una volta sola, e quindi usi più merker in giro per poi metterli in parallelo per attivare l'uscita, in modo da sapere chi e cosa la sta tirando su ... )

 

Se metti tag Byte e poi bit 1, ti porta a 1 il secondo bit del byte ... 0000.0010 se non erro.

 

Verifica solamente se il pulsante del pannello ti setta a 1 il bit/byte oppure fa solo una transizione su pressione, cioè quando rilasci il pulsante torna a zero, o fa uno scambio ad ogni pressione. Mi pare strano non si possa settare una variabile bool con un pulsante .... 

 

 

Consiglio ... visto che stai imparando, sforzati ad imparare ad usare le DB da subito e tenere i merker solo per casi particolari. Sembra una cosa complicatissima all'inizio, ma in realtà è davvero una stupidata e ti tiene organizzato meglio il lavoro, quando salirà di complessità

Link al commento
Condividi su altri siti

Ho provato ad inserire un merker nel programma che poi mi fa salire l uscita corrispondente 

da pannello ho messo nella tag il merker byte

e byte 

nella variabile di comando metto 1 quando il pulsante è premuto ma il merker nella simulazione va a -1 quando il bit di comando è 1 e dopo 0 quando metto il bit di comando a 0

ma non mi fa salire il merker ?

Link al commento
Condividi su altri siti

Non capisco il simulatore a -1 ... non avendolo mai usato

 

La variabile che setti ( byte ) è abbinata a un MB xx sul plc ?

Se si, dovrebbe alzarti sul plc il M xx.y , dove y è il bit che hai scelto di alzare nel tuo byte 

 

Dato che vedi a pannello le temperature in ingresso al plc, do per scontato che il collegamento sia ok al 100%

 

Verifica anche i cicli, ovvero ogni quanto scambi quella variabile tra plc e hmi

Link al commento
Condividi su altri siti

quando imposto i settaggi delle variabili per esempio avevo settato la tag byte e dopo avevo messo il nome di un uscita esempio q124.5

sull evento del pulsante riuscivo a mettere su pressione il bit 1

nella simulazione io vedevo andare a 1

la variabile e a 0 

come da comando settato a destra del simulatore wincc

cosi il pannello riusciva con la pressione del pulsante a comandare direttamente l uscita byte 

quando invece configuro con il merker

in simulazione vedo -1 e 0

a comando 

e non mi cambia il merker

Link al commento
Condividi su altri siti

Q124.5 è IL BIT 6 del Byte Q124 

 

Altra cosa, abituati alla simbologia tedesca ( settala nel programma ) se vuoi usare Siemens.  E (eingang) A (ausgang) li troverai molto più sovente

Link al commento
Condividi su altri siti

ora ti mando un po di immagini per capire meglio 

la prima foto sono le variabili booleane m40.0

e m20.0

image.jpg

Questa invece i settaggi dei due bottoni apri e chiudi

image.jpg

image.jpg

Link al commento
Condividi su altri siti

Sopra metto set value 1 

e premo il bottone apri

immediatamente il current val. va a -1

e' giusto ? O deve andare semplicemente a 1

io ho messo setbit e reset bit

invece se mettevo setbitwhilekeypressed

non mi faceva mettere il bit a 1

se invece metto byte nel tag

mi fa inserire set bit e io lo posso mettere a 1

nella finestra simulatore vedo maxvalue 255

e minvalue 0

quando setto 1 e comando con il pulsante 

ora si che vedo il valore corrente 1 e dopo 0

Link al commento
Condividi su altri siti

da 0 a 255 corrisponde ai valori decimali di un singolo Byte .... 8 bit .... 255 massimo valore decimale ... FF max esadecimale

 

Se nel set bit del tag Byte vai a settare il bit 0, ti scrive 1 ... se setti il bit 1 ti scriverà 2 ... se setti il bit 3 scriverà 4 .....  8 ... 16..... 32... 64...128.

Quello che leggi è la conversione decimale del Byte .... ma a te serve leggere il singolo bit nel plc poi... cosa fattibilissima.

 

 

Davvero non so dirti sul simulatore perché scrive -1 se metti il singolo merker bit.

 

 

Siccome Siemens fa pagare le TAG usate. era buona norma usare word o dword per settare i vari bit di un impianto, in modo da risparmiare le PowerTag di licenza. Quindi se impari a settare i singoli bit delle word/byte/dword e poi a smistarteli nel plc, risparmi soldi in progetti veri. Anche se ora mi han detto che gli ultimi TIA licenziano la singola variabile visualizzata a video e quindi il giochetto non vale più sui sistemi nuovi. Per varie ragioni il mio WinCC è licenziato a 65535 e quindi non ho verificato la cosa, per un po' sono ancora coperto ;)

 

 

 

 

Link al commento
Condividi su altri siti

Ok faccio cosi uso i byte grazie mille 

per quanto riguarda la sincronizzazione orologio il support Siemens mi dice di creane una db1 dati time

vado sul progetto e faccio inserisci blocco dati e lo chiamo db1 ?

o c è un blocco già fatto di time dalla Siemens e devo solo inserirlo dalla biblioteca?

Link al commento
Condividi su altri siti

Ti copio un sorgente utilizzato dai miei "antenati" ;) ....  ok sono partito con S5 a lavorare, ma oramai S7 lo vedo vecchio ;)

Se ti crei il file e ti importi il sorgente, te li trovi come FC 2 e DB 2 già fatti, poi guarda se riesci da solo a capire come settare la data alzando il bit giusto

Spero che funziona, ho preso un progetto che sta girando, ma non ho testato :D ... se usi S7 ... se usi TIA ti giro quello che sto usando e so per certo che va

 

 

DATA_BLOCK DB 2
AUTHOR : Pxx
FAMILY : Dati_D_T
NAME : Pxxx
VERSION : 3.0


  STRUCT     
   Sistema_Anno_BCD : BYTE ;    //ANNO di sistema - BCD
   Sistema_Mese_BCD : BYTE ;    //MESE di sistema - BCD
   Sistema_Giorno_BCD : BYTE ;    //GIORNO di sistema - BCD
   Sistema_Ora_BCD : BYTE ;    //ORA di sistema - BCD
   Sistema_Minuti_BCD : BYTE ;    //MINUTI di sistema - BCD
   Sistema_Secondi_BCD : BYTE ;    //SECONDI di sistema - BCD
   DB_VAR_6 : BYTE ;    
   DB_VAR_7 : BYTE ;    
   Imposta_Anno_BCD : BYTE ;    //ANNO impostazione - BCD
   Imposta_Mese_BCD : BYTE ;    //MESE impostazione - BCD
   Imposta_Giorno_BCD : BYTE ;    //GIORNO impostazione - BCD
   Imposta_Ora_BCD : BYTE ;    //ORA impostazione - BCD
   Imposta_Minuti_BCD : BYTE ;    //MINUTI impostazione - BCD
   Imposta_Secondi_BCD : BYTE ;    //SECONDI impostazione - BCD
   DB_VAR_14 : BYTE ;    
   DB_VAR_15 : BYTE ;    
   Sistema_Anno_Decimale : BYTE ;    //ANNO di sistema - decimale
   Sistema_Mese_Decimale : BYTE ;    //MESE di sistema - decimale
   Sistema_Giorno_Decimale : BYTE ;    //GIORNO di sistema - decimale
   Sistema_Ora_Decimale : BYTE ;    //ORA di sistema - decimale
   Sistema_Minuti_Decimale : BYTE ;    //MINUTI di sistema - decimale
   Sistema_Secondi_Decimale : BYTE ;    //SECONDI di sistema - decimale
   DB_VAR_22 : BYTE ;    
   DB_VAR_23 : BYTE ;    
   Imposta_Anno_Decimale : BYTE ;    //ANNO impostazione in decimale
   Imposta_Mese_Decimale : BYTE ;    //MESE impostazione in decimale
   Imposta_Giorno_Decimale : BYTE ;    //GIORNO impostazione in decimale
   Imposta_Ora_Decimale : BYTE ;    //ORA impostazione in decimale
   Imposta_Minuti_Decimale : BYTE ;    //MINUTI impostazione in decimale
   Imposta_Secondi_Decimale : BYTE ;    //SECONDI impostazione in decimale
   DB_VAR_30 : INT ;    //numero giorno dell'anno
   DB_VAR_32 : INT ;    
   DB_VAR_34 : INT ;    
   DB_VAR_36 : INT ;    
   DB_VAR_38 : INT ;    
   Carica_Set_Data_Ora : BOOL ;    //carica nuovo set data e ora
   Set_Data_Ora_Caricati : BOOL ;    //memoria caricamento set dati e ora
   Fp_Caricamento_Dati : BOOL ;    //Fp caricamento completato set data e ora
   DB_VAR_40_3 : BOOL ;    
   DB_VAR_40_4 : BOOL ;    
   DB_VAR_40_5 : BOOL ;    
   DB_VAR_40_6 : BOOL ;    
   DB_VAR_40_7 : BOOL ;    
  END_STRUCT ;    
BEGIN
   Sistema_Anno_BCD := B#16#0; 
   Sistema_Mese_BCD := B#16#0; 
   Sistema_Giorno_BCD := B#16#0; 
   Sistema_Ora_BCD := B#16#0; 
   Sistema_Minuti_BCD := B#16#0; 
   Sistema_Secondi_BCD := B#16#0; 
   DB_VAR_6 := B#16#0; 
   DB_VAR_7 := B#16#0; 
   Imposta_Anno_BCD := B#16#0; 
   Imposta_Mese_BCD := B#16#0; 
   Imposta_Giorno_BCD := B#16#0; 
   Imposta_Ora_BCD := B#16#0; 
   Imposta_Minuti_BCD := B#16#0; 
   Imposta_Secondi_BCD := B#16#0; 
   DB_VAR_14 := B#16#0; 
   DB_VAR_15 := B#16#0; 
   Sistema_Anno_Decimale := B#16#0; 
   Sistema_Mese_Decimale := B#16#0; 
   Sistema_Giorno_Decimale := B#16#0; 
   Sistema_Ora_Decimale := B#16#0; 
   Sistema_Minuti_Decimale := B#16#0; 
   Sistema_Secondi_Decimale := B#16#0; 
   DB_VAR_22 := B#16#0; 
   DB_VAR_23 := B#16#0; 
   Imposta_Anno_Decimale := B#16#0; 
   Imposta_Mese_Decimale := B#16#0; 
   Imposta_Giorno_Decimale := B#16#0; 
   Imposta_Ora_Decimale := B#16#0; 
   Imposta_Minuti_Decimale := B#16#0; 
   Imposta_Secondi_Decimale := B#16#0; 
   DB_VAR_30 := 0; 
   DB_VAR_32 := 0; 
   DB_VAR_34 := 0; 
   DB_VAR_36 := 0; 
   DB_VAR_38 := 0; 
   Carica_Set_Data_Ora := FALSE; 
   Set_Data_Ora_Caricati := FALSE; 
   Fp_Caricamento_Dati := FALSE; 
   DB_VAR_40_3 := FALSE; 
   DB_VAR_40_4 := FALSE; 
   DB_VAR_40_5 := FALSE; 
   DB_VAR_40_6 := FALSE; 
   DB_VAR_40_7 := FALSE; 
END_DATA_BLOCK

FUNCTION FC 2 : VOID
TITLE =Gestione Date e Time
AUTHOR : Pinc
FAMILY : DataTime
NAME : Pincetti
VERSION : 3.0


VAR_TEMP
  SET_DATA_ORA : DATE_AND_TIME ;    
  VALORE_RITORNO : INT ;    
  AUX_DATE_HEURE : DATE_AND_TIME ;    
  AUX_STATUS : INT ;    
  BCD_GIO_ANNO : INT ;    
END_VAR
BEGIN
NETWORK
TITLE =LETTURA DATA E ORA DI SISTEMA (PLC)


      CALL SFC    1 (
           RET_VAL                  := #AUX_STATUS,
           CDT                      := #AUX_DATE_HEURE);

      L     LB    10; 
      T     DB2.DBB    0; // anno di sistema in BCD
      L     LB    11; 
      T     DB2.DBB    1; // mese di sistema in BCD
      L     LB    12; 
      T     DB2.DBB    2; // giorno di sistema in BCD
      L     LB    13; 
      T     DB2.DBB    3; // ora di sistema in BCD
      L     LB    14; 
      T     DB2.DBB    4; // minuti di sistema in BCD
      L     LB    15; 
      T     DB2.DBB    5; // secondi di sistme in BCD

NETWORK
TITLE =GENERAZIONE DATA E ORA IN DECIMALE

      L     DB2.DBB    0; // anno di sistema in BCD
      BTI   ; 
      T     DB2.DBB   16; // anno numero intero

      L     DB2.DBB    1; // mese di sistema in BCD
      BTI   ; 
      T     DB2.DBB   17; // mese numero intero

      L     DB2.DBB    2; // giorno di sistema in BCD
      BTI   ; 
      T     DB2.DBB   18; // giorni numero intero

      L     DB2.DBB    3; // ora di sistema in BCD
      BTI   ; 
      T     DB2.DBB   19; // ora numero intero

      L     DB2.DBB    4; // minuti di sistema in BCD
      BTI   ; 
      T     DB2.DBB   20; // minuti numero intero

      L     DB2.DBB    5; // secondi di sistme in BCD
      BTI   ; 
      T     DB2.DBB   21; // secondi numero intero


NETWORK
TITLE =Compone ora e minuti in virgola mobile


      L     DB2.DBB   19; // ora di sistema 
      ITD   ; 
      DTR   ; 
      T     DB3.DBD   52; // ora in vigola mobile

      L     DB2.DBB   20; // minuti
      ITD   ; 
      DTR   ; 
      L     1.000000e+002; 
      /R    ; 
      L     6.000000e-001; 
      /R    ; 
      T     DB3.DBD   56; // minuti in decimali in vigola mobile


      L     DB3.DBD   52; // ora in virgola mobile
      L     DB3.DBD   56; // minuti in decimali in vigola mobile
      +R    ; 
      T     DB3.DBD   64; // ora+minutidi sistema in decimale in vigola mobile

NETWORK
TITLE =giorno dell'anno


      CALL FC   230 (
           ANNO                     := DB2.DBB    0,// anno di sistema in BCD
           MESE                     := DB2.DBB    1,// mese di sistema in BCD
           GIORNO                   := DB2.DBB    2,// giorno di sistema in BCD
           JUL_DAY                  := DB2.DBW   30);// giorno anno

      L     DB2.DBW   30; // numero del giorno dell'anni in numero intero
      ITD   ; 
      DTR   ; 
      T     DB3.DBD   36; // numero del giorno dell'anno in numero in virgola mobile


NETWORK
TITLE =converti impostazioni da intero a BCD


      L     DB2.DBB   24; // imposta anno
      ITB   ; 
      T     DB2.DBB    8; // imposta anno in BCD

      L     DB2.DBB   25; // impista mese
      ITB   ; 
      T     DB2.DBB    9; // imposta mese in BCD

      L     DB2.DBB   26; // imposta giorno
      ITB   ; 
      T     DB2.DBB   10; // imposta giorno in BCD

      L     DB2.DBB   27; // imposta ora 
      ITB   ; 
      T     DB2.DBB   11; // imposta ora in BCD

      L     DB2.DBB   28; // impista minuti
      ITB   ; 
      T     DB2.DBB   12; // imposta minuti in BCD

      L     DB2.DBB   29; // imposta secondi
      ITB   ; 
      T     DB2.DBB   13; // imposta secondi in BCD


NETWORK
TITLE =carica nuovo set data e ora

      U     DB2.DBX   40.1; 
      U     DB2.DBX   40.0; 
      FP    DB2.DBX   40.2; 
      R     DB2.DBX   40.1; // reset memoria di avvenuto caricamento set data e ora

      U     DB2.DBX   40.0; // bit inizio caricamento set data e ora
      UN    DB2.DBX   40.1; // bit memoria di avvenuto caricamento set data e ora
      SPBN  M001; 

      L     DB2.DBB    8; // imposta mese in BCD
      T     LB     0; 
      L     DB2.DBB    9; // imposta giorno in BCD
      T     LB     1; 
      L     DB2.DBB   10; // imposta ora in BCD
      T     LB     2; 
      L     DB2.DBB   11; // imposta minuti in BCD
      T     LB     3; 
      L     DB2.DBB   12; // imposta minuti in BCD
      T     LB     4; 
      L     DB2.DBB   13; // imposta secondi in BCD
      T     LB     5; 


      CALL SFC    0 (
           PDT                      := #SET_DATA_ORA,
           RET_VAL                  := #VALORE_RITORNO);

M001: U     DB2.DBX   40.0; 
      S     DB2.DBX   40.1; 
      R     DB2.DBX   40.0; 

END_FUNCTION

 

 

 

 

Link al commento
Condividi su altri siti

Io volevo seguire questa procedura ma non riesco

https://support.industry.siemens.com/cs/document/24104104/how-do-you-synchronize-the-date-and-time-between-an-operator-panel-and-an-s7-300-s7-400-controller-with-wincc-flexible-?dti=0&lc=en-WW

nel blocco dati db1 che inserisco io

non e' chiaro come devo inserire i dt dati?

 

Link al commento
Condividi su altri siti

In che senso ? Non riesci a scriverla in quel modo ?

Sbagli qualcosa ...

 

Creato e generato il sorgente:

 

DATA_BLOCK DB 1
TITLE =
VERSION : 0.1


  STRUCT     
   DB_VAR : STRUCT     
    DATE_TIME : DATE_AND_TIME ;    
    RESERVE : ARRAY  [0 .. 3 ] OF BYTE ;    
   END_STRUCT ;    
  END_STRUCT ;    
BEGIN
   DB_VAR.DATE_TIME := DT#90-1-1-0:0:0.000; 
   DB_VAR.RESERVE[0] := B#16#0; 
   DB_VAR.RESERVE[1] := B#16#0; 
   DB_VAR.RESERVE[2] := B#16#0; 
   DB_VAR.RESERVE[3] := B#16#0; 
END_DATA_BLOCK
 

 

 

 

Link al commento
Condividi su altri siti

Questo invece cosa scrivo in cdt

selezio questa ob dalla libreria 

devo essere in ob1 ?

non capisco il secondo passaggio della guida questo come lo creo

IMG_1347.PNG

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