Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Indicizzare Un Indirizzo Slave - Istr. Write_var


Messaggi consigliati

Inserito:

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!


Inserita:

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;

Inserita:

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.

Inserita:

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

Inserita:

Grazie Diego! Funziona perfettamente!

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

Grazie ancora, Saluti.

Inserita:

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})

Inserita:

Non ho quella necessità... ma grazie comunque delle preziose info!

Inserita:

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.

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

Inserita:

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

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