birillo1 Posted November 29, 2006 Report Posted November 29, 2006 (edited) Ciao a tutti.Su un impianto stavamo effettuando mediante una cpu premium delle letture simultanee su 2 slave modbus distinti (connessi sulla porta pcmcia) mediante due istruzioni SEND_REQ e tutto funzionava corettamente.In seguito è stata aggiunta una richiesta modbus READ_VAR su altro slave modbus connesso in ethernet dietro ad un convertitore seriale ethernet/modbus.Gli indirizzamenti nelle istruzioni sono corretti però succede quanto segue:I dati letti con SEND_REQ vengono "sporcati" (completamente sballati) durante l'effettuazione del READ-VAR, mentre i dati letti con READ_VAR sono corretti.(Le word su cui vengono scritti i valori non sono acavallate e non ci sono errori di questo tipo)In seguito la situazione è peggiorata ed l'istruzione READ-VAR ha smesso di funzionare restitutendo come codice errore 000b (risorse insufficienti)Allo stesso modo hanno smesso di funzionare correttamente le due istruzioni SEND_REQ (dati completamente errati e privi di senso) anche cancellando l'istruzione READ_VARPer risolvere questo e ripristinare almeno la configurazione iniziale sono state condizionate (una con l'altra e viceversa - mediante il bit di attività) le due istruzioni SEND_REQ che hanno ripreso a funzionare correttamente. (prima erano condizionate solo con il bit di attività rispettivo)Mi chiedo:Le istruzioni di comunicazione possono essere lanciate simultaneamente ??Su un documento telemecanique risulterebbe di si....E' possibile che istruzioni diverse di comunicazione modbus indirizzate correttamente si influenzino tra di lororestituendo dati non attendibili ?? (Le risposte non tengono conto degli indirizzamenti??)Avete qualche soluzione ? Edited November 29, 2006 by birillo1
Stefano Sormanni Posted November 30, 2006 Report Posted November 30, 2006 siccome io ci ho sbattuto il naso su questi read_var e write_var ti consiglio vivamente di condizionare la lettura scrittura su il bit di attività, inoltre crea dei "token" o "step" dove ciclicamente fai la lettura di ciò che ti interessa.io in linguaggio IL faccio:ld %mw100:x0 (bit di attività)st %m100ldf %100s step_2r step_1ldn %mw100:x0and step_1[read_var(...)].......questo ti consente di eseguire volta volta (e solo a risposta avvenuta) il passagio alla lettura successiva.buona fortuna
Claudio Monti Posted November 30, 2006 Report Posted November 30, 2006 Anch'io ti consiglio di lanciare un'istruzione alla volta testando il bit di attivita' e le risposte che ti vengono restituite...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now