Vai al contenuto
PLC Forum


Modulo Di Posizionamento Fm 353 , Programmazione


coquinati

Messaggi consigliati

Si scusa mi sono spiegato male , ho usato anche una VAT ,sempre sulla tua funzione . :smile:

forse mi sono spiegato male, la VAT che ti consiglio NON ti serve per far partire la mia funzione, cioè il blocco di codice a suo tempo creato.

La VAT ti serve per provare la funzione di lettura e scrittura dei dati macchina INDIPENDENTEMENTE dal mio codice!

ES:

provo la lettura dei primi 5 dati macchina:

DBxx.DBB196

DBxx.DBB197

ecc

ecc

dopo aver definito tutti I byte che ti servono e che per altro trovi sia sul manuale che nel codice, vai a forzare I valori, per ultimo setti lo strobe, quindi VEDI COSA SUCCEDE NELL' AREA DI RICEZIONE!

solamente così ti renderai conto di quello che effettivamente ti serve per comunicare con la scheda.

pigroplc

Link al commento
Condividi su altri siti


  • Risposte 118
  • Created
  • Ultima risposta

Top Posters In This Topic

  • coquinati

    67

  • pigroplc

    46

  • walterword

    4

  • beppo

    1

allora ho fatto questa bellissima VAT,mi preparo i miei dbx43.3 dbb446 dbb447 dbb448 dbb449, vado felicemente ad

impostare per poi forzare i valori di questi ultimi,noto che il job non va , qua mi sono messo ho analizzato

la POS_CTRL è scopro che nella DW66 sono contenuti le Segnalazioni d’errore/Segnali di stato del blocco POS_CTRL, analizzo e vedo il dbx68.3(anche la 68.1) e su true cioè mi da l'impossibilita si leggere

(e scrivere) , provo a resettare con il dbx 69.1 JOBRESET Reset stato/errore , ma noto che sulla VAT il valore del joB di lettura non cambia,

sto sbagliando qualcosa,anzi sto saltando qualche passaggio,anche perchè il codice errore SFC58/59 è a ZERO,

sicuramente manca un enable ,mm ormai il sonno la sta prendendo vinta, rinvio tutto a domani notte

grazie mille del consiglio , ho imparato a ragionare con questa tabella.

Link al commento
Condividi su altri siti

Dal software applicativo VEDI quali bit andare a forzare e dove trovare la risposta. Ora non ho il progetto sotto mano per incrociare le informazioni.

Se davvero hai visualizzato le aree giuste e non funziona non vorrei che necessiti della abilitazione dei dati macchina, ma non credo.

A scanso equivoci fai così:

nel software della FM dovresti trovare una funzione di generazione delle DB dei dati macchina. Una DB nella FM353 per i dati macchina, una per i programmi NC e l'ultima per i correttori utensili, La devi generare in modo da ritrovartela nei dati di sistema.

Quindi trasferisci i dati di sistema (stessa cosa la fa il trasferimento della configurazione hardware). Questa funzione ti permetteva di cambiare la scheda e di fargli prendere la configurazione senza dover riparametrizzare il tutto. Ti garantisco che funziona perché qualche cliente si è sbizzarrito nelle sostituzioni senza ulteriori complicazioni.

pigroplc

Link al commento
Condividi su altri siti

Ho letto di quella funzione , ma sembra essere solo attivabile con la parametrizzazione in online con L'FM , ( non sono sicuro però può darsi che mi sbagli )

Ritornando al SW mio ho dei problemi di base che non mi spiego , richiamo tutti e quanti gli fc correttamente , ma poi bo , vedendo le retval sembra tutto ok ,questo problema l'ho dedotto in maniera molto semplice:

Io carico il piccolo SW siemens , e magicamente la fm inizia rispondere ai miei comandi ,( sparisce pure l'impossibilità di WRT e di RD)

Allora di sicuro è un problema che sta alla base , qualche funzione di base che non funziona correttamente , o un enable principale , ma sincerante non l'ho vedo questo enable sul manuale .

Grazie dell'aiuto :)

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

Link al commento
Condividi su altri siti

forse ho capito , per abilitare servono anche i modi operativi selezionati, ho visto sul manuale che siemens da diverse funzioni per esempio la FC10 JOG . ma non riesco trovarla.

ho visto che funzione di jog si puo anche creare. adesso provo

Link al commento
Condividi su altri siti

Nella FC18 che ti ho postato trovi all'inizio la selezione del modo:

DBB24 è la risposta della scheda

DBB16 e 17 è l'impostazione nel caso del JOG.

E' IL PRIMO SEGMENTO DELLA FC18

pigroplc

Link al commento
Condividi su altri siti

sono riuscito ad abilitare il motore ,CON IL BIT 9.1 , .

per il jog l'ho fatto , però sembra che il motore sia bloccato ,scalda un pochettino anche e si sente il drive che emana dei piccoli striduli.

strano perchè le velocita in frequenza le ho caricate nellla doppia parola dbd168 e dbd172

grazie mille

praticamente Il blocco POS_CTRL conferma l’avviamento dell’unità. Durante questo tempo i parametri

RET_VAL e i segnali Job di lettura/scrittura attivo DBX68.0 e

DBX68.2) sono a TRUE.

la cosa piu strana che c'è scritto che vbisogna ricchiamarlo una volta solo nell'ob1 ma la siemens lo richiama ciclicamente

Modificato: da coquinati
Link al commento
Condividi su altri siti

la cosa piu strana che c'è scritto che vbisogna ricchiamarlo una volta solo nell'ob1 ma la siemens lo richiama ciclicamente

non è strano, si tratta di capirsi: Siemens dice di richiamare il blocco una volta sola (in quanto la scheda ha un solo asse) in OB1; cioè nel richiamo ciclico del programma.

Il fatto che non gira potrebbe essere dovuto ad una errata parametrizzazione dei passi al giro nei dati macchina oppure una accelerazione troppo alta.

pigroplc

Link al commento
Condividi su altri siti

Grazie della risposta :)

Comunque non mi resta che riprendere in mano la questione del trasferimento dati macchina , almeno ora la FC1 va

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

Link al commento
Condividi su altri siti

ciao pigroplc .
sono riuscito a visualizzare i dati , se posso ti chiedo una cosa da programmatore che non mi spiego:

2licsi9.jpg


allora come si può notare io ho dei valori sui miei 20 byte , sotto per riuscire a leggere un valore finale mi sono creato 5 DW che comprendono i miei 20 byte pero leggo dei valori sbagliati, e non mi riesco spiegare il perchè...

grazie mille mi sento in debito, senza lei sarei ancora davanti un pc a perdere tempo

Modificato: da coquinati
Link al commento
Condividi su altri siti

Siemens usa la BIG-ENDIAN , siccome io ho il 3 e 4 indirizzo byte con dei valori corrispettivi a 39 per il 3 byte e 16 per il 4 byte, mi dovrei trovare un valore decimale di 3916 .sempre se il mio ragionamento è giusto

ma poi come funziona con il segno meno non lo so proprio

Modificato: da coquinati
Link al commento
Condividi su altri siti

mi sono reso conto che il discorso della suddivisione in byte è tutto sbagliato, scusate.

per esempio se provo caricare 1000 sulla DW 0 mi carica -24 sul byte 2 e 3 sul byte 1 :blink::blink::blink:

Modificato: da coquinati
Link al commento
Condividi su altri siti

F-U-N-Z-I-O--N-AAAA :lol: Momento di gloria :superlol:
alla fine mi sono permesso di prendere spunto (copiazzare la tua tecnica di flag dal tuo blocco),,è per ora con una piccola modifica l'ho adattato a mio gradimento:
la parte in rosso è la piccola modifica, praticamente do la precendenza a un job alla volta , sinceramente non riesco capire doce richiamavi il job di lettura sulla tua funzione. e dopo aver seguito il tuo consiglio e aver capito come funziona il lavoro di srittura e lettura ho fatto questo.

grazie mille per il consiglio della vat :worthy:

L #NUMERO_ASSE
L 0
<=I
BEB /                                                         / SE IL DB INTERFACCIA =0 FINISCE IL BLOCCO


L #NUMERO_ASSE                               //DB1=ASSE 1 , DB2=ASSE 2 , DB3= ASSE 3
T #AW_DB
AUF DB [#AW_DB]                                 // APRO IL DB INTERFACCIA ASSE
U #write_op_on
UN #step_1_read
UN #step_3_read
UN #step_2_read
S #step_1_read
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
UN #step_2_read
S DBX 39.3                                         // job scrittura
R #step_1_read
S #step_2_read
U DBX 49.3                                         // fino che è attivo il job 39.3, non attivare il 43.3
SPB a005

a005: S DBX 43.3                               // job lettura




U #step_2_read
UN DBX 39.3                                     // se il di scrittura ha finito
U(                                                         // verifico che siano arrivati i dati correttamente
L DBB 197
L DBB 447
==I
)
R #step_2_read
S #step_3_read

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 #AW_DB                                                   // 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 20                                                                       // 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 "BLKMOV"
SRCBLK :=#x_Sorgente
RET_VAL:=#RETVAL_SFC20
DSTBLK :=#y_Destinatario

L DBB 197
L 5
+I
T DBB 197
L 70
>=I
R "STEP_3_READ"
R #write_op_on
SPB VELJ                                                            // TRAFERISCI VELOCITA JOG

R #step_3_read
S #step_1_read
SPA CIC1
VELJ: NOP 0
//***********************
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 #AW_DB                                                                        // 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 "BLKMOV"
SRCBLK :=#x_Sorgente
RET_VAL:=#RET_VAL_SFC20_1
DSTBLK :=#y_Destinatario
BEA                                                                                    //FINE BLOCCO ASSOLUTO



CIC1: UN #write_op_on
R #step_1_read
R #step_2_read
R #step_3_read




NOP 0

ora tocca alla scrittura <_<

Link al commento
Condividi su altri siti

NON avevo dubbi sul funzionamento del mio codice, altrimenti non l'avrei postato. Sono purtroppo tutte le condizioni di contorno ad essere particolarmente rognose per uno alle prime armi.

Proprio per questo ti ho espressamente consigliato la VAT, solo che non sempre riesco ad essere convincente.....ma sono contento che funzioni.

pigroplc

Link al commento
Condividi su altri siti

NON avevo dubbi sul funzionamento del mio codice, altrimenti non l'avrei postato. Sono purtroppo tutte le condizioni di contorno ad essere particolarmente rognose per uno alle prime armi.

Proprio per questo ti ho espressamente consigliato la VAT, solo che non sempre riesco ad essere convincente.....ma sono contento che funzioni.

pigroplc

Sei stato più che convincente , ero io che non capivo anche perché non le avevo mai usate grazie ancora senza il tuo aiuto non c'è l'avrei mai fatta. Ma i motori che usavi della RTA erano trifase come quelli della Siemens ?

Sinceramente i motori della siemens hanno 3 fasi da 105 v .. Ma non capisco quale è il neutro.alla fine sono sempre in continua .

Inoltre io con il tester vedo che c'è una continuità tra i 3 morsetti delle fasi sul motore ... Non so se è normale

Link al commento
Condividi su altri siti

  • 1 month later...

alla fine ho fatto girar tutto grazie alla tua funzione :smile::smile::thumb_yello: anche se non proprio come volevo ( imposto una velocità di jog di 6mm/m con un percorso per giro motore di 6mm con 1000step giro , e mi ritrovo il motore che in 20 secondi mi fa un giro , assurdità che dentro all'fm i calcoli vengono fatti correttamente , forse un problema di interferenza,,,..)

ora stavo programmando un DI dell'fm per lo zero. il problema che per programmare questi ingressi utilizzando la santa funzione non mi risulta tanto semplice , nel senso che sono costretto lavorare con dei formati BITFELD32 che sul sito siemens non riesco trovare(ogni volta che entro mi perdo,,,)per esempio quando sono andato a leggere i valori che erano presenti sulla scheda mi ritrovo un valore di 500 in DEC.

ora vedo che questi formati non esistono nemmeno più .....

ti chiedo una cortesia pigroplc, rimembri qualcosa di questi formati e di come funzionano?

grazie mille .

Link al commento
Condividi su altri siti

yes,

bitfeld significa mappatura a bit.

si tratta di un byte per ciascun ingresso/uscita digitale e sono messi in sequenza. Nel manuale sono spiegati pure bene:

dato macchina 34 Digital inputs

0 = external start
1 = input for enable
2 = external block change
3 = set actual value on-the-fly
4 = measure
5 = RPS for search for reference
6 = reversing switch for

allocation:
Bit No. I/O 0
Bit No. + 8 I/O 1
Bit No. + 16 I/O 2
Bit No. + 24 I/O 3

significa che I primi 8 bit sono il significato dell'ingresso digitale 0 che se gli metti 5 vuol dire che è il bero di zero.

per una più facile comprensione questi parametri vedili in esadecimale

il tuo esempio calza: 0500 hex vuol dire che l'ingresso 0 è il bero di zero, gli altri non sono usati.

l'unico dubbio che mi resta è se si conta da destra o da sinistra, come potrai ben capire non ho sottomano la scheda per poter provare, quindi fallo TU!.

pigroplc

Modificato: da pigroplc
Link al commento
Condividi su altri siti

ciao pigroplc grazie mille dell'aiuto :smile::smile:

con un esempio (collaudato) funziona cosi:

voglio programmare lo zero sull'ingresso 0, lavoro sempre in base binaria

2#00000000_00000000_00000000_00100000

DI3 DI2 DI1 DI0

inoltre ho notato che se voglio programmare per esempio lo zero nel DI3 in contemporanea con il DI0 programmato non mi lascia. mi segnala in errore nei dati.

grazie mille per la tua disponibilità. :thumb_yello:

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