Vai al contenuto
PLC Forum


Indicizzare Un Indirizzo Slave - Istr. Write_var


jackmax5

Messaggi consigliati

Buongiorno a tutto il forum. Ho un problema:

Attraverso un PLC TSX3722 ed una porta seriale (TSXSCP114) controllo degli alimentatori elettronici con protocollo Modbus. Il numero degli alimentatori può essere superiore anche alle 50 unità.

Ho quindi la necessità di indicizzare l'indirizzo degli slave al fine di evitare di scrivere n istruzioni di Write_var (e di conseguenza Read_var) per ogni alimentatore.

Come posso fare?

Grazie a tutti!

Link al commento
Condividi su altri siti


ti direi a caldo di scrivere le 50 stringhe di comunicazione ed indicizzarne la chiamata attraverso un registro del quale gestirai il valore (da 1 a n)

IF NOT %MW100:X0 AND %MW0 = 1 THEN

READ_VAR{1.1}.........;

%MW0:= 2;

END_IF;

IF NOT %MW100:X0 AND %MW0 = 2 THEN

READ_VAR{1.2}.........;

%MW0:= n;

END_IF;

IF NOT %MW100:X0 AND %MW0 = n THEN

READ_VAR{1.n}.........;

%MW0:= 1;

END_IF;

Link al commento
Condividi su altri siti

Grazie Diego... ma così diventa davvero lunghissimo... anche perchè devo scrivere 4 registri per ogni alimentatore ed andarne a leggere almeno altri 2 (sempre per alimentatore!)...

Ho visto che c'è il modo di indicizzare l'indirizzo... Al posto di ADR#0.1.1 ad esempio inserire %MW10:6

il fatto è che mi richiede quindi di settare 6 word... ma non capisco che valore devo assegnare.

Link al commento
Condividi su altri siti

Ipotizzando rack 1, modulo 3, canale 0, indirizzo 4

%mw0 = 16#0600 (valore di sistema)

%mw1 = 16#FE00 (valore di sistema)

%mw2 = 16#0301 (slot, rack)

%mw3 = 16#0400 (slave, canale)

%mw4 = 16#0000

%mw5 = 16#0000

Fai sempre una verifica prima di prendere quello che dico per oro colato...

scrivere 4 registri per ogni alimentatore ed andarne a leggere almeno altri 2

quindi le letture scritture sono tutte uguali... ok. Non ne beneficia la lettura ma è anche vero che se l'applicazione sarà quella per sempre...

Link al commento
Condividi su altri siti

Grazie Diego! Funziona perfettamente!

Per ora non ho altri dubbi... speriamo non me ne sorgano durante la stesura del sw.

Grazie ancora, Saluti.

Link al commento
Condividi su altri siti

Credo che se devi cambiare rete x-way nel mio esempio la word è la %mw1

%mw1 = 16#FE00 (sarebbe SYS)

%mw1 = 16#0201 (sarebbe rete.network {1.2})

Link al commento
Condividi su altri siti

Rinnovo la discussione perchè ho un'altra domanda.

Nel rapporto di comunicazione (le 4 word di rapporto dell'istruzione) quale bit mi va ad 1 se riscontra un errore? Ad esempio impossibilità di comunicare con l'apparecchio (cavo spezzato o alimentatore guasto)?

So che il bit X0 della 1° word mi indica se la porta è attiva o inattiva.

So che sulla 3° word posso impostare il tempo di time-out.

Mi mancano le altre.

Non trovo da nessuna parte e su nessun manuale una sorta di tabella che mi indichi il significato di queste 4 word!!!

Grazie e tutti, Saluti.

Link al commento
Condividi su altri siti

nessun manuale

l'h elp dice tutto

hai 4 word di report = w0-1-2-3

W0 = bit 0 attività (1 comunicazione in corso)

W1 = codice di errore

W2 = valore time-out (x100ms)

W3 = lunghezza della richiesta (in bytes)

I codici di errore (in esadecimale) sono diversi ed hanno ovviamente di versi significati (cerca sull'H elp). In generale se W1 = 0 è tutto ok. Se W1 <> 0 (diversa da zero) qualcosa non è andato.

Link al commento
Condividi su altri siti

grazie ancora Diego! Sempre molto gentile.

Effettivamente non so se sull'. ci sia scritto... semplicemente perchè con Windows7 l'. del PL7 non viene visualizzato...

Saluti

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