Canaia Inserito: 16 febbraio 2012 Segnala Share Inserito: 16 febbraio 2012 Ciao a tutti come da titolo avrei un grossisimo problema di comunicazione modbus, con la schedina opzionale rs485.Questa schedina dovrebbe consentirmi di comunicare con lo strumento GFXTERMO4 della Gefran, ma ciò non accade.Sto utilizzando i blocchi funzione modbus dati dalla omron :1-read coil status2-read input status3-read holding register4-read input registers5-force single coil6-set single register0f-write multiple coils10-write holding registers08-comunication testPer favore sono disperato, potete darmi un consiglio in merito alla risoluzione del problema? grazie in anticipo Link al commento Condividi su altri siti More sharing options...
Ctec Inserita: 16 febbraio 2012 Segnala Share Inserita: 16 febbraio 2012 Ma stai usando delle FB che sono per il CP1L? Non le ho mai viste.La serie CP1 usa l'EasyModbus, cioè comprende all'interno la gestione del protocollo, cosa che per esempio non è nativa sui CPM o sui CJ (senza moduli SCU).La gestione è sostanzialmente diversa, e si basa sulla scrittura in alcune aree dei registri D (in zona D30000), e inoltre la porta su cui è montato il modulo CIF deve essere impostata in modo Serial Gateway.Dammi qualche informazione aggiuntiva (tipo il nome esatto delle FB che usi) e vedrò di aiutarti. Io il ModBus lo uso tantissimo con i CP1L Link al commento Condividi su altri siti More sharing options...
valvolina Inserita: 16 febbraio 2012 Segnala Share Inserita: 16 febbraio 2012 ciao,gli fb di Omron vanno bene io li uso di solito con inverter di tutte le razzequalche consiglio:la schedina che stai usando è una cp1w-cif11 ? sai che questa schedina ha dei deep switch da settare ?li hai già sistemati?hai la documentazione in merito?se non hai questa documentazione la puoi trovare su MyOmronoppure eventualmente fammi sapere che vedo di passartelasaluti da Valvolina Link al commento Condividi su altri siti More sharing options...
Canaia Inserita: 19 febbraio 2012 Autore Segnala Share Inserita: 19 febbraio 2012 si la schedina opzionale e la cp1w-cif11 e gli switch gli ho già impostati, però non capisco come impostare gli fb, ovvero mi chiedono l'indirizzo della SCU! Il problema e che in tutti i manuali che ho letto, non si capisce cosa sia!E la porta è già perfettamente settata in serial eppure in formato e velocità! Link al commento Condividi su altri siti More sharing options...
Ctec Inserita: 19 febbraio 2012 Segnala Share Inserita: 19 febbraio 2012 Perchè le FB sono per i moduli SCU.I PLC CP1L usano un approccio diverso. Non esistono FB, ma si accede direttamente a delle Data Memory per inviare (e ricevere) messaggi.Se prendi il manuale W07E-IT-01A al paragrafo A-4-7 trovi la spiegazione con esempi della modalità Easy Modbus come Master RTU.Se poi ti piace di più baloccarti con le FB, trovi un bel po' di esempi e FB fatte QUI. Link al commento Condividi su altri siti More sharing options...
valvolina Inserita: 19 febbraio 2012 Segnala Share Inserita: 19 febbraio 2012 ciao,purtroppo non trovo al momento il manuale da mandarti comunque ti allego un'immagine di un esempio funzionanteil n_siu va messo = a &31il serial_port va messo = &1la porta usata sul cp1m-40 è la numero duein ditta dovrei avere anche i manuletti relativi (domani li cerco)prova a dare un'occhiatasaluti da Valvolina Link al commento Condividi su altri siti More sharing options...
Canaia Inserita: 19 febbraio 2012 Autore Segnala Share Inserita: 19 febbraio 2012 Ctec: Nel manuale W07E-IT-01A al paragrafo A-4-7 non ho trovato nulla sul easy modbus, ma tanto per capire che cos'è e come funziona, perchè non lo mai sentito! Per valvolina grazie della dritta, più tardi vado a provare e vedo cosa succede, sento che questa e la volta buona. Link al commento Condividi su altri siti More sharing options...
Ctec Inserita: 19 febbraio 2012 Segnala Share Inserita: 19 febbraio 2012 Allora, le FB che ti ho indicato sono con versioni che gestiscono anche le porte dei CP1 ( le versioni precedenti solo le SCU, quindi espansioni per CJ/CS).Insieme ci dovrebbero essere anche le documentazioni per settare i parametri giusti, che ora davvero non rammento, dato che io non uso 'ste FB.Per quel che riguarda la modalità Easy Master Modbus (propria dei CP1), il riferimento che ti ho dato è giusto, sulla guida introduttiva al CP1. In quelle pagine, oltre ad esempi, c'è il riferimento al manuale completo, in inglese, con il dettaglio della funzione. Il manuale è il W462-E1-07, ed il paragrafo è il 6-3-3 Modbus-RTU Easy Master Function, con tutti i dettagli del caso.Esiste poi anche una presentazione datami dai tecnici Omron all'uscita della serie CP1-H , che però non so dove trovare in rete.Personalmente, preferisco questa modalità, primo perchè snella ed integrata, secondo, dato che le FB nel CP1 occupano posto in memoria programma e poi ne devono essere usate almeno due (una per la funzione, l'altra per il refresh), si occupa gran posto per nulla. E' poco efficiente, ecco. Link al commento Condividi su altri siti More sharing options...
Canaia Inserita: 24 febbraio 2012 Autore Segnala Share Inserita: 24 febbraio 2012 ctec ho guardato nella guida che mi hai indicato, ma non riesco a capire come devo utilizzare questo easy modbus. Per caso hai un esempio da mostrarmi perchè in internet non ho trovato nulla, grazie. Link al commento Condividi su altri siti More sharing options...
gianff Inserita: 26 febbraio 2012 Segnala Share Inserita: 26 febbraio 2012 approfitto di questa discussioneanchio sto cercando di usare easy modbus con CP1H-X + cp1w-cif11 PORTA 1seguendo i manuali W07E w462sono riuscito a farla partire con a641.00 ( lampeggia anche senza nulla di collegato)con la DM 32202 riesco a farla lampeggiare + - veloceil tutto parte dalla DM 32200cerco di comunicare con convertitore analogico seneca rs485 modbusil quale collegandolo a volte mi restituice solo il function code su' D32251a questo punto cosa debbo fare per chiedere un dato da quale DM si comincia a scriverecome va scrittoqueste ultime cose come si capiscono dai manuali ????per i dati modbus del convertitore dice solamente esempio ( fondo scala IND 40046 R/W BIT 15.8)come vanno intese le due cose (modbus omron )-- (modbus (qualsiasi)o il mio seneca ) Link al commento Condividi su altri siti More sharing options...
Ctec Inserita: 26 febbraio 2012 Segnala Share Inserita: 26 febbraio 2012 Ok, vediamo se riesco a spiegarlo.La porta 1 è quella più a sinistra, la 2 quella più a destra. I CP1 con una sola porta, hanno solo la porta 1I parametri fisici della porta (baud, bits, ecc...) vengono settati nelle impostazioni e li dovete mettere uguali su tutte le periferiche connesse in rete ModBus. L'unica particolarità è settare il GateWay seriale.Impostate anche il timeout di riposta; io lo metto a 1 secondo, altrimenti i 5 di default son tanti se la periferica non risponde.A questo punto si passa al software. Il protocollo è un modbus RTU master, per cui tutte le altre periferiche in rete devono essere slave. Nessun problema se sono inverter o schede, quali le Seneca.Pensando alla porta 1, vediamo le aree dati da utilizzare:D32200 #00aa dove aa è l'indirizzo in esadecimale della scheda cui è indirizzato il comando (da 0x00 a 0xF7)D32201 #00ff dove ff è il codice della funzione modbus in esadecimale (per esempio 0x03 per leggere registri e 0x10 per scrivere)D32202 #00nn dove non è il numero di BYTES che devono essere inviati (messi da D32203 in poi), e varia da 0x00 a 0x5E)D32203 e successivi, dati da inviare, dipendenti dal comando modbus da inviare. Area occupata fino a D32249.Per la porta 2, utilizzare l'area a partire da D32300.Come si vede, il comando modbus viene composto in maniera standard, salvo il fatto che i PLC Omron lavorano a 16 bit e quindi abbiamo le word occupate da #00 nella parte alta. Il checksum (o CRC16) viene automaticamente calcolato dal gateway, per cui si risparmia un bel po' di tempo e memoria.Una volta composto il messaggio, lo possiamo inviare alzando il bit A641.00 (A640.00 per la porta 2). Appena il bit torna basso, l'esecuzione del comando è terminata. Occhio a non settarlo con una OUT, ma con una [at]SET, altrimenti avrete un casino.A questo punto, appena il bit torna basso, si analizza il risultato e possiamo casomai leggere la risposta.Se A641.01 è attivo (A640.01 per l'altra porta), l'esito è stato positivo, cioè il comando è stato inviato e correttamente interpretato dalla periferica.Se A641.02 è attivo (A640.02 per l'altra porta), c'è stato un errore.Si può andare a vedere il buffer di ricezione per vedere come è andata o per leggere i dati che volevamo:D32250 #00aa dove aa è l'indirizzo in esadecimale della scheda che ha risposto, se ha risposto (da 0x00 a 0xF7)D32251 #00ff dove ff è il codice della funzione modbus in esadecimale, corrispondente a quella che abbiamo inviatoD32252 #00ee dove ee è il codice di errore (0x00 se no errore, gli altri li trovate nel manuale)D32253 #0nnn dove nnn è il numero di BYTES ricevuti in risposta (messi da D32254 in poi), e varia da 0x000 a 0x3EA)D32254 e successivi, dati ricevuti, dipendenti dal comando modbus inviato. Area occupata fino a D32299.Intanto assimilate questo, ora preparo un paio di esempi. Link al commento Condividi su altri siti More sharing options...
Ctec Inserita: 26 febbraio 2012 Segnala Share Inserita: 26 febbraio 2012 Allora, supponiamo di voler leggere un registro da una periferica utilizzando la porta 1.Supponiamo che la periferica sia all'indirizzo 0x05, che il suo registro da leggere sia il 0x0123. Pertanto, in base al quanto ho scritto nel mio post precedente, andiamo a comporre il messaggio nel buffer:D32200 #0005 (indirizzo periferica)D32201 #0003 (funzione 0x03 - leggi registri)D32202 #0004 (numero di bytes del comando, una word per l'indirizzo del registro e una per il numero di registri da leggere)D32203 #0123 (indirizzo del registro da leggere)D32204 #0001 (leggeremo un solo registro)Il messaggio è pronto, mandiamolo con la [at]SET A641.00 e aspettiamo che si riabbassi.Appena torna a 0, verifichiamo l'esito in A641.01, e supponendolo alto, andiamo a leggere il risultato (suppongo che il registro #0123 della periferica contenesse 0x5678), occhio ai dati formato byte e word:D32250 #0005 (indirizzo periferica)D32251 #0003 (funzione 0x03)D32252 #0000 (nessun errore)D32253 #0003 (risposta costituita da 3 bytes)D32254 #0256 (il byte alto contiene il numero di bytes della risposta modbus al comando, 0x02; il byte basso contiene il byte alto del registro letto, 0x56)D32255 #7800 (il byte alto contiene il byte basso del registro letto, 0x78)Pertanto, leggeremo il registro con due MOVD in modo da ricostruire la word del registro letto; supponendo di metterla in D100:MOVD D32254 #0210 D100MOVD D32255 #0012 D100E quindi avremo #5678 in D100, valore letto dalla nostra perifericaSe i registri letti son più di uno, le operazioni di MOVD saranno una per ogni registro sequenziale letto.Spero di esser stato chiaro Link al commento Condividi su altri siti More sharing options...
gianff Inserita: 26 febbraio 2012 Segnala Share Inserita: 26 febbraio 2012 ora ci provonon capisco perche' scrivi 0x05 (esempio ) in realta e' 0005 Link al commento Condividi su altri siti More sharing options...
Ctec Inserita: 26 febbraio 2012 Segnala Share Inserita: 26 febbraio 2012 Deformazione professionale. In C i numeri esadecimali si scrivono 0x.. e 0x0005 oppure 0x05 in un sistema a 16 bit sono la stessa cosa... Link al commento Condividi su altri siti More sharing options...
gianff Inserita: 26 febbraio 2012 Segnala Share Inserita: 26 febbraio 2012 (modificato) benedetto Ce' da quando li ai scritti che mi chiedevo con cx-programmer come debbo scriverli ??anche con linux ci inpazzivo per queste cosecomunque qualcosa lo vedoalcuni numeri arrivanoma a tratti ( poi vanno a zero da soli e tornano )la comunicazione e' a posto 38400 8 1 N ( entrambi )parte e rimane agganciata se cambio qualcosa vedo errori o non parte quindi il seneca risponde male direii numeri modbus che mi dice seneca sono 03 04 leggi (ok per D32201)IND 40001 fino 40065 R/W ( sarebbe ? per D32203 )qui non ci capisco piu' nullacome li interpreto ---------------se nel seneca dovessi inviagli qualche modifica nei suoi parametri per modificarli sicuramente lo uccido !!!e sarebbe proprio quello che debbo fare da NS12domanda teccnicalo scopo sarebbe quello di evitare una costosa cj1w-adil dubbio in seriale il segnale diventa significativamente piu' lento rispetto al collegamento fisico 2 fili 0-10voltre alla remota possibilita di programmare il seneca da ns12 Modificato: 26 febbraio 2012 da gianff Link al commento Condividi su altri siti More sharing options...
Ctec Inserita: 26 febbraio 2012 Segnala Share Inserita: 26 febbraio 2012 Che modulo seneca stai usando? Io ho usato un'uscita analogica un paio d'anni fa, al limite riguardo, ma domani a lavorare.Comunque, 40001 in hex è #9C41 (per dirla alla Omron, oppure 0x9C41 per dirla alla C... Scusami...)Vedo domani Link al commento Condividi su altri siti More sharing options...
gianff Inserita: 26 febbraio 2012 Segnala Share Inserita: 26 febbraio 2012 (modificato) scusami tu se io non capisco al volo certe cose poi grazie dei tuoi prezziosi consiglida manuale direi che si farebbe molta fatica ad arrivarcimanuali da 1000 pagine poi mancano i numeri esenzialialcune chede NC MC ETN11 ecc. non riesco a farle partire per colpa di 3-4 numeri da scrivere chissa come e dove !!!!comunque funziona ho messo l'indirizzo seneca 48 e vedo l'uscita analogicama tutto lampeggia ( forse colpa del 48 ) ma anche seneca non spiega chiaramente i codici rispetto alla corrispondenzanei MOVD prima ho messo ( <> d32254 #0 d100 ) e vedo il valore fermo e si aggiornama qualcosa non quadraio uso SENECA Z-SG da cella a uscita analogica------------per scrivere a seneca devo convertire bene i suoi codici e cambiare (d32201--- 0006 ( 0016) )nulla di piu' Modificato: 26 febbraio 2012 da gianff Link al commento Condividi su altri siti More sharing options...
gianff Inserita: 27 febbraio 2012 Segnala Share Inserita: 27 febbraio 2012 (modificato) ho provato con vari codici seneca convertiti 40001 -- 9c41ma non funziona si ferma la comunicazione ??mentre funziona dal 1---49 !!!riguardo al CJ2M-CP1W-CIF11 e vero questo--------------Il CIF01-11 in un CJ2M non è una buona scelta Modbus, come il porto non ha una modalità di funzionamento che supporta Modbus RTU come il CP1L o CP1H.Il checksum CRC16 è la parte difficile di Modbus per la maggior parte dei PLC e la funzione Macro protocollo dei moduli SCU calcola il CRC16 per voi.-------------quindi con cj2m serve una SCU + F.B. ?. Modificato: 27 febbraio 2012 da gianff Link al commento Condividi su altri siti More sharing options...
Ctec Inserita: 27 febbraio 2012 Segnala Share Inserita: 27 febbraio 2012 Più tardi guardo di ritrovare la routine per il Seneca che feci anni fa.Per il discorso CP1W-CIF11 su CJ2. E' vero, nel senso che il CIF è un semplice convertitore, il protocollo modbus è gestito dal PLC.Sui CP1L hanno messo 'sta ganzata dell'easy modbus, mentre per esempio sui CP1E non c'è, anche se si mette il CIF.Di contro, anche il CJ1 e il CJ2 non prevedono il modbus sulla porta integrata, ma solo tramite SCU.Io però, grazie alla velocità del CJ2, mi son fatto una routine che calcola il CRC16, compongo il messaggio e lo mando come no-protocol e analizzo la risposta.Ho comandato 24 schede periferiche in polling a 57600bps senza problemi e senza rallentamenti. Praticamente, lo gestisco io il modbus, anche se ho implementato solo le funzioni 3 e 16 (0x10). Link al commento Condividi su altri siti More sharing options...
Ctec Inserita: 27 febbraio 2012 Segnala Share Inserita: 27 febbraio 2012 Trovato, ora rammento. Era un Seneca Z3AO, a tre uscite analogiche.Lo comandavo con un CJ1 dalla porta seriale di bordo, utilizzando le mie routine, data l'assenza dell'EasyModbus.Quel Seneca usa solo tre registri, e sono il 40005, il 40006 e il 40007, uno per ogni uscita analogica, e accetta valori da 0 a 10000.Il 40000 vuol dire registri holding, per cui non va messo tutto il numero, ma solo l'indirizzo senza il "4" davanti. In pratica, gli indirizzi diventano 5, 6 e 7. Poi il seneca usa la convenzione di trasmissione modbus classica, cioè l'indirizzo di comunicazione è l'indirizzo fisico -1, per cui gli indirizzi diventano 4, 5 e 6.Infatti, per l'uscita analogica 1, scrivevo il valore nel registro modbus #0004.Quindi occhio all'indirizzo dei registri modbus. I valori da 40001 in poi devi cambiarli da 0 in poi... Per esempio, il 40015 diventa 15, o #000E in esadecimale. Link al commento Condividi su altri siti More sharing options...
Canaia Inserita: 27 febbraio 2012 Autore Segnala Share Inserita: 27 febbraio 2012 ma scusate come fate a richiamare questi indirizzi? Non potreste allegare delle foto così da vedere... grazie Link al commento Condividi su altri siti More sharing options...
Ctec Inserita: 27 febbraio 2012 Segnala Share Inserita: 27 febbraio 2012 Canaia, perdonami, ma davvero non ho capito la domanda.Di quale indirizzi parli? Foto di cosa, dei manuali? Link al commento Condividi su altri siti More sharing options...
Canaia Inserita: 27 febbraio 2012 Autore Segnala Share Inserita: 27 febbraio 2012 di come si compila questo easy modbus. Perchè immagnino che ci sia una fb di richiamo per utilizzarlo Link al commento Condividi su altri siti More sharing options...
gianff Inserita: 27 febbraio 2012 Segnala Share Inserita: 27 febbraio 2012 (modificato) easy modbus CP1H-X + CP1W-CIF11 porta 1 in serial gateway (dati com come lo slave)D32200 #0005 (indirizzo periferica)D32201 #0003 (funzione 0003 - leggi registri)D32202 #0004 (numero di bytes del comando, una word per l'indirizzo del registro e una per il numero di registri da leggere)D32203 #0123 (indirizzo del registro da leggere)D32204 #0001 (leggeremo un solo registrodovrebbe essere uguale anche CP1L 30-40-60nei post precedenti Ctec ha spiegato chiaramente anche per dei movd da inserire nel programma-----------------xCtecho fatto delle prove di pesatura al voloanche a 57600bpsnon vado oltre 6 pezzi al secondo ( con cp1h-x ) +cif modbusil valore del peso non fa in tempo ad abbasarsi e lo rileggo in parte nel contenitore vuoto sucessivomentre con analogica 0-10v collegata su cj1w-ad arrivo a 12 pezzi al secondo ( con cj2m pero' )tragico !!!dove posso velocizzareil convertitore mi da gia il segnale al massimo immediato senza campionature o medienel plc eseguo solo AVG e qualche calcolo per tara poi = peso nettoesiste qualcosa di meglio di AVG Modificato: 27 febbraio 2012 da gianff Link al commento Condividi su altri siti More sharing options...
pcontini Inserita: 27 febbraio 2012 Segnala Share Inserita: 27 febbraio 2012 Prima di tutto un attestato di stima nei confronti di Ctec, profondo conoscitore di omron ed abilissimo nelle spiegazioni tecniche Anch'io ho utilizzato l'easy modbus con il CP1 per comunicare con svariate apparecchiature.di come si compila questo easy modbus. Perchè immagnino che ci sia una fb di richiamo per utilizzarloNon c'è nessuna FB. Come ben illustrato da Ctec basta "compilare" le apposite aree DM con i dati da spedire e gestire il flag di invio. Il plc, sostanzialmente, calcola e accoda il CRC.Ti consiglio di leggere le 3 o 4 paginette del manuale su menzionato, ben "riassunte" e commentate da Ctec.Chiaro che se conosci com'è composto il protocollo modbus ti sarà tutto più chiaro Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati