Vai al contenuto
PLC Forum


Modulo Di Posizionamento Fm 353 , Programmazione


coquinati

Messaggi consigliati

Nel post 38 affermi che hai cercato (senza riuscirci) di metterti on line con la FM354, il che significa che il pacchetto di parametrizzazione è diverso.

Io ho vissuto un problema simile presso un cliente in Veneto non più tardi di un paio di mesi or sono con una FM354. La CPU era guasta e nel buffer della diagnostica saltuariamente saltava la comunicazione e l'errore appariva nel buffer degli allarmi.

pigroplc

Link al commento
Condividi su altri siti


  • Risposte 118
  • Created
  • Ultima risposta

Top Posters In This Topic

  • coquinati

    67

  • pigroplc

    46

  • walterword

    4

  • step-80

    1

An capito pigroplc proverò controllare meglio , il pacchetto parametrizzazione del fm 354 me l'ho danno compreso al pacchetto del fm 353. Grazie dell'aiuto per ora , sto progettando una pagina su un hmi di diagnostica , presto metterò delle foto

Inviato dall'app. Mobile di PLC Forum da iPhone6,2

Link al commento
Condividi su altri siti

adesso sto provando interrogare i vari bit di stato per verificare errori, sinceramente e la prima volta che provo usarli io ho scritto cosi:

segmento1:fm353

CALL "POS_DIAG"
DB_NO :=1 //db fm353
RET_VAL:=DB2.DBW0 //retval errore
IN_DIAG:=DB2.DBX2.0 //diagnosi in corso
UN BIE //SEGNALAZIONE ERRORE
S "ERRORE PRESENTE FM 353"

segmento2:fm 354

CALL "POS_DIAG"
DB_NO :=6 // db fm 354
RET_VAL:=DB2.DBW4 //attivazione retval
IN_DIAG:=DB2.DBX6.0 //diagnosi in corso
UN BIE //segnalazione errore
S "ERRORE PRESENTE FM 354"
.

tutti e due richiamati nel OB82

praricamente quando è presente un errore lo stato di BIE e a valore 0. l'ho interrogato in maniera esatta ?

grazie mille

Modificato: da coquinati
Link al commento
Condividi su altri siti

      L     #OB82_MDL_ADDR
      L     "AW_DB_Achse_01".MOD_ADR
      ==I                               // is it the same FM addresse ?
      SPBN  END1
      SET   
      S     M    202.0                  // Readout positive edge
      R     M    202.1                  // Error flag reset

      CALL  "POS_DIAG"                  // FC diagnostic readout
       DB_NO  :=3
       RET_VAL:=MW200
       IN_DIAG:=M202.0

      L     MW   200                    // Error value
      L     B#16#0
      ==I   
      R     M    202.1                  // Error flag reset
      SPB   END1
      S     M    202.1                  // Error flag set
END1: NOP   0

Preso da un mio vecchio progetto.

E' interessante notare che del flag poi non me ne facessi assolutamente NULLA. E parliamo di impianti che lavorano da più di 10 anni.

Se vuoi invece avere una informazione importante interroga il flag di errore dell'asse. Quello si che serve.

Come vedi dal codice si poteva migliorare, mi sembra tanto una cosa copiata li da qualche esempio Siemens e mai più rivista.

pigroplc.

Link al commento
Condividi su altri siti

ciao pigroplc , grazie per il post. ma come flag intendi un errore di lavoro del fc?
io che ho 2 fm ho caricato l'indirizzo del modulo nell'accumulatore e poi lo trasferito a #OB82_MDL_ADDR.
quello che ho scritto io per fm 354:

L 272 //indirizzo fm 354
T #OB82_MDL_ADDR

L "IFFM_ICTRL".MOD_ADR
==I
SPBN END1
SET
S DB2.DBX 6.0 //lettura
R DB2.DBX 6.1 //ERROR FC DIAG

CALL "POS_DIAG"
DB_NO :=6 // db fm 354
RET_VAL:=DB2.DBW4 // retval
IN_DIAG:=DB2.DBX6.0 //lettura

L DB2.DBW 4
L B#16#0
==I
R DB2.DBX 6.1 //ERROR FC DIAG
SPB END1
S DB2.DBX 6.1 //ERROR FC DIAG

END1: NOP 0

ma nell'ultima parte se mi trova la retval pari a 0 mi resetta l'errore della fc diag e poi me lo setta? non mi è molto chiara questa parte.

comunque grazie molte

Modificato: da coquinati
Link al commento
Condividi su altri siti

Brutto errore:

NON devi scrivere nel parametro temporaneo della OB82 bensi' leggere e quindi confrontare con l'indirizzo della scheda.

Se l'evento scatenante l'esecuzione della OB ha lo stesso indirizzo puoi quindi ciclare il blocco di diagnostica.

Come l'hai scritto tu è sbagliato.

Procedendo, confronti il codice di errore e se è zero resetta il flag quindi salta, vuol dire che l'esecuzione del blocco è dovuta al rientro della condizione di allarme.

Se invece il codice è diverso da zero NON effettua il salto, mette in default il risultato logico combinatorio a 1, quindi setta il flag di allarme.

semplice no?

pigroplc

Link al commento
Condividi su altri siti

Si hai ragione :) ero andato in confusione , vuol dire che quando ho la retval a 0 mi segnala l'errore settando un merker, ma l'indirizzo se lo ricava automaticamente allora, non lo sapevo questo, grazie molte ., ora sto procedendo un po' alla volta a imparare ad usare questa scheda .. Anche se il problema online non l'ho ancora risolto :(:(... Non ho trovato ancora nessuno che mi presta il cavetto , ogni giorno che passa mi convinco sempre di più che sia quello , ritengo strano anche la risposta che mi ha dato siemens che potrebbe essere il computer ma il pc adapter no.per ultimo tentativo Sarei curioso di provare il step 7 v5.2 magari potrò vedere la luce .....

Inviato dall'app. Mobile di PLC Forum da iPhone6,2

Link al commento
Condividi su altri siti

NON c'entra la versione di Step 7.

Se:

1) riesci a vedere le schede nella configurazione hardware

2) riesci a trasferire la configurazione hardware

3) vedi che cambia dinamicamente la DB di istanza della scheda

4) riesci a muovere l'asse

vuol dire secondo me che non hai problemi con il software e la CPU si college con la scheda!

Queste schede non hanno bisogno di routing abilitato da parte del PLC (a suo tempo Siemens non aveva funzioni di routing sviluppate).

Sembra piuttosto una questione legata a qualche time out nella USB oppure nel convertitore che interrompe la comunicazione. Io ti assicuro che con la CP5512 PCMCIA ci andavo online senza problemi.

pigroplc

Link al commento
Condividi su altri siti

Scusa se rispondo ora ma sono appena tornato dall'Austria , comunque il db del fm comunica ,solo questo riesco vedere l'asse non ho ancora provato inserire qualche funzione di jog , perché i parametri di frequenza non riesco inserirli all'interno del fm quindi non vorrei rovinare il motore o la piccola unità di potenza , la cp 5512 mi sembra di vedere che ha un attacco abbastanza particolare ( mai visto) il mio pc non è dotato di questa interfaccia , è possibile portare l'interfaccia della 5512 a usb? Grazie è ciao !

Inviato dall'app. Mobile di PLC Forum da iPhone6,2

Link al commento
Condividi su altri siti

FUNCTION FC 16 : VOID
TITLE =FM453 Standard MD Uebertragen
//KNOW_HOW_PROTECT
//Schnistelle realisiert mot ANWENDER_DB wie Ausgabestand 2.0 des 
//Projektierungspaket FM453.
//ACHSENNUMMER =Die auf der Innerflaeche WinCC ausgewaehlte Achsennummer 
//einstellen.
//(inkrement min=1 max=abhaenging von der Anlage)
//START_READ_FM =Beginn Maschinendatenauslesung; Ruecksetzen am Ende der 
//Funktion. 
//STEP_1_READ; STEP_2_READ; STEP_3_READ = Merker von Innenfuehrung des Zyklus von 
//Maschinendatenuebertragung einsetzen. Erklaerte Merker sind nicht in aenderen 
//Teilen des Softwares zu verwenden.
//START_WRITE_FM =Beginn Maschinendaten Auslesen; Ruecksetzen am Ende der 
//Funktion. 
//STEP_1_WRITE; STEP_2_WRITE; STEP_3_WRITE; STEP_4_WRITE = Merker von 
//Innenfuehrung des Zyklus von Maschinendatenuebertragung einsetzen. Erklaerte 
//Merker sind nicht in aenderen Teilen des Softwares zu verwenden.
//------------------------------------------
//BETRIEBZUSTAENDE
//------------------------------------------
//
//DB2: DB Schnistelle mit WinCC
//DB3: DB Schnistelle fuer Achse 1 und folgende
//DB151: DB Schnistelle fuer Achse 1 und folgende
//
//Um Verarbeitung zu vereinfachen, sind nicht Range-Pruefungen in der 
//Verarbeitung 
//vorgesehen. Nach Belieben des Programmierers, pruefen die Anwesenheit der 
//bezueglichen DB und Werte des Eingangsparameter ACHSENNUMMER.
//
//Ausgabestand 1.0 23.10.00 RF
AUTHOR : VANHALEN
VERSION : 0.1


VAR_INPUT
  ACHSENNUMMER : WORD ;	//ACHSENNUMMER
END_VAR
VAR_IN_OUT
  START_READ_FM : BOOL ;	//START_READ_FM
  STEP_1_READ : BOOL ;	//STEP_1_READ
  STEP_2_READ : BOOL ;	//STEP_2_READ
  STEP_3_READ : BOOL ;	//STEP_3_READ
  START_WRITE_FM : BOOL ;	//START_WRITE_FM
  STEP_1_WRITE : BOOL ;	//STEP_1_WRITE
  STEP_2_WRITE : BOOL ;	//STEP_2_WRITE
  STEP_3_WRITE : BOOL ;	//STEP_3_WRITE
  STEP_4_WRITE : BOOL ;	//STEP_4_WRITE
END_VAR
VAR_TEMP
  DB_AW : WORD ;	//Anwender Daten Bausteine
  X_Sorgente : ANY ;	//Quelle DB
  Y_Destinatario : ANY ;	//Ziel DB
  RETVAL : INT ;	//RETVAL SFC20
END_VAR
BEGIN
NETWORK
TITLE =FM_LESES DATEN MASCHINE

      L     #ACHSENNUMMER; // Range control
      L     0; 
      ==I   ; 
      BEB   ; 

      L     #ACHSENNUMMER; 
      L     2; 
      +I    ; 
      T     #DB_AW; // Define the DB_AW number
      AUF   DB [#DB_AW]; // Open DB_AW
      U     #START_READ_FM; // Strobe start read
      UN    #START_WRITE_FM; // Strobe start write
      UN    #STEP_1_READ; // Initialization pointer step
      UN    #STEP_2_READ; // Strobe Modify parameters / Data step
      UN    #STEP_3_READ; // DB_WinCC update step / Range control 
      S     #STEP_1_READ; // Initialization pointer step
      SPB   INIT; 
      SPA   CICL; 
INIT: L     1; 
      T     DBB  196; // Type = 1 ---> MD
      T     DBB  199; // =1 ---> Read job parameters
      L     5; 
      T     DBB  197; // INFO1 = 5 ---> From MD5
      T     DBB  198; // INFO2 = 5 ---> Number of MD's consecutive
CICL: U     #STEP_1_READ; // Initialization pointer step
      UN    #STEP_2_READ; // Strobe Modify parameters / Data step
      R     #STEP_1_READ; // Initialization pointer step
      S     #STEP_2_READ; // Strobe Modify parameters / Data step
      S     DBX   39.3; // Strobe Modify parameters / Data

      U     #STEP_2_READ; // Strobe Modify parameters / Data step
      UN    DBX   39.3; 
      U(    ; 
      L     DBB  197; // IF data number is equal of
      L     DBB  447; // the read request THAN the handshake
      ==I   ; // is complited
      )     ; 
      R     #STEP_2_READ; // Strobe Modify parameters / Data step
      S     #STEP_3_READ; // DB_WinCC update step / Range control
      SPB   ANY; 
      SPA   CIC1; 
//***********************
ANY:  LAR1  P##X_Sorgente; // Parameter assignment ANY
//***********************
      L     W#16#1002; // ID code & type
      T     LW [AR1,P#0.0]; 
      L     20; // Nr. bytes
      T     LW [AR1,P#2.0]; 
      L     DBNO; // Nr. DB source
      T     LW [AR1,P#4.0]; 
      L     450; // From DW number
      SLD   3; 
      OD    DW#16#84000000; 
      T     LD [AR1,P#6.0]; 

//***************************
      LAR1  P##Y_Destinatario; // Parameter assignment ANY
//***************************
      L     W#16#1002; // ID code & type
      T     LW [AR1,P#0.0]; 
      L     20; // Nr. bytes
      T     LW [AR1,P#2.0]; 
      L     2; // Nr. DB destination = DB 2
      T     LW [AR1,P#4.0]; 
      L     DBB  447; // From DW number
      L     4; 
      *I    ; 
      L     20; 
      -I    ; 
      SLD   3; 
      OD    DW#16#84000000; 
      T     LD [AR1,P#6.0]; 
      CALL SFC   20 (// SFC20 DATA_BLOCK_MOVE
           SRCBLK                   := #X_Sorgente,
           RET_VAL                  := #RETVAL,
           DSTBLK                   := #Y_Destinatario);

      L     DBB  197; 
      L     5; 
      +I    ; 
      T     DBB  197; 
      L     70; 
      >=I   ; 
      R     #STEP_3_READ; // DB_WinCC update step / Range control
      R     #START_READ_FM; // Strobe start read
      SPB   SPEE; // IF NOT ENDED THAN LOOP BACK
      R     #STEP_3_READ; // DB_WinCC update step / Range control
      S     #STEP_1_READ; // Initialization pointer step
      SPA   CIC1; 
SPEE: NOP   0; // SPEED SET POINT UPGRADE 
//***********************
      LAR1  P##X_Sorgente; // Parameter assignment ANY
//***********************
      L     W#16#1002; // ID code & type
      T     LW [AR1,P#0.0]; 
      L     8; // Nr. bytes
      T     LW [AR1,P#2.0]; 
      L     DBNO; // Nr. DB source
      T     LW [AR1,P#4.0]; 
      L     160; // From DW number
      SLD   3; 
      OD    DW#16#84000000; 
      T     LD [AR1,P#6.0]; 

//***************************
      LAR1  P##Y_Destinatario; // Parameter assignment ANY
//***************************
      L     W#16#1002; // ID code & type
      T     LW [AR1,P#0.0]; 
      L     8; // Nr. bytes
      T     LW [AR1,P#2.0]; 
      L     2; // Nr. DB destination = DB 2
      T     LW [AR1,P#4.0]; 
      L     268; // From DW number
      SLD   3; 
      OD    DW#16#84000000; 
      T     LD [AR1,P#6.0]; 
      CALL SFC   20 (// SFC20 DATA_BLOCK_MOVE
           SRCBLK                   := #X_Sorgente,
           RET_VAL                  := #RETVAL,
           DSTBLK                   := #Y_Destinatario);
      BEA   ; 
CIC1: UN    #START_READ_FM; // Strobe start read
      R     #STEP_1_READ; // Initialization pointer step
      R     #STEP_2_READ; // Strobe Modify parameters / Data step
      R     #STEP_3_READ; // DB_WinCC update step / Range control

NETWORK
TITLE =SCHREIBEN DATEN MASCHINE

      UN    #START_READ_FM; // Strobe start read
      U     #START_WRITE_FM; // Strobe start write
      UN    #STEP_1_WRITE; // Initialization pointer step
      UN    #STEP_2_WRITE; // Strobe Modify parameters / Data step
      UN    #STEP_3_WRITE; // DB_WinCC update step / Range control 
      UN    #STEP_4_WRITE; // MD Activation step
      S     #STEP_1_WRITE; // Initialization pointer step
      SPB   INIW; 
      SPA   CICW; 
INIW: L     1; 
      T     DBB  196; // Type = 1 ---> MD
      L     4; 
      T     DBB  199; // =4 ---> Write & Save job parameters
      L     5; 
      T     DBB  197; // INFO1 = 5 ---> From MD5
      T     DBB  198; // INFO2 = 5 ---> Number of MD's consecutive
//***********************
LOOP: LAR1  P##X_Sorgente; // Parameter assignment ANY
//***********************
      L     W#16#1002; // ID code & type
      T     LW [AR1,P#0.0]; 
      L     20; // Nr. bytes
      T     LW [AR1,P#2.0]; 
      L     2; // Nr. DB destination = DB 2
      T     LW [AR1,P#4.0]; 
      L     DBB  197; // From DW number
      L     4; 
      *I    ; 
      L     20; 
      -I    ; 
      SLD   3; 
      OD    DW#16#84000000; 
      T     LD [AR1,P#6.0]; 

//***************************
      LAR1  P##Y_Destinatario; // Parameter assignment ANY
//***************************
      L     W#16#1002; // ID code & type
      T     LW [AR1,P#0.0]; 
      L     20; // Nr. bytes
      T     LW [AR1,P#2.0]; 
      L     DBNO; // Nr. DB source
      T     LW [AR1,P#4.0]; 
      L     200; // From DW number
      SLD   3; 
      OD    DW#16#84000000; 
      T     LD [AR1,P#6.0]; 

      CALL SFC   20 (// SFC20 DATA_BLOCK_MOVE
           SRCBLK                   := #X_Sorgente,
           RET_VAL                  := #RETVAL,
           DSTBLK                   := #Y_Destinatario);

CICW: U     #STEP_1_WRITE; // Initialization pointer step
      UN    #STEP_2_WRITE; // Strobe Modify parameters / Data step
      R     #STEP_1_WRITE; // Initialization pointer step
      S     #STEP_2_WRITE; // Strobe Modify parameters / Data step
      S     DBX   39.3; // Strobe Modify parameters / Data

      U     #STEP_2_WRITE; // Strobe Modify parameters / Data step
      UN    DBX   39.3; // And strobe negative edge = JOB ENDED
      R     #STEP_2_WRITE; // Strobe Modify parameters / Data step
      S     #STEP_3_WRITE; // Pointer increase step
      SPB   INCR; 
      SPA   CIW1; 
INCR: L     DBB  197; 
      L     5; 
      +I    ; 
      T     DBB  197; 
      L     70; 
      >=I   ; 
      R     #STEP_3_WRITE; // Pointer increase step
      S     #STEP_4_WRITE; // MD Activation step
      S     DBX   37.0; // MD Activation strobe
      SPB   CIW1; // IF NOT ENDED THAN LOOP BACK
      R     #STEP_3_WRITE; // Pointer increase step
      S     #STEP_1_WRITE; // Initialization pointer step
      SPB   LOOP; 
CIW1: U     #STEP_4_WRITE; // MD Activation step
      UN    DBX   37.0; // MD Activation strobe negative edge
      R     #STEP_4_WRITE; // MD Activation step
      R     #START_WRITE_FM; // Strobe start write
      SPB   ANYW; 
      SPB   CIW2; 
//***********************
ANYW: LAR1  P##X_Sorgente; // Parameter assignment ANY
//***********************

      L     W#16#1002; // ID code & type
      T     LW [AR1,P#0.0]; 
      L     260; // Nr. bytes
      T     LW [AR1,P#2.0]; 
      L     2; // Nr. DB source = DB 2
      T     LW [AR1,P#4.0]; 
      L     0; // From DW number
      SLD   3; 
      OD    DW#16#84000000; 
      T     LD [AR1,P#6.0]; 

//***************************
      LAR1  P##Y_Destinatario; // Parameter assignment ANY
//***************************
      L     W#16#1002; // ID code & type
      T     LW [AR1,P#0.0]; 
      L     260; // Nr. bytes
      T     LW [AR1,P#2.0]; 
      L     #ACHSENNUMMER; // axis number 1 to 3 -> DB151 to DB153
      L     150; // Nr. DB destination DB 151 for axis 1
      +I    ; // Nr. DB destination DB 152 for axis 2
      T     LW [AR1,P#4.0]; // Nr. DB destination DB 153 for axis 3
      L     0; // From DW number
      SLD   3; 
      OD    DW#16#84000000; 
      T     LD [AR1,P#6.0]; 
      CALL SFC   20 (// SFC20 DATA_BLOCK_MOVE
           SRCBLK                   := #X_Sorgente,
           RET_VAL                  := #RETVAL,
           DSTBLK                   := #Y_Destinatario);
// Speed set point value store in DB_MD .......................
//***********************
      LAR1  P##X_Sorgente; // Parameter assignment ANY
//***********************
      L     W#16#1002; // ID code & type
      T     LW [AR1,P#0.0]; 
      L     8; // Nr. bytes
      T     LW [AR1,P#2.0]; 
      L     2; // Nr. DB source = DB 2
      T     LW [AR1,P#4.0]; 
      L     268; // From DW number
      SLD   3; 
      OD    DW#16#84000000; 
      T     LD [AR1,P#6.0]; 

//***************************
      LAR1  P##Y_Destinatario; // Parameter assignment ANY
//***************************
      L     W#16#1002; // ID code & type
      T     LW [AR1,P#0.0]; 
      L     8; // Nr. bytes
      T     LW [AR1,P#2.0]; 
      L     #ACHSENNUMMER; // axis number 1 to 3 -> DB151 to DB153
      L     150; // Nr. DB destination DB 151 for axis 1
      +I    ; // Nr. DB destination DB 152 for axis 2
      T     LW [AR1,P#4.0]; // Nr. DB destination DB 153 for axis 3
      L     268; // From DW number
      SLD   3; 
      OD    DW#16#84000000; 
      T     LD [AR1,P#6.0]; 
      CALL SFC   20 (// SFC20 DATA_BLOCK_MOVE
           SRCBLK                   := #X_Sorgente,
           RET_VAL                  := #RETVAL,
           DSTBLK                   := #Y_Destinatario);

// Speed set point value store in DB_AW .......................
//***********************
      LAR1  P##X_Sorgente; // Parameter assignment ANY
//***********************
      L     W#16#1002; // ID code & type
      T     LW [AR1,P#0.0]; 
      L     8; // Nr. bytes
      T     LW [AR1,P#2.0]; 
      L     2; // Nr. DB source = DB 2
      T     LW [AR1,P#4.0]; 
      L     268; // From DW number
      SLD   3; 
      OD    DW#16#84000000; 
      T     LD [AR1,P#6.0]; 

//***************************
      LAR1  P##Y_Destinatario; // Parameter assignment ANY
//***************************
      L     W#16#1002; // ID code & type
      T     LW [AR1,P#0.0]; 
      L     8; // Nr. bytes
      T     LW [AR1,P#2.0]; 
      L     DBNO; // axis number 1 to 3 -> DB3 to DB5
      T     LW [AR1,P#4.0]; // Nr. DB destination DB 5 for axis 3
      L     160; // From DW number
      SLD   3; 
      OD    DW#16#84000000; 
      T     LD [AR1,P#6.0]; 
      CALL SFC   20 (// SFC20 DATA_BLOCK_MOVE
           SRCBLK                   := #X_Sorgente,
           RET_VAL                  := #RETVAL,
           DSTBLK                   := #Y_Destinatario);
      S     DBX   38.0; // Speed level 1 & 2 strobe

CIW2: UN    #START_WRITE_FM; // Strobe start write
      R     #STEP_1_WRITE; // Initialization pointer step
      R     #STEP_2_WRITE; // Strobe Modify parameters / Data step
      R     #STEP_3_WRITE; // Pointer increase step
      R     #STEP_4_WRITE; // MD Activation step

END_FUNCTION


Eh no!

purtroppo ho già affrontato questo problema all'atto di sostituire il vecchio PC. Esistono dei convertitori USB-PCMCIA in rete ma quando chiedi eventuali compatibilità con il componente Siemens ti rimbalzano scrivendo che il componente è incompatibile quindi se vuoi comprarlo fai pure ma se non funziona sono affari tuoi.

Quanto ai parametric di frequenza non penso siano un problema, nel senso che io non ho mai danneggiato azionamenti o motori, nella peggiore delle ipotesi non si muovono perchè la accelerazione è superiore a quanto sopportato dall'accoppiamento motore-meccanica. Tu hai un motore collegato a nulla....

Quanto alla modifica dei dati macchina potresti dilettarti ad usare una applicazione datata ma ancora funzionante .... all epoca scrivevo in Tedesco, adesso non ho tempo di tradurtelo. Cerca di capirlo.

Praticamente veniva usato per leggere e scrivere I dati macchina da una pagina video wincc senza l'utilizzo del PG. Questo era la manna per quelli che dovevano fare la messa in servizio.....

pigroplc

Link al commento
Condividi su altri siti

FUNCTION FC 18 : VOID
TITLE =MAIN BLOCK FM_453 Release 2.1
//KNOW_HOW_PROTECT
//Interfaccia realizzata con ANWENDER_DB come da release 2.0 del pacchetto di
//progettazione FM453 release 23.11.00 RF
//
//Aggiunta la gestione OVERRIDE fisso in manuale 18.04.02 RF
AUTHOR : VANHALEN
VERSION : 0.1


VAR_INPUT
  MANUALE : BOOL ;	//Selettore manuale
  AUTOMATICO : BOOL ;	//Selettore automatico
  SINCRONIZZAZIONE : BOOL ;	//Selettore sincronizzazione
  START : BOOL ;	//Start asse
  STOP_NOTAUS : BOOL ;	//Stop axis
  STOP_HYDRAULIKAGGREGAT : BOOL ;	//Stop Hydraulic unit
  RESET : BOOL ;	//Reset errori asse
  JOG_AVANTI : BOOL ;	//Comando manuale +
  JOG_INDIETRO : BOOL ;	//Comando manuale -
  ENABLE_ON : BOOL ;	//Abilitazione Simodrive
  SYNCRO_POS : BOOL ;	//Comando sincronizzazione 
  OK_DRIVER : BOOL ;	//Simodrive OK
  ALL_STATION : BOOL ;	//Stazione in allarme
  EXTRA_POS : BOOL ;	//Extracorsa +
  EXTRA_NEG : BOOL ;	//Extracorsa -
  OVERRIDE : BYTE ;	//Override
  AW_DB : BLOCK_DB ;	//Numero della DB_WF
END_VAR
VAR_IN_OUT
  PEH : BOOL ;	//Asse in posizione
  AXIS_STOPPED : BOOL ;	//Asse fermo
  FEHL : BOOL ;	//Asse in errore
  SYNC : BOOL ;	//Asse sincronizzato
  POSITION_REACHED : BOOL ;	//Posizione raggiunta con funzione M
END_VAR
VAR_TEMP
  Kanalnummer : WORD ;	
  Anwender_DB : WORD ;	
  fehlercode : WORD ;	
END_VAR
BEGIN
NETWORK
TITLE =SWITCHING AXIS MODE
//Switch axis mode, during switching cycle, axis is forced to stop.
      AUF   #AW_DB; 
      L     DBB   24; // Active operating mode
      L     1; 
      <>I   ; 
      U     #MANUALE; // manual selection
      UN    #AUTOMATICO; 
      UN    #SINCRONIZZAZIONE; 
      UN    DBX   25.2; // Axis negative travel
      UN    DBX   25.3; // Axis positive travel
      SPB   HAND; 
//
      L     DBB   24; // Active operating mode
      L     3; 
      <>I   ; 
      UN    #MANUALE; // and syncro selection
      UN    #AUTOMATICO; 
      U     #SINCRONIZZAZIONE; 
      UN    DBX   25.2; // Axis negative travel
      UN    DBX   25.3; // Axis positive travel
      SPB   REFE; 
//
      L     DBB   24; // Active operating mode
      L     6; 
      <>I   ; 
      UN    #MANUALE; // and auto selection
      U     #AUTOMATICO; 
      UN    #SINCRONIZZAZIONE; 
      U     DBX   25.0; //  already syncronized
      UN    DBX   25.2; // Axis negative travel
      UN    DBX   25.3; // Axis positive travel
      SPB   AUT; 
// Cycling with the right switching

      L     DBB   24; // Active operating mode
      L     1; 
      ==I   ; 
      U     #MANUALE; // manual selection
      UN    #AUTOMATICO; 
      UN    #SINCRONIZZAZIONE; 
      SPB   RUN; 
//
      L     DBB   24; // Active operating mode
      L     3; 
      ==I   ; 
      UN    #MANUALE; // and syncro selection
      UN    #AUTOMATICO; 
      U     #SINCRONIZZAZIONE; 
      SPB   RUN; 
//
      L     DBB   24; // Active operating mode
      L     6; 
      ==I   ; 
      UN    #MANUALE; // and auto selection
      U     #AUTOMATICO; 
      UN    #SINCRONIZZAZIONE; 
      SPB   RUN; 
      O     DBX   25.2; // Axis negative travel
      O     DBX   25.3; // Axis positive travel
      =     DBX   15.1; // Axis stop
      SET   ; 
      R     DBX   15.3; // Positive direction
      R     DBX   15.2; // Negative direction
// GOTO end if there isn't the right feedback from FM module
      SPA   COMM; // stop & waiting for axis right mode
HAND: L     1; 
      T     DBB   16; // Operating mode
      T     DBB   17; // Operating mode parameters
      SPA   COMM; // stop & waiting for axis right mode
REFE: L     3; 
      T     DBB   16; // Operating mode
      SPA   COMM; // stop & waiting for axis right mode
AUT:  L     6; 
      T     DBB   16; // Operating mode
      SPA   COMM; // stop & waiting for axis right mode
NETWORK
TITLE =INTERFACE ALWAIS RUNNING 
//This interface is always running not depending on WF mode.
//In this side take place override and program number and so on
RUN:  L     #OVERRIDE; 
      U     #AUTOMATICO; 
      SPB   TDBB; 
      L     100; 
TDBB: T     DBB   18; // override 0 - 100 %
      U     #OK_DRIVER; 
      =     DBX   15.7; // drive enable 
      U     #ENABLE_ON; 
      =     DBX   34.0; // Controller enable 
//
      L     DBW   42; 
      L     0; 
      <>I   ; 
      SPB   NEWV; 
      L     2#11111111111000; 
      T     DBW   42; 
      S     DBX   38.0; // and set speed strobe
NEWV: NOP   0; 
//
      U     #START; 
      UN    DBX   38.3; // START MDI BLOCK TRANSFER
      UN    DBX   48.3; // FEEDBACK MDI BLOCK TRANSFER
      S     DBX   38.3; // START MDI BLOCK TRANSFER
      U     DBX   48.3; // FEEDBACK MDI BLOCK TRANSFER
      UN    #START; 
      R     DBX   48.3; // FEEDBACK MDI BLOCK TRANSFER
//

NETWORK
TITLE =MANUAL MODE SELECTION
//If manual is switched on, then this side is working ....
      U     #MANUALE; 
      SPB   MANU; 
      SPA   SINC; 
MANU: O     DBX   25.3; // Positive travel
      O     DBX   23.0; // enable to start
      U     DBX   22.7; // FM parameterized
      U     #STOP_NOTAUS; // Not stop axis
      U     #JOG_AVANTI; 
      UN    #JOG_INDIETRO; 
      U     #EXTRA_POS; // not extra jog tripped
      U     #OK_DRIVER; // Simodrive ready to move
      U     DBX   15.7; // Controller enable 
      UN    DBX   22.3; // Operator / Traversing error
      UN    DBX   22.4; // Data error
      U     #STOP_HYDRAULIKAGGREGAT; // Hydraulik unit ON
      U     DBX   48.0; // IF checkback speed level ON
      UN    DBX   38.0; // and set speed strobe OFF
      =     DBX   15.3; // Positive direction
//
      O     DBX   25.2; // Negative travel
      O     DBX   23.0; // enable to start
      U     DBX   22.7; // FM parameterized
      U     #STOP_NOTAUS; // Not stop axis
      U     #JOG_INDIETRO; 
      UN    #JOG_AVANTI; 
      U     #EXTRA_NEG; // not extra jog tripped
      U     #OK_DRIVER; // Simodrive ready to move
      U     DBX   15.7; // Controller enable 
      UN    DBX   22.3; // Operator / Traversing error
      UN    DBX   22.4; // Data error
      U     #STOP_HYDRAULIKAGGREGAT; // Hydraulik unit ON
      U     DBX   48.0; // IF checkback speed level ON
      UN    DBX   38.0; // and set speed strobe OFF
      =     DBX   15.2; // Negative direction
//
      U     DBX   15.1; // Axis stop
      R     DBX   15.1; // Axis stop
//
      UN    DBX   48.0; // IF not checkback speed level
      UN    DBX   38.6; // Bezungspunkt setzen  
      UN    DBX   38.7; 
      S     DBX   38.0; // THEN set speed strobe
      SPA   COMM; // GO TO WF UPDATE
NETWORK
TITLE =HOMING MODE SELECTION
//If homing is switched on, then this side is working ....
SINC: U     #SINCRONIZZAZIONE; 
      SPB   SYNC; 
      SPA   AUTO; 
SYNC: O     DBX   23.0; // enable to start
      O     DBX   15.0; // syncronization
      U     #SYNCRO_POS; // start sincro      
      UN    DBX   25.0; // already syncronized
      UN    DBX   22.3; // Operator / Traversing error
      UN    DBX   22.4; // Data error
      U     DBX   22.7; // FM parameterized
      UN    DBX   37.5; // Not reset asse in corso
      U     #STOP_NOTAUS; // Not stop axis
      UN    #ALL_STATION; // the station is free of alarms
      U     #OK_DRIVER; // Simodrive ready to move
      U     DBX   15.7; // Controller enable 
      U     #EXTRA_POS; 
      U     #EXTRA_NEG; 
      U     #STOP_HYDRAULIKAGGREGAT; // Hydraulik unit ON
      =     DBX   15.0; //  syncronization
// Stop axis
      ON    #EXTRA_POS; 
      ON    #EXTRA_NEG; 
      ON    #STOP_NOTAUS; // Not stop axis
      ON    #STOP_HYDRAULIKAGGREGAT; // Hydraulik unit ON
      =     DBX   15.1; // Axis stop
      SPA   COMM; // GO TO WF UPDATE
NETWORK
TITLE =AUTOMATIC MODE SELECTION
//If automatic is switched on, then this side is working ....
//MDI function mode is working
// MDI BLOCK SYNTAX COMPOSE
AUTO: L     2#10001; // Position und G funktion
      T     DBB  178; 
      L     2#11; // M funktion und geschwindigkeit
      T     DBB  179; 
      L     91; // G91 funktion
      T     DBB  180; 
      L     0; // Keine G2 gruppe
      T     DBB  181; 
      L     1; // M funktion value
      T     DBB  192; 
      L     0; // Keine M2 und M3 funktion
      T     DBB  193; 
      T     DBB  194; 

      U     #AUTOMATICO; 
      SPB   AUBE; 
      SPA   COMM; 
AUBE: O     DBX   23.0; // enable to start
      O     DBX   15.0; // enable START
      U     #START; 
      UN    #POSITION_REACHED; 
      UN    #ALL_STATION; // the station is free of alarms
      U     #OK_DRIVER; // Simodrive ready to move
      U     DBX   15.7; // Controller enable 
      U     #EXTRA_POS; 
      U     #EXTRA_NEG; 
      U     #STOP_NOTAUS; // Not stop axis
      UN    DBX   38.3; // START MDI BLOCK TRANSFER
      U     DBX   22.7; // FM parameterized
      U     DBX   25.0; // syncronized
      UN    DBX   22.3; // Operator / Traversing error
      UN    DBX   22.4; // Data error
      UN    DBX   27.4; // NOT strobe M function
      UN    DBX   15.4; // not ACK M function
      U     #STOP_HYDRAULIKAGGREGAT; // Hydraulik unit ON
      =     DBX   15.0; // enable START
// Stop axis
      ON    #EXTRA_POS; 
      ON    #EXTRA_NEG; 
      ON    #START; 
      ON    #STOP_HYDRAULIKAGGREGAT; // Hydraulik unit ON
      =     DBX   15.1; // Axis stop

// Axis reached position
      UN    #POSITION_REACHED; 
      U     DBX   27.4; // M function ON
      S     DBX   15.4; // set ACK for M function
      S     #POSITION_REACHED; // set for application software
//
      U     DBX   15.4; // reset ACK when WF reset his 
      UN    DBX   27.4; // strobe for M function
      R     DBX   15.4; 
NETWORK
TITLE =Kanalpruefung mit geberfehler

// Kanalnummer
COMM: L     DBW    2; 
      T     #Kanalnummer; 
      L     1; 
      ==I   ; 
      SPB   EIN; 
      L     #Kanalnummer; 
      L     2; 
      ==I   ; 
      SPB   ZWEI; 
      L     #Kanalnummer; 
      L     3; 
      ==I   ; 
      SPB   TREI; 
      SPA   salt; 
EIN:  L     DBB   78; 
      T     #fehlercode; 
      SPA   salt; 
ZWEI: L     DBNO; 
      L     1; 
      -I    ; 
      T     #Anwender_DB; 
      AUF   DB [#Anwender_DB]; 
      L     DBB   80; 
      T     #fehlercode; 
      SPA   salt; 
TREI: L     DBNO; 
      L     2; 
      -I    ; 
      T     #Anwender_DB; 
      AUF   DB [#Anwender_DB]; 
      L     DBB   82; 
      T     #fehlercode; 
salt: NOP   0; 


NETWORK
TITLE =UPDATE FM COMMAND

      AUF   #AW_DB; 
      U     DBX   25.7; // position reached
      =     #PEH; 
//
      UN    DBX   25.2; // +
      UN    DBX   25.3; // -
      O     DBX   23.0; // axis stopped
      =     #AXIS_STOPPED; 
//
      L     DBW   86; // Error code active for this axis
      L     DBW   90; 
      +I    ; 
      L     DBW   94; 
      +I    ; 
      L     #fehlercode; 
      +I    ; 
      L     0; 
      <>I   ; 
      O     DBX   22.3; // Operator / Traversing error
      O     DBX   22.4; // Data error
      =     #FEHL; // Fehlermeldung 
//
      U     DBX   25.0; // axis syncronized
      =     #SYNC; // axis syncronized
//
      U     #RESET; 
      U     DBX   22.3; // Operator / Traversing error
      UN    DBX   22.4; // Data error
      =     DBX   14.3; // Alarm Acknoledge

      UN    #STOP_HYDRAULIKAGGREGAT; // Hydraulik unit OFF
      U     #SYNC; // axis syncronized
      O     ; 
      U     #RESET; // or hard reset required !!!
      UN    DBX   22.3; // Operator / Traversing error
      U(    ; 
      L     #fehlercode; 
      L     0; 
      <>I   ; 
      O     ; 
      U     DBX   22.4; // Data error
      )     ; 
      S     DBX   37.5; // Channel initialization (hard reset) 
NETWORK
TITLE =Error reset

      L     DBW   86; // Error code active for this axis
      L     DBW   90; 
      +I    ; 
      L     DBW   94; 
      +I    ; 
      L     #fehlercode; 
      +I    ; 
      L     0; 
      <>I   ; 
      UN    DBX   22.3; // Operator / Traversing error
      UN    DBX   22.4; // Data error
      UN    #RESET; 
      UN    DBX   37.5; // Channel initialization (hard reset) 
      SPB   RUEC; 
      SPA   ENDE; 
RUEC: L     0; 
      T     DBW   86; // Error code active for this axis
      T     DBW   90; 
      T     DBW   94; 
ENDE: NOP   0; 
END_FUNCTION

FUNCTION FC 19 : VOID
TITLE =Main block for FM353 Release 2.0 
AUTHOR : VANHALEN
VERSION : 0.1


VAR_TEMP
  OVERRIDE : BYTE ;	
  JOG_PLUS : BOOL ;	
  JOG_MINUS : BOOL ;	
  MANUAL : BOOL ;	
  AUTOMATIC : BOOL ;	
  REFERENZPUNKTFAHRT : BOOL ;	
  UEBERLAUFSCHALTER : BOOL ;	
  UEBERLAUFSCH_1 : BOOL ;	
  UEBERLAUFSCH_2 : BOOL ;	
  pippo : BOOL ;	
  reset : BOOL ;	
  return : INT ;	
  asse_1 : WORD ;	
END_VAR
BEGIN
NETWORK
TITLE =Asse HSM1 alimentatore lamiera stazione 01


      CALL FC     1 (
           DB_NO                    := 3,// DBnummer
           RET_VAL                  := #return);// Return Value

      L     DB100.DBD    4; 
      T     #OVERRIDE; 

      UN    M    130.0; // Automatico
      =     #MANUAL; 
      U     M    130.0; // Automatico
      =     #AUTOMATIC; 

      CALL FC    18 (
           MANUALE                  := #MANUAL,
           AUTOMATICO               := #AUTOMATIC,
           SINCRONIZZAZIONE         := FALSE,
           START                    := M    153.0,
           STOP_NOTAUS              := TRUE,//M150.5
           STOP_HYDRAULIKAGGREGAT   := TRUE,
           RESET                    := M    150.3,
           JOG_AVANTI               := E     35.4,
           JOG_INDIETRO             := E     35.5,
           ENABLE_ON                := TRUE,
           SYNCRO_POS               := M    153.7,
           OK_DRIVER                := TRUE,
           ALL_STATION              := DB50.DBX   50.0,
           EXTRA_POS                := TRUE,//M150.6
           EXTRA_NEG                := TRUE,//M150.6
           OVERRIDE                 := #OVERRIDE,
           AW_DB                    := DB     3,
           PEH                      := M    153.2,
           AXIS_STOPPED             := M    153.3,
           FEHL                     := M    153.4,
           SYNC                     := M    153.5,
           POSITION_REACHED         := M    153.6);

NETWORK
TITLE =FM_353 Trasferimento dati macchina con MP370
// 
      L     1; 
      T     #asse_1; 
      CALL FC    16 (
           ACHSENNUMMER             := #asse_1,
           START_READ_FM            := M     93.1,
           STEP_1_READ              := M    251.1,
           STEP_2_READ              := M    251.2,
           STEP_3_READ              := M    251.3,
           START_WRITE_FM           := M     93.0,
           STEP_1_WRITE             := M    252.1,
           STEP_2_WRITE             := M    252.2,
           STEP_3_WRITE             := M    252.3,
           STEP_4_WRITE             := M    252.4);

      U     M     93.0; 
      CLR   ; 
      L     S5T#10S; 
      SE    T    172; 
      U     T    172; 
      S     M     93.2; 
      R     M     93.0; 
      U     M     93.1; 
      CLR   ; 
      L     S5T#10S; 
      SE    T    173; 
      U     T    173; 
      S     M     93.3; 
      R     M     93.1; 
END_FUNCTION


All'epoca poi mettevo pure le protezioni ai blocchi ... poi ho scoperto che ci voleva moooolto poco a rimuoverle! ah ah ah ah

senti, ti allego pure la gestione di interfaccia e il suo richiamo.

Il blocco era parametrizzato per essere richiamato n volte tante schede c'erano.

c'e' un riferimento pure alla centralina idraulica, o cavi I controlli oppure metti true.

pigroplc

Link al commento
Condividi su altri siti

Auture : van halen?:)hai automatizzato la chitarra di eddie?:).

A parte gli scherzi , grazie mille dell'aiuto , stasera o oggi pomeriggio mi metto con calma e provo capire il tutto. Grazie davvero è scusa il disturbo... Riguardo a siemens e alla cp5512 immagino che abbiano risposto così , però sarebbe da provare..forse dicono così solo per motivi di business a vendere i pc adapter usb.

Link al commento
Condividi su altri siti

van halen: era uno dei miei infiniti nickname (avevo anche molti più capelli di adesso) . :smile:

qui trovi il mio interessamento a suo tempo in giro in rete:

http://plcforum.uz.ua/viewtopic.php?f=17&t=14131&hilit=pigroplc

di fatto uno dei limiti è la possibilità di utilizzare il dispositivo in una VM, e visto che sono a quota 11 nel mio PC puoi ben capire quando sia importante.

pigroplc

Link al commento
Condividi su altri siti

Grazie mille pigroplc, il segno che non ho più risposto non è dovuto a un mancato interessamento a il tuo programma , e che sto impiegando molto tempo a imparare i dati o parametri di tipo ANY , mai usati da me , ti ringrazio molto anche per la discussione della cp, ieri ho avuto occasione di parlare con un programmatore plc siemens che mi ha sconsigliato vivamente l'uso della cp5512 PCMIA perché inoltre mi ha riferito che sulle VM non funziona nemmeno, piuttosto mi ha consigliato le cp USB , mi ha riferito che attualmente us un pc adapter che solitamente si usa per la tele assistenza ,quello che si attacca sul modem vPn ,( non ricordo il codice n'è il nome esatto ,ma è quello con i led di interfaccia incorporati sul adattatore seriale che attacco alla cpu). Per ora sto valutando molti aspetti.. Tutto per risolvere un problema più unico che raro . Grazie appena ho novità scrivo,

Link al commento
Condividi su altri siti

da una attenta lettura della discussione linkata nel mio ultimo intervento si evince quello che ti sei fatto dire ieri.

Il codice che ti ho postato serve a NON aver bisogno di collegarsi con la scheda stessa, bensì trasferire i parametri solamente da una DB nel PLC.

Coloro che utilizzano i miei progetti NON hanno bisogno del PG per cambiare i parametri perché li cambiano da video SEMPLICEMENTE.

Ritengo quindi che in fondo tu possa pure fare a meno del collegamento diretto alla scheda, se ti prefiggi di modificare i parametri utilizzando il codice.

Ultimo aspetto rilevante: mi sembra di capire che l'apprendimento dell'utilizzo della scheda è totalmente propedeutico e non è quindi finalizzato a progetti reali. A tal scopo ritengo FONDAMENTALE che tu possa entrare nel dettaglio a capire il funzionamento della DB di interfaccia.

Quanto succede purtroppo nella pratica di noi sviluppatori è di non avere tempo o monte ore per poter sviluppare tutte le funzionalità di un prodotto, nel tuo caso invece è meglio entrare a fondo per questioni di esperienza personale, non vincolata a conteggi di profitto ecc.

pigroplc

Link al commento
Condividi su altri siti

Si infatti subito ero preso da una voglia pazza di veder girare il motore , poi come hai detto te mi sono calmato e sto cercando di analizzare tutto nel dettaglio :)di applicare questa scheda su un progetto resta per ora un sogno ,in futuro quando avrò la piena dimestichezza e se avrò il lavoro.. Riguardo alla tua idea di programma la ritengo molto comodo riuscire a modificare tutti i parametri dal HMI , io ho a disposizione un KTP 1000 .quindi sono a cavallo per riuscire a far un buon lavoro..certo che richiede un ottima conoscenza del linguaggio AWL. Ma meglio così imparo .

Link al commento
Condividi su altri siti

.... veramente mi aspettavo che prendessi spunto dal codice postato per crearti I tuoi blocchi e siccome non si capisce mai tutto, ero in attesa di domande, e da quelle capire anche il tuo livello di preparazione attuale.

pigroplc

Link al commento
Condividi su altri siti

per esempio io non so ancora cosa serve sfc20 block_move...ho visto che nel tuo programma l'hai usato, ho visto anche un largo utilizzo di puntatori e registri AR tutte cose che mi mettono in crisi in questo momento. e che sto cercando di capire ( visto la tua grande esperienza in questo campo credo che sia il massimo come spunto per me ) e voglio capirlo fino infondo,

ma una cosa che non mi è proprio chiara , volendo riesco modificare i parametri di frequenza?. perche leggendo la guida del AW-DB non riesco trovare questi dati all'interno del blocco

Link al commento
Condividi su altri siti

SFC20 trovi le spiegazioni nella guida in linea di step 7, consiglio sempre di fare delle prove per impossessarsi della completa comprensione.

I parametri della frequenza e altri li trovi manipolati nel thread 60 dove ti ho allegato la FC16. Da li capisci che vai a interagire dalla DBB196 per qualche byte.

praticamente tutti I parametri (dati macchina) che fanno parte della parametrizzazione li puoi leggere o scrivere semplicemente compilando quei byte. Consiglio di cercare di capire la dinamica e provare da una tabella di variabili a leggere e scrivere un parametro, quindi provare la FC.

pigroplc

Link al commento
Condividi su altri siti

  • 2 weeks later...

ciao pigroplc la mia conoscenza sui puntatori è leggermente migliorata grazie al forum , cosi ho provato imbattermi nel primo codice che gestisce i parametri del fm tramite wincc.

L #ACHSENNUMMER; // Range control
L 0;
==I ;
BEB ;

L #ACHSENNUMMER;
L 2;
+I ;
T #DB_AW; // Define the DB_AW number
AUF DB [#DB_AW]; // Open DB_AW

non capisco questa parte, praticamente se il numero di asse è 0 finisce la funzione, poi carica semprè il numero di asse e lo somma a 2 , questo non riesco capirlo, forse assegnavi i blocchi dati in maniera particolare?

Link al commento
Condividi su altri siti

praticamente assegnavo la DB di interfaccia (anwender bausteine) in modo automatico:

asse 1 = DB3

asse 2 = DB4 ecc.

la cosa è ininfluente se si tratta di un asse solo, se invece si sviluppa una macchina con 50 assi la cosa è utile.

pigroplc.

Link al commento
Condividi su altri siti

capito davvero interessante, un po alla volta lo sto capendo, devo dire che il metodo di cambiare i parametri da HMI è veramente bello , ma per gestire i parametri dei 50 assi su wincc creavi una pagina unica e poi in base a l'asse scelto cambiavi solo i dati di scrittura?
sono andato avanti nella comprensione del codice sono arrivato a una cosa che non mi spiego (riguardante un parametro) ecco la foto:

eb4zyw.jpg

il byte 198 c'è scritto che indica la quantità , i numero di dati macchina seguenti, non riesco capire a cosa si intende..non sarò limitato a 5 dati macchina massimo?

grazie per ora, e grazie della pazienza.

ciao

Modificato: da coquinati
Link al commento
Condividi su altri siti

L'ultima volta che ci ho messo le mani era ottobre del 2000 quindi ho perlomeno dovuto guardare il codice che avevo scritto:

praticamente in un colpo solo si possono leggere 5 dati macchina in sequenza. Infatti se guardi nel codice al termine della prima lettura (dal dato macchina 5 per 5 dati consecutivi) increment il byte 197 di 5 e rifaccio la stessa operazione fino al termine dei dati macchina (70 nella FM453 se non erro, nella 353 forse si interrompe prima o mette tutti zero)

dai che al termine di questo training hai la fila di quelli che ti assumono..........

pigroplc

Link al commento
Condividi su altri siti

dai che al termine di questo training hai la fila di quelli che ti assumono..........

magari :smile: sarebbe un grande sogno realizzato ^_^

se mi concedi un ultima domanda te ne faccio una,poi prometto che fino che non capisco di testa mia non chiedo più niente.

START_READ_FM : BOOL ; //START_READ_FM

STEP_1_READ : BOOL ; //STEP_1_READ

STEP_2_READ : BOOL ; //STEP_2_READ

STEP_3_READ : BOOL ; //STEP_3_READ

START_WRITE_FM : BOOL ; //START_WRITE_FM

STEP_1_WRITE : BOOL ; //STEP_1_WRITE

STEP_2_WRITE : BOOL ; //STEP_2_WRITE

STEP_3_WRITE : BOOL ; //STEP_3_WRITE

STEP_4_WRITE : BOOL ; //STEP_4_WRITE

questi merker sono delle sicurezze che hai messo te? nel senso che non sono obbligato a metterli per riuscire a modificare i dati

anche perchè non li vedo intromettersi nel blocco dati , grazie e scusa del disturbo

Link al commento
Condividi su altri siti

se mi concedi un ultima domanda te ne faccio una,poi prometto che fino che non capisco di testa mia non chiedo più niente

Non ti preoccupare, chi dispensa consigli in questo forum penso lo faccia per il puro piacere di condividere ciò che si è imparato col tempo (almeno per me è così).

Quello che in genere si detesta sono l'arroganza di chi chiede senza magari dare dei dati, il menefreghismo di chi non restituisce una informazione di esito delle prove ecc.

Ritieniti autorizzato a chiedere quindi, sarà un piacere per me darti le informazioni richieste. Ovviamente le domande devono dimostrare un effettivo interesse e studio, come del resto sembri fare.

Ritorno quindi alla spiegazione e parto da un passo indietro:

la garanzia di una esecuzione sequenziale dei comandi viene fatta in molteplici modi: con un puntatore del tipo istruzione CASE, con dei flag che si settano per resettarsi poi alla fine, con dei flag che si settano in sostituzione l'uno all'altro ecc.

Nel codice in questione avevo bisogno di chiarire univocamente il passo e semplicemente interbloccare altre operazioni (tieni presente che era fatto per moooolti assi e c'erano esigenze particolari).

Infatti devi dichiarare dei flag LIBERI che non vai a sovrascrivere.

In rete trovi poi tanti modi per fare una catena sequenziale, non ultimo è S7-GRAPH, qui si entra nelle preferenze personali che io preferisco evitare.

pigroplc

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