Vai al contenuto
PLC Forum


Problema Omron Cp1l-m40d Comunicazione Modbus


Canaia

Messaggi consigliati

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 status

2-read input status

3-read holding register

4-read input registers

5-force single coil

6-set single register

0f-write multiple coils

10-write holding registers

08-comunication test

Per favore sono disperato, potete darmi un consiglio in merito alla risoluzione del problema? grazie in anticipo

Link al commento
Condividi su altri siti


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

ciao,

gli fb di Omron vanno bene io li uso di solito con inverter di tutte le razze

qualche 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 MyOmron

oppure eventualmente fammi sapere che vedo di passartela

saluti da Valvolina

Link al commento
Condividi su altri siti

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

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

ciao,

purtroppo non trovo al momento il manuale da mandarti comunque

ti allego un'immagine di un esempio funzionante

il n_siu va messo = a &31

il serial_port va messo = &1

la porta usata sul cp1m-40 è la numero due

in ditta dovrei avere anche i manuletti relativi (domani li cerco)

prova a dare un'occhiata

saluti da Valvolina

Link al commento
Condividi su altri siti

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

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

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

approfitto di questa discussione

anchio sto cercando di usare easy modbus con CP1H-X + cp1w-cif11 PORTA 1

seguendo i manuali W07E w462

sono riuscito a farla partire con a641.00 ( lampeggia anche senza nulla di collegato)

con la DM 32202 riesco a farla lampeggiare + - veloce

il tutto parte dalla DM 32200

cerco di comunicare con convertitore analogico seneca rs485 modbus

il quale collegandolo a volte mi restituice solo il function code su' D32251

a questo punto

cosa debbo fare per chiedere un dato

da quale DM si comincia a scrivere

come va scritto

queste 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

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 1

I 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 inviato

D32252 #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

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 D100

MOVD D32255 #0012 D100

E quindi avremo #5678 in D100, valore letto dalla nostra periferica

Se 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

benedetto C

e' da quando li ai scritti che mi chiedevo con cx-programmer come debbo scriverli ??

anche con linux ci inpazzivo per queste cose

comunque qualcosa lo vedo

alcuni numeri arrivano

ma 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 direi

i 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' nulla

come 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 NS12

domanda teccnica

lo scopo sarebbe quello di evitare una costosa cj1w-ad

il dubbio in seriale il segnale diventa significativamente piu' lento rispetto al collegamento fisico 2 fili 0-10v

oltre alla remota possibilita di programmare il seneca da ns12

Modificato: da gianff
Link al commento
Condividi su altri siti

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

scusami tu se io non capisco al volo certe cose

poi grazie dei tuoi prezziosi consigli

da manuale direi che si farebbe molta fatica ad arrivarci

manuali da 1000 pagine poi mancano i numeri esenziali

alcune 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 analogica

ma tutto lampeggia ( forse colpa del 48 ) ma anche seneca non spiega chiaramente i codici rispetto alla corrispondenza

nei MOVD prima ho messo ( <> d32254 #0 d100 ) e vedo il valore fermo e si aggiorna

ma qualcosa non quadra

io 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: da gianff
Link al commento
Condividi su altri siti

ho provato con vari codici seneca convertiti 40001 -- 9c41

ma 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: da gianff
Link al commento
Condividi su altri siti

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

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

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 registro

dovrebbe essere uguale anche CP1L 30-40-60

nei post precedenti Ctec ha spiegato chiaramente anche per dei movd da inserire nel programma

-----------------

xCtec

ho fatto delle prove di pesatura al volo

anche a 57600bps

non vado oltre 6 pezzi al secondo ( con cp1h-x ) +cif modbus

il valore del peso non fa in tempo ad abbasarsi e lo rileggo in parte nel contenitore vuoto sucessivo

mentre con analogica 0-10v collegata su cj1w-ad arrivo a 12 pezzi al secondo ( con cj2m pero' )

tragico !!!

dove posso velocizzare

il convertitore mi da gia il segnale al massimo immediato senza campionature o medie

nel plc eseguo solo AVG e qualche calcolo per tara poi = peso netto

esiste qualcosa di meglio di AVG

Modificato: da gianff
Link al commento
Condividi su altri siti

Prima di tutto un attestato di stima nei confronti di Ctec, profondo conoscitore di omron ed abilissimo nelle spiegazioni tecniche :thumb_yello:

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 utilizzarlo

Non 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

  • Livio Orsini locked this discussione
Ospite
Questa discussione è chiusa alle risposte.
×
×
  • Crea nuovo/a...