Suppalele Inserito: 26 agosto 2009 Segnala Share Inserito: 26 agosto 2009 Saluti a tutti.Dal M340 devo caricare alcuni valori da una decina di devices modbus (7 termoregolatori, 2 inverter altivar, 1 zelio).Premettendo che sto ancora impostando il programma e non sono ancora davanti all'impianto, e che e' la prima volta che lavoro in modbus, pensavo di fare cosi':1. (strettamente legato allo Unity) uso la funzione ADDR per creare l'indirizzo e mandarla in pasto a READ_VAR (per leggere)2. analizzare i dati raccolti. Ora mi ponevo il problema: ogni quanto fare il polling? Ossia, la richiesta di variabili (circa 6 word) implica un certo "tempo" di attesa per ciascun apparecchio, che moltiplicato per 10 puo' diventare un tempo elevato (rispetto ai tempo di ciclo di un plc).Fortunatamente non si tratta di valori fondamentali. Come posso gestire? Ossia, lancio ogni 5 secondi una SR in cui interrogo tutti gli slave, oppure lancio ogni 2 secondi una SR per ogni slave?Grazie a chi vorra' darmi una mano..--Lele Link al commento Condividi su altri siti More sharing options...
RDA Inserita: 26 agosto 2009 Segnala Share Inserita: 26 agosto 2009 La velocità con cui pui chiedere i dati agli slaves dipende oltre che dalla quantità anche dalla velocita di comunucazione degli slaves che ovviamente devono essere concordanti.Ti consiglio di fare tanti "Rung" per quanti slaves devi interrogare, intebbloccare la richiesta read var con i bit di diagnostica comunicazione, fare uno sroller delle richieste read var generate da un timer per avere un clok che andrai a calibrare per la massima velocità che puoi ottenere, conviene che parti da richieste con cadenza 1 s per poi accorciarle.Fare tanti rung diventa semplice e comodo qual'ora sui vari slave chiederai redistri con allocazione diversa e con quantità diverse.Saluti. Link al commento Condividi su altri siti More sharing options...
rddiego Inserita: 26 agosto 2009 Segnala Share Inserita: 26 agosto 2009 suppongo che tu non disponga di una NOE per utilizzare il servizio I/O Scanning.Suppongo altresì che tu sia collegato in seriale RS485 e non in Ethernet.lancio ogni 5 secondi una SR ....penso che 5 o 2 secondi sia un po' troppo elevato.Piuttosto crea una tua routine per cui ad ogni comunicazione terminata passi allo slave successivo. In condizioni medie dovresti leggere tutti gli slave in un secondo o poco più tenuto conto che mediamente uno slave dovrebbe riuscire a rispondere entro i 100ms.Questa gestione richiede un'indicizzazione degli indirizzi (che tu programerai con la funzione ADDR), l'indicizzazione di tutti i parametri non comuni ai 10 slave (indirizzo dei registri da leggere, ecc.). In questo modo avrai una sola istruzione READ_VAR (e non 10 SR differenti) che lancerà una alla volta consecutivamente e ciclicamente tutte le letture.per inciso il numero di registri da leggere può anche essere trascurato visto che oltre ad essere esiguo, la tua applicazione non richiede velocità particolari come hai indicato.E' un'idea, non è detto che sia nè l'unica nè la migliore... Link al commento Condividi su altri siti More sharing options...
Suppalele Inserita: 26 agosto 2009 Autore Segnala Share Inserita: 26 agosto 2009 Grazie per le risposte.Ecco altre domande e dubbi..Per RDDIEGO:Ho il modulo NOE 0100 per la comunicazione con un pannello. Il modbus e' invece su 34 2010, quindi in seriale.Sto provando a mettere giu' in LD la bozza di comunicazione. Ho un dubbio: dovendo comunicare con termoregolatori ERO, dove vado a mettere il codice di lettura (dovrebbe essere lo 03) dei registri?Grazie per la disponibilita'.--Lele Link al commento Condividi su altri siti More sharing options...
rddiego Inserita: 26 agosto 2009 Segnala Share Inserita: 26 agosto 2009 34 2010quindi hai anche una rete CanOpen???Ho il modulo NOE 0100Allora ti consiglierei di sfruttare il servizio I/O Scanning della scheda col quale eviterai di scrivere alcuna riga di programma.Per questo però dovrai mettere di mezzo un Gateway Modbus Ethernet/RS485 e se già non l'hai anche uno switch o hub a cui collegare NOE, Gateway e pannello.Volendo potresti collegare in seriale il pannello ed il Gateway direttamente alla NOE eliminando lo switch o hub.Sto provando a mettere giu' in LD la bozza di comunicazionemagari molti non saran d'accordo non so ma per questo tipo di programmazioni (comunicazioni) io eviterei il ladder ed userei ST, ma è uguale non ti preoccupare.dove vado a mettere il codice di lettura (dovrebbe essere lo 03) dei registri?il codice è certamente 03 ed è rappresentato dalla stringa '%MW' del parametro OBJVolevo fare una nota poichè per M340 per gli indirizzi credo tu debba usare la funzione ADDM e non ADDRPer la gestione delle letture senza usare timer esterni che complicano la faccenda a mio avviso usa semplicemente il bit di attività della comunicazione che è il bit 0 della prima word delle 4 della tabella di gestione. Quando è =0 puoi lanciare una lettura, finchè è =1 attendi che termini la comunicazione.Per finire se non conosci I/O Scanning che in ogni caso ti raccomando guarda nell' Hel p di Unity e ti farai un'idea... Link al commento Condividi su altri siti More sharing options...
Suppalele Inserita: 26 agosto 2009 Autore Segnala Share Inserita: 26 agosto 2009 quindi hai anche una rete CanOpen???No. Onestamente non ricordo perche' ho scelto questa CPU (sapevo dall'inizio di dover usare solo modbus per via dei termoregolatori della ERO)... Per questo però dovrai mettere di mezzo un Gateway Modbus Ethernet/RS485 e se già non l'hai anche uno switch o hub a cui collegare NOE, Gateway e pannello.Volendo potresti collegare in seriale il pannello ed il Gateway direttamente alla NOE eliminando lo switch o hub.Lo switch (della Schneider, non ricordo quale, comunque a 4 porte) l'ho gia' previsto. Per il gateway ethernet/RS485, non c'e' modo.. Il quadro e' gia' fatto e non c'e' tempo e modo di integrarlo (sabato sono in cantiere!)... comunque grazie per il consiglio, lo terro' presente per le prossime realizzazioni!l codice è certamente 03 ed è rappresentato dalla stringa '%MW' del parametro OBJQuindi, basta mettere %MW al parametro OBJ e gia' sottintende la lettura di registri... bene!Leggendo qua e la' (qua=PLCForum, la'=Manuali Modicon) ho trovato che non si possono leggere i singoli coil con il M340 dai dispositivi modbus. Ne sai qualcosa?Grazie mille per il consiglio della tabella di gestione!PsNon riesco pero' a trovare la corrispondenza tra i codici modbus di codifica delle istruzioni con i valori da mettere in OBJ (ad esempio il precedente '%MW'= codice 03). Non so se mi possono servire, pero'..PPSGrazie rrdiego della cortesia e disponibilita'! Link al commento Condividi su altri siti More sharing options...
rddiego Inserita: 26 agosto 2009 Segnala Share Inserita: 26 agosto 2009 Leggendo qua e la'guarda, leggiti l'hel p di Unity che è un'ottima guida per tutto quello che c'è da sapere sul plc in questione.ho trovato che non si possono leggere i singoli coil con il M340 dai dispositivi modbusti pregherei di indicarmi esattamente dove è detto questo. La funzione read_var per M340 prevede la lettura di bit interni con codice 01 per un massimo di 2000 bit consecutivi in un'unica letturaNon riesco pero' a trovare la corrispondenza tra i codici modbus di codifica delle istruzioni con i valori da mettere in OBJper M340 sono solo due con l'istruzione read_var:fc 01 = '%M'fc 03 = '%MW'con write_var;fc 05 / 15 = '%M'fc 06 / 16 = '%MW' Link al commento Condividi su altri siti More sharing options...
fchiavaroli Inserita: 8 dicembre 2009 Segnala Share Inserita: 8 dicembre 2009 Buonasera a tutti,mi potete spiegare, gentilmente, come faccio a leggere i dati di un PM9C con un M340 in seriale?Non sono pratico di comunicazione MODBUS ed è un pò che ci stò sbattendo la testa...Grazie Link al commento Condividi su altri siti More sharing options...
rddiego Inserita: 9 dicembre 2009 Segnala Share Inserita: 9 dicembre 2009 è un pò che ci stò sbattendo la testabene, allora partiamo da quello che hai fatto, dove ti sei fermato?- verificato il collegamento a due fili (RS485) ?- impostato i parametri di comunicazione del PM ?- impostato gli stessi identici parametri sulla porta del PLC ?Per testare il collegamento puoi utilizzare un simulatore modbus master come ModScan32 o altri. Le funzioni che userai in Unity sono READ_VAR (letture di registri) WRITE_VAR (scritture di registri)Ricorda che le misure nel PM sono codificate a 32 bit, quindi per ciascuna misura devi sempre leggere 2 registri (è un'ottima regola, valida sempre, leggere un numero di registri pari in modbus)se vuoi per esempio leggere dal PM con indirizzo slave 1 la tensione concatenata U12 dovrai puntare all'indirizzo 1008 per 2 registriindirizzo := ADDM (IN := '0.0.0.1');READ_VAR (ADR := indirizzo,OBJ := '%MW',NUM := 1008,NB := 2,GEST := rapporto,RECP => buffer); 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