Vai al contenuto
PLC Forum


Modbus Fp0r-pc


max81

Messaggi consigliati

Ciao a tutti,

dato che vorrei imparare qualcosa di nuovo, volevo cimentarmi con i protocolli di comunicazione, in particolare vorrei far comunicare il mio FP0R-C16CP con un programma scritto in C# tramite Modbus su seriale (RS232), così da creare una sorta di mini SCADA, poi prendendo spunto da dei vecchi post sul forum, mi piacerebbe far comunicare il PLC con un PIC, ma questo è un passo sucessivo che esula dalla sezione in cui posto.

Innanzitutto, ho dato una letta alle specifiche del Modbus sul sito Modbus.org, ed ho visto che ci sono due modalità, il Modbus RTU e ASCII, il pdf dice che è meglio utilizzare RTU perchè è più prestante, e questo è chiaro.

Passando al lato pratico, lato PC con C# non ci sono problemi ho già abbastanza materiale, mentre lato PLC ho qualche perplessità, in particolare ho dato un'occhiata al manuale ed ho visto che ci sono le funzioni: F145F146_MODBUS_COMMAND, F145_WRITE_DATA, F146_READ_DATA; ma non ci sono esempi su come combinarle insieme per fa funzionare il PLC come slave, quindi vorrei chiedere se qualcuno può darmi una dritta.

Grazie

Link al commento
Condividi su altri siti


Buongiorno,

Nel PLC FP0R la porta Com può essere sia Modbus Master sia Modbus Slave, basta selezionare la giusta opzione nel FPWINPRO.

Una volta scaricato il programma, senza l'utilizzo delle citate funzioni, è in modalità Modbus Slave, e quindi da PC con apposito programma puoi tranquilamente interrogare il PLC. Se con il PLC vorresti interrogare dei dispositivi Modbus Slave, allora devi utilizzare le funzioni F145_F146 opportunamente parametrizzate.

Link al commento
Condividi su altri siti

Ciao Resnic,

ti ringrazio per la risposta chiara e veloce, nei prossimi giorni faccio qualche prova.

Nell . online c'è questa tabella per gli indirizzi, ma riferita solo al FP-X, sai dirmi se è valida anche per FP0R, va bene che basta fare qualche prova.

Tabella indirizzi:

Reference number => Device name on FP-X

000001 to 002048 => Y0 to Y127F

002049 to 009999 => R0 to R496E

100001 to 109999 => X0 to X624E

400001 to 432765 => DT0 to DT32764

300001 to 300128 => WL0 to WL127

302001 to 302256 => LD0 to LD256

Grazie

Link al commento
Condividi su altri siti

Io sto facendo anche un sistema con Moduli propri che comunicano attraverso ModBus RTU con il PLC.

Come Master ho una FP0R C14.

guarda la mia soluzione momentanea nelle mie risposte.

http://www.plcforum.it/forums/index.php?showtopic=74219

I miei moduli elettronici sono con un AVR ATMega 168 a 4 MHz. (pero 8kB sono piu che sufficienti)

Link al commento
Condividi su altri siti

Ciao ragazzi,

vi ringrazio per le info, oggi ho provato a fare delle prove e funziona, però ho problemi con l'indirizzamento, in particolare ho utilizzato un simulatore modbus su pc (Modbus Poll), ma utilizzando gli indirizzi dell'h-elp di FPWinPro, ancuni funzionano e altri no.

In pratica, se voglio scrivere una coil, invio il comando (05) con indirizzo da 0 a 15 per i registri Y0 a Y15, poi uso gli indirizzi 2048-2057 per R0-R9, e qui tutto ok, ma quando voglio mettere a 1 R10, invio l'indirizzo 2058 e non funziona, neanche per i registri R sopra al 10, secondo voi cosa sbaglio?

Mentre per i registri DT, tutto funziona.

Grazie

P.S.: Panasonic indica l'indirizzo 2049 per R0, ma nel mio caso va a scrivere su R1.

Link al commento
Condividi su altri siti

sei sicuro di non avere il problema tra 0 e 1 come primo dato?

Nel modbuspoll si puó cambiare velocemente. (lo uso anchio come Master)

FPWIN pro lavora peró sempre da zero, per quanto ne so io.

Fai una prova all inizio e alla fine dell ´array.

Link al commento
Condividi su altri siti

mi viene un´altra idea...

nel ModBusPoll c´é la possibilitá di visionare i telegrammi.

Prova a decodare i telegrammi se gli indirizzi che inposti sono gli stessi

che vengono spediti in linea.

Link al commento
Condividi su altri siti

Ciao Rapido,

grazie per l'aiuto, finalmente ci sono riuscito, infatti ragionavo in decimale, ma invece dovevo ragionare in esadecimale.

R0 indirizzo 2048 (16#0800), mentre il registro con indirizzo 2058 (16#080A) non è R10 ma RA, invece R10 avra indirizzo 2064 (16#0810)

Prossimamente provo a buttare giù un piccolo programma in C# con le librerie NModbus, se poi funziona provo a mettere mani anche ai database con mysql.

Link al commento
Condividi su altri siti

Ciao ragazzi,

sono ancora qui a chiedere lumi.

Finora sono riuscito leggere con un programmino C# via modbus RTU, il valore di un sensore analogico ogni 1 s (intervallo regolabile), poi a salvarlo in un database mysql e infine a plottare i risultati con un grafico tramite una pagina web con script in PHP richiamata dal browser.

Ora volevo chiedervi, anche se forse va al di fuori della sezione in cui posto, come posso fare ad aggiornare il grafico generato dal PHP in maniera automatica ogni volta che si aggiunge un valore nel database, senza dover aggiornare con F5?

Grazie

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