coquinati Inserita: 24 maggio 2014 Autore Segnala Share Inserita: 24 maggio 2014 mi scuso se rispondo dopo tutti questi giorni , ma sono impegnato in un lavoro che mi sta portando via giornate intere, quindi posso dedicarmi solo al sabato e alla domenica allo studio dell'fm ., stamattina ho ripreso in mano la situazione, premetto che io i flag non li uso , almeno per ora sto cercando di rendere il tutto più semplice da capire per me . se mi permetti vorrei chiederti una cosa che non trovo nei manuali, : ANY: LAR1 P##X_Sorgente; // Parameter assignment ANY//***********************L W#16#1002; // ID code & typeT LW [AR1,P#0.0]; L 20; // Nr. bytesT LW [AR1,P#2.0]; L DBNO; // Nr. DB sourceT LW [AR1,P#4.0]; L 450; // From DW numberSLD 3;OD DW#16#84000000; T LD [AR1,P#6.0]; in questo caso punti 1002 hex con una word, ma cosi carichi 16 (dec)sul byte 0 e 2(dec) sul byte 1? scusa se faccio queste domande ma come ripeto è la prima volta che uso dati del tipo ANY , L DBB 197; // IF data number is equal ofL DBB 447; // the read request THAN the handshake==I ; // is complited non riesco capire se il DBB 447 contiene di suo il numero totale delle DM. ? scusa del disturbo spero di non avere chiesto cose banali, grazie mille e buon week end Link al commento Condividi su altri siti More sharing options...
beppo Inserita: 24 maggio 2014 Segnala Share Inserita: 24 maggio 2014 Ciao coquinati. in questo caso punti 1002 hex con una word, ma cosi carichi 16 (dec)sul byte 0 e 2(dec) sul byte 1? scusa se faccio queste domande ma come ripeto è la prima volta che uso dati del tipo ANY Qui ti posso rispondere anchi'io, Caricare 1002 significa caricare 10 Hex sul primo byte 0, questo non cambia mai, caricare 02 Hex sul byte 1, questo va ad identificare il tipo di dati, 01 BOOL Bit 02 BYTE Byte (8 bit) 03 CHAR Caratteri (8 bit) 04 WORD Parole (16 bit) 05 INT Numeri interi (16 bit) 06 DWORD Parole (32 bit) 07 DINT Numeri interi (32 bit) 08 REAL Numeri in virgola mobile (32 bit) 09 DATE Data 0A TIME_OF_DAY (TOD) Ora 0B TIME Temporizzatore 0C S5TIME Tipo di dati S5TIME 0E DATE_AND_TIME (DT) Data e tempo (64 bit): 13 STRING Stringa di caratteri Ti rimando a questa discussione per capire il puntatore Any: http://www.plcforum.it/forums/index.php?showtopic=28796&st=0&p=170508&#entry170508 Spero di esserti stato di aiuto. Link al commento Condividi su altri siti More sharing options...
pigroplc Inserita: 24 maggio 2014 Segnala Share Inserita: 24 maggio 2014 il confronto fra il byte 197 e 447 della anwender DB verifica che nella parte di ricezione siano arrivati I dati. Vero è che se I dati sono arrivati si passa al passo successivo che copia a famosi 20 byte dal byte 450 in poi (sono I valori letti del famoso pacchetto di 5 dati macchina) e poi li scrive in DB2 che è la mia DB di interfaccia standard WinCC per la visualizzazione di quanto ho letto. Quanto ai flag sei libero di non usarli, basta che rendi sequenziali le operazioni. Il software postato ha la funzione di spiegarti come fare a leggere e scrivere I dati macchina, e visto che il manuale dispensa una spiegazione non prorio chiara, o meglio chiara per coloro abituati da decenni a documentazione di questo tipo o peggiore. Certo è che se non fai le operazioni in sequenza scordati di farlo funzionare. Quanto ai puntatori vedo che Beppo ha detto tutto quello che c'era da dire. pigroplc Link al commento Condividi su altri siti More sharing options...
coquinati Inserita: 11 giugno 2014 Autore Segnala Share Inserita: 11 giugno 2014 ciao ragazzi, finalmente posso continuare con lo studio della funzione. volevo sapere se mi è permesso chiederlo una precisazione. veniamo al succo del discorso: L 450; / / From DW number SLD 3; OD DW#16#84000000; T LD [AR1,P#6.0]; allora qua carico 450 che convertito in codice binario è questò: 00000000 00000000 00000001 11000010 shifto il tutto di 3 posti verso sinistra: 00000000 00000000 00001110 00010000 combino con una OR il valore esadecimale 84000000 10000100 00000000 00000000 00000000 00000000 00000000 00001110 00010000 -------------------------------------------------------------- 10000100 00000000 00001110 00010000 LD [AR1,P#6.0]; byte 6.0=10000100 , hex= 84 , identifica l'area db, byte 8.0 e 5 bit del 9.0=00001110 00010 , dec=898 identifica l'indririzzo byte 898.0 però è sbagliato perchè teoricamente devo puntare al byte 200.0 ( da quello che ho capito) eppure non riesco capire dove sbaglio... Link al commento Condividi su altri siti More sharing options...
coquinati Inserita: 12 giugno 2014 Autore Segnala Share Inserita: 12 giugno 2014 Inoltre ne aprofitto per chiedere una cosa , il valore di #16#84000000 é un numero a 32 bit , il 32esimo bit rappresenta il segno ,ma funziona anche da esponente in questo caso ? Grazie ancora ! Link al commento Condividi su altri siti More sharing options...
pigroplc Inserita: 12 giugno 2014 Segnala Share Inserita: 12 giugno 2014 devi studiarti bene il discorso dei puntatori, altrimenti NON ti è chiaro il funzionamento del codice. Una spiegazione esaudiente la trovi nel tuo pc: C:\Program Files\Siemens\Documentation\Italiano il file è Programmazione con STEP 7 da pagina 624 mi ricordo che c'era nel forum una spiegazione spettacolare dei puntatori fatta da Batta, prova a cercare. pigroplc Link al commento Condividi su altri siti More sharing options...
coquinati Inserita: 13 giugno 2014 Autore Segnala Share Inserita: 13 giugno 2014 ora credo di aver capito , i byte 200 a 219 servono per la scrittura , metre i byte da 450 a 469 per la lettura , peer il discorso puntatori penso funziona cosi: 450 in base 2= 00000000 00000000 00000001 11000010 se vado a caricarlo cosi andrei a occupare i bit 0,1,2 del byte 9. cioè darei un indirizzo in bit al mio pointer,( in questo caso ho bisogno di zero).shifto il tutto di 3 posti : 0000000 00000000 00001110 00010000 ora ho i bit 1.2.3 del byte 9 liberi , e ottengo sempre un valore di 450, quindi ora il mio indirizzo è di 450.0 ( lettura) ora vediamo di combinare le due doppie parole con il valore in hex#84000000 hex84000000: 10000100 00000000 00000000 00000000 00000000 00000000 00001110 00010000 ------------------------------------------------------------ 10000100 00000000 00001110 00010000 la storia del segno non l'ho ancora svelata , sul sito siemens c'è cosi tanta roba. anzi spero di aver capito correttamente quel poco che ho scritto sopra Link al commento Condividi su altri siti More sharing options...
pigroplc Inserita: 13 giugno 2014 Segnala Share Inserita: 13 giugno 2014 la spiegazione è molto semplice. Si tratta di sintassi e non c'entrano bit di segno. il puntatore DEVE essere fatto così in quanto si tratta di trasferire dei byte di una DB e a partire da un determinato indirizzo. Lo shift dei 3 bit è funzione del fatto che nel puntatore c'è compreso l'indice dei BIT (0-7 duale) = (000-111 binario). consiglio: NON PERDERCI PIU' TEMPO DEL DOVUTO. Prendilo come dato di fatto, mi ricordo che anni fa c'era una spiegazione nella documentazione in linea Siemens che spiegava che mettendo 84 si identifica un puntatore della DB, mettendo 74 identifica per esempio merker; ecc ecc) pigroplc Link al commento Condividi su altri siti More sharing options...
coquinati Inserita: 16 giugno 2014 Autore Segnala Share Inserita: 16 giugno 2014 Si si l'ho trovata la tabella che mi dicevi era sotto ai miei occhi quest 'oggi ho quasi ultimato di capire la parte di scrittura , sinceramente non pensavo che sotto c'era una complessità del genere ... Ci credo che tanta gente rifiuta di imparare queste schede ... Ma io ormai ho iniziato , inoltre anche se dovrei fallire ho già imparato molte cose che una volta se le provavo guardare mi accecavano :)quindi ottimo training ! Speriamo che riesca finire in tempo se no i motori mi si ossidano. Comunque i miei complimenti per aver scritto una cosa del genere pigro plc , Qua ho notato la professionalità che bisogna avere per questo lavoro .. Inviato dall'app. Mobile di PLC Forum da iPhone6,2 Link al commento Condividi su altri siti More sharing options...
coquinati Inserita: 19 giugno 2014 Autore Segnala Share Inserita: 19 giugno 2014 L DBB 197; L 5; +I ;T DBB 197;L 70; se posso ti faccio una domanda, come mai confronti la dbb 197 che è il numero di dato macchina in lettura o scrittura con 70, i dati macchina vanno da 1 a 56 , tra cui 11 non sono occupati quindi me ne restano 45 , considerando però che uno è usato internamente dall'fm e il numero 19 non capisco a cosa serva. quindi al massimo posso avere un valore 61. non riesco proprio ad arrivarci ho provato ma mi sono arreso all'aiuto. grazie mille . Link al commento Condividi su altri siti More sharing options...
pigroplc Inserita: 19 giugno 2014 Segnala Share Inserita: 19 giugno 2014 I dati macchina iniziano dal numero 5 fino al 67 (se non erro) nella FM453 e FM354. Queste schede possono gestire sia I servomotori retroazionati con encoder quindi hanno qualche dato macchina in più. Le FM353 sono abilitate solamente per i passo passo (secondo me una scusa per giustificare un prezzo inferiore). Il software funziona per tutte le schede, se si tratta di dati macchina non presenti sulla scheda o semplicemente disabilitati, il risultato della lettura è zero, e la scrittura non sortisce alcun effetto. Ho tenuto il limite a 70 in quanto mi sono cautelato da successivi aumenti dei dati macchina, visto che allora si trattava di un prodotto molto spinto da Siemens e sul quale prevedevo sviluppi futuri. L'evoluzione dei bus di campo e il loro utilizzo comune ha ammazzato il mercato di queste schede, che mamma Siemens ha abbandonato come sviluppi successivi. In sintesi: il software legge e scrive i dati macchina dal 5 al 70, indipendentemente che ci siano o no. Se non ci sono, fa nulla, legge zero e scrive un numero NON gestito dalla scheda (senza per altro restituire alcun codice di errore). pigroplc Link al commento Condividi su altri siti More sharing options...
coquinati Inserita: 21 giugno 2014 Autore Segnala Share Inserita: 21 giugno 2014 Link al commento Condividi su altri siti More sharing options...
pigroplc Inserita: 21 giugno 2014 Segnala Share Inserita: 21 giugno 2014 E' una questione di mercato e di logica: immagina di avere 60 servomotori da gestire con un PLC: soluzione 1 prendi un S7-400, gli metti 20 (ripeto venti) FM453 con relativi rack di espansione, alimentatori, qaudro elettrico e cablaggi per gestire il tutto. Il PLC ha il compito di dialogare con le schede che a loro volta tramite una interfaccia analogica comandano I servomotori. soluzione 2 prendi un S7-300, gli metti gli azionamenti in Profibus o Profinet. Gli azionamenti hanno un loro posizionatore interno, quindi tramite rete gli mandi la quota alla quale devono arrivare e aspetti dall'azionamento il bit di quota raggiunta. ti do un indizio, ogni FM453 costa 3000 e spiccioli, più i rack più gli alimentatori più il quadro elettrico più grosso più lo sconto sulla serie 300 che non è nemmeno da comparare rispetto alla serie 400. Adesso la domanda è questa: quale è la soluzione più economica (oltre più affidabile e semplice da mettere in servizio) ????? a te le debite conclusion. pigroplc Link al commento Condividi su altri siti More sharing options...
coquinati Inserita: 22 giugno 2014 Autore Segnala Share Inserita: 22 giugno 2014 Chiaramente la seconda soluzione in questo caso , ma se io ho un asse massimo 2 da gestire , per esempio un guidafilo . Quale resta la migliore in questo caso ? . Sempre il sinamics? Link al commento Condividi su altri siti More sharing options...
pigroplc Inserita: 22 giugno 2014 Segnala Share Inserita: 22 giugno 2014 Con I prodotti odierni presenti sul mercato puoi avere decine di soluzioni. A livello aziendale poi si prendono delle decisioni che: 1) dipendono dalle specifiche imposte dal cliente 2) dipendono dal prezzo e/o dagli accordi dell'ufficio acquisti 3) dipendono da uniformità di configurazione con altre machine simili 4) dipendono dal tempo di consegna visto che oramai si ordina per il giorno prima e ti ho citato solamente le prime 4 motivazioni che mi vengono in mente stasera. Ti è chiaro quindi quanto per me è impossibile rispondere alla tua domanda? pigroplc Link al commento Condividi su altri siti More sharing options...
coquinati Inserita: 22 giugno 2014 Autore Segnala Share Inserita: 22 giugno 2014 Si si capito molto bene . Quindi un programmatore deve adattarsi anche alle richieste del cliente a livello HW ... Bel casin:) Inviato dall'app. Mobile di PLC Forum da iPhone6,2 Link al commento Condividi su altri siti More sharing options...
coquinati Inserita: 24 giugno 2014 Autore Segnala Share Inserita: 24 giugno 2014 questa sera ho provato dedicarmi al sinamics.. a prima impressione sembra meno complicato dell'fm . ma l'fm per ora non l'abbandono, fin che non la imparo bene, magari una azienda ha bisogno di un manutentore o necessita di fare modifiche al programma su macchine che usano queste schede, potrebbe essere una buona via per trovare un lavoro davvero bello...speriamo. comunque mi sono reso conto di una cosa, io ho iniziato a scrivere la pagina su wincc , chiaramente io posso impostare anzi devo impostare tutte le variabili una a una , mi ritrovo ad affrontare la Generazione percorso per giro del motore UMWEG che è data dal rapporto tra : UMWEG = DM11 + DM12*2-32 che tradotto è: = percorso per ogni giro del motore (periodo di suddiv.) +percorso residuo per ogni giro motore*2-32 ora sto pensando cosa mi conviene fare , poichè noto che sulla parametrizzazione ti fa inserire i dati della dm11/12 gia rapportati. dal manuale non è spiegato molto chiaramente cosa si intende con il periodo di suddivisione ( a parer mio i passi giro), ne con il percorso residuo per ogni giro motore. mmmm... Link al commento Condividi su altri siti More sharing options...
pigroplc Inserita: 24 giugno 2014 Segnala Share Inserita: 24 giugno 2014 Ho un bel foglietto di spiegazioni a casa, ma fino alla prima decade di luglio a casa non ci torno, dovrei vedere degli appunti perchè il calcolo della conversione impulsi/mm non è proprio immediato e devo lavorare anche di sera in albergo per portarmi Avanti. Se porti pazienza un paio di giorni ti darò una risposta esaudiente. questa sera ho provato dedicarmi al sinamics.. a prima impressione sembra meno complicato dell'fm . ah ah ah ah mi hai regalato un momento di risate, e fidati, in India ci sono ben pochi motivi per ridere. pigroplc Link al commento Condividi su altri siti More sharing options...
coquinati Inserita: 24 giugno 2014 Autore Segnala Share Inserita: 24 giugno 2014 An trasferta in India :)posso capire:) deve essere davvero dura , sopratutto Senza clima , anche se io non ho mai fatto queste esperienze .e per ora dico purtroppo .. Comunque aspetto :)aspetto intanto come hai notato vado con calma nel frattempo vado avanti con li altri dati macchina che capisco . Grazie ancora , e buon lavoro Link al commento Condividi su altri siti More sharing options...
coquinati Inserita: 5 luglio 2014 Autore Segnala Share Inserita: 5 luglio 2014 ciao ragazzi. pigroplc ho provato a collaudare la funzione ( chiaramente una versione scritta da me , prendendo spunto dalla versione madre , cioè la tua) ancora 3 giorni fa ,, chiaramente come tutte le cose che faccio non va,,, ho trovato alcuni errori l'ho modificata , ma non andava ancora, allora ho scritto una funzione solo per leggere, e sinceramente qua ho visto qualche strambo dato comparirmi sull'hmi o DB di interfaccia. ma ancora niente di concreto. ma se io ottengo un valore sulla DB447 diverso dalla DBB 197 devo preocuparmi? io ragionavo che inserito il JOB di lettura in DBB 196 automaticamente mi ritrovavo i dati macchina da partire dal DBB450 ( dati lettura) ma non era cosi. allora io per ingannare il sistema di controllo confronti , e vedere se almeno un numero diverso da zero uscisse ho semplicemente caricato i valori che di job/DB/quantita/numero da partire a DBB 447 . risultato: qua si spiegano i numeri strambi Ecco il codice : L #n_asse L 0 ==I // se asse uguale a 0 finisce blocco BEB L #n_asse L 2 +I // SE ASSE =1 DB = 3 , ASSE = 2 DB=3, T #AW_DB AUF DB [#AW_DB] // OPEN DB PARAMETRIZZAZIONE U #lettura UN #scrittura SPBN m000 L 1 T DBB 196 // 1=DATI MACCHINA T DBB 199 //1= job LETTURA DATI MACCHINA T DBB 446 T DBB 449 L 5 T DBB 197 //5= DA MD 5 , T DBB 198 //5= LETTURA NUMERO MAX 5 MD AL COLPO T DBB 447 T DBB 448 U #lettura U( L DBB 197 //scrivo da md 5 vedi commento segmento L DBB 447 // leggo da md 5 ==I ) S DBX 43.3 //job lettura R DBX 39.3 // job scrittura R DBX 37.0 // aativazione dati macchina SPB m004 //attivo la lettura altrimenti SPA m000 //salto a fine blocco m004: L 13 m003: T #cont_loop_read //--------------------------------------------------------- LAR1 P##x_sorgente //---------------------------------------------------------- L W#16#1002 // carico ID tipo ( 10) , e il tipo dati (02)=byte T LW [AR1,P#0.0] L 20 // NR byte da trasferire, fattore di ripetizione T LW [AR1,P#2.0] L #AW_DB // nr db sorgente T LW [AR1,P#4.0] L 450 // 00000000 00000000 00000001 11000010 (450=lettura) SLD 3 // 00000000 00000000 00001110 00010000 OD DW#16#8400000 // 10000100 00000000 00000000 00000000 L LD [AR1,P#6.0] // 10000100 00000000 00001110 00010000 // area m. byte 7 byte8 byte9 //------------------------------------------------------------------------------------ LAR1 P##y_destinatario //------------------------------------------------------------------------------------ L W#16#1002 // carico ID tipo ( 10) , e il tipo dati (02)=byte T LW [AR1,P#0.0] L 20 // NR byte da trasferire, fattore di ripetizione T LW [AR1,P#2.0] L #db_destinazione // nr db destinazione T LW [AR1,P#4.0] L DBB 447 // numero della DM L 4 //ottieni l'indirizzo in DW, punto ogni 4 byte, *I L 20 //inizia da DM 5, parto con indirizzo zero -I SLD 3 OD DW#16#84000000 T LD [AR1,P#6.0] CALL "BLKMOV" SRCBLK :=#x_sorgente RET_VAL:=MW60 DSTBLK :=#y_destinatario L "(AW_DB) ASSE 1".PAR_CHAN.NUMB // numero dati macchina L 5 +I T "(AW_DB) ASSE 1".PAR_CHAN.NUMB T "(AW_DB) ASSE 1".PAR_RD.NUMB L #cont_loop_read LOOP m003 R DBX 43.3 BEA m000: NOP 0 scusa per il distrurbo , da quel che ho capito è dal 2001 che non metti più occhio a queste schede, non vorrei approfittarne troppo grazie e ciao Link al commento Condividi su altri siti More sharing options...
pigroplc Inserita: 7 luglio 2014 Segnala Share Inserita: 7 luglio 2014 allora, visto che la cosa è squisitamente propedeutica, comincia a prendere spunto dal software fatto per eseguire il job di lettura singolo e svincolato da qualsiasi codice: ti costruisci una VAT e fai a scrivere una richiesta di lettura, quindi vai a leggere I valori. Se non parti da questo metti troppa carne al fuoco e anche se analizzassi il tuo codice e correggessi eventuali errori non avrei contribuito a formare la tua base tecnica. Se capisci il lavoro di scambio dati e ti ripeto lo puoi capire veramente solo con l'ausilio di una tabella di variabili, il resto te lo scrivi come vuoi tu! Io poi avrei copiato pari pari il software già fatto e funzionante prima di scriverne uno io e ritrovarmi una pigna di possibili errori di battitura o concettuali. STEP BY STEP. Finchè non ti è chiaro con una VAT come funziona lo scambio dati non andare Avanti. pigroplc Link al commento Condividi su altri siti More sharing options...
coquinati Inserita: 9 luglio 2014 Autore Segnala Share Inserita: 9 luglio 2014 ho preso alla lettera il tuo consiglio , ho copiato la tua funzione , come hai detto te per ora mi limito nel capirla correttamente . ho notato una cosa molto strana , che almeno io non mi riesco spiegare , il reset del DBX 39.3 dove l'ho fai? c'è qualche opzione sul pannello ? perchè provando , mi ritrovo sempre questo bit su on , e se questo è su on non riesco leggere i dati. vorrei chiederti an altra cosa riguardo a questo codice: U "START_WRITE_FM" CLR L S5T#10S SE "TEMP_3" U "TEMP_3" S M 93.0 R "START_WRITE_FM" U "START_READ_FM" CLR L S5T#10S SE "TEMP_4" U "TEMP_4" S M 93.1 R "START_READ_FM" ma come riesci ad abilitare i temporizzatori? anche se non riesco comprendere come funziona questo codice ,mi sembra di capire che prima scrivi e poi leggi . sinceramente mi sono apllicato , ma su questi dubbi ,dopo che ci sono stato dietro diverse ore preferisco chiedere. scusa del disturbo e grazie ancora della disponibilita Link al commento Condividi su altri siti More sharing options...
coquinati Inserita: 9 luglio 2014 Autore Segnala Share Inserita: 9 luglio 2014 Scusate per gli errori grammaticali . Non rileggo mai i messaggi Link al commento Condividi su altri siti More sharing options...
pigroplc Inserita: 9 luglio 2014 Segnala Share Inserita: 9 luglio 2014 ho notato una cosa molto strana , che almeno io non mi riesco spiegare , il reset del DBX 39.3 dove l'ho fai? quello lo dovrebbe fare la FB di interfaccia della scheda, quindi ti limiti a valutare il fronte di discesa per avanzare con la procedura vorrei chiederti an altra cosa riguardo a questo codice: sicuramente entrambi I timer non partono, si trattava di un time out che in caso di errore nella esecuzione mi restituiva l'errore che veniva visualizzato a video. Non ricordo sinceramente il perché ho messo un tappo, ADESSO NON FUNZIONA, quindi cancellalo. ho preso alla lettera il tuo consiglio , a dire il vero io mi aspettavo che mi dicessi che hai provato con una VAT, forse così avrei capito che hai preso alla lettera il mio consigio...... pigroplc Link al commento Condividi su altri siti More sharing options...
coquinati Inserita: 9 luglio 2014 Autore Segnala Share Inserita: 9 luglio 2014 quello lo dovrebbe fare la FB di interfaccia della scheda, quindi ti limiti a valutare il fronte di discesa per avanzare con la procedura sicuramente entrambi I timer non partono, si trattava di un time out che in caso di errore nella esecuzione mi restituiva l'errore che veniva visualizzato a video. Non ricordo sinceramente il perché ho messo un tappo, ADESSO NON FUNZIONA, quindi cancellalo. a dire il vero io mi aspettavo che mi dicessi che hai provato con una VAT, forse così avrei capito che hai preso alla lettera il mio consigio...... pigroplc Si scusa mi sono spiegato male , ho usato anche una VAT ,sempre sulla tua funzione . Appena torno a casa provo riprendere in mano la funzione . Grazie per ora Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora