Vai al contenuto
PLC Forum


Send_req E Read_var - Simultaneità e dati errati


birillo1

Messaggi consigliati

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_VAR

Per 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 loro

restituendo dati non attendibili ?? (Le risposte non tengono conto degli indirizzamenti??)

Avete qualche soluzione ?

Modificato: da birillo1
Link al commento
Condividi su altri siti


Stefano Sormanni

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 %m100

ldf %100

s step_2

r step_1

ldn %mw100:x0

and step_1

[read_var(...)]

.......

questo ti consente di eseguire volta volta (e solo a risposta avvenuta) il passagio alla lettura successiva.

buona fortuna

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