Vai al contenuto
PLC Forum


I Segreti Dell'hostlink Omron - Ovvero il famigerato comando MB


varg

Messaggi consigliati

Salve a tutti volevo porvi all'attenzione una particolarità del protocollo HOST LINK dell'omron in particolare una serie di

Comandi non documentati.

Premessa:

Ho sempre apprezzato i PLC omron perchè al contrario dei PLC Siemens hanno un protocollo aperto, ovvero senza l'ausilio di

DLL o altro e' possibile comunicare con il PLC questo e' ben documentato nei vari manuali dell'omron, ma e' veramente tutto

ben scritto e documentato ? NO assolutamente NO.

Vi e' un simpatico comando per la Precisione il famigerato MB che non è documentato ho parlato con Omron Italia sanno

dell'esistenza di questo comando, ma Omron Japan non rilascia documentazione neanche a omron italia, allora mi sono deciso di fare un po di considerazioni sulle varie stringhe ed ho cominciato a capire una piccolissima parte ma almeno e' gia qualcosa.

Il tutto e' nato facendo un paio di Considerazioni, dicendo ma cavolo e' possibile che il Syswin durante la connessione al

PLC mi riesca a dire con precisione che tipo di plc ho mentre il comando MM mi da solo una infaritata generale ?? Ecco e'

nato tutto da qui.

Allora le descrizioni dei comandi che vado ad elencare sono state testate su un CPM2A 40CDR non ho la minima idea se vanno su altri tipi ma questo e' da provare.

Fin ora ho trovato 2 Interessantissime Funzioni del comando MB ma ritengo che il comando MB lavorando sulle memorie Grezze

del plc si possa estrapolare Qualsiasi cosa.

Tutti questi comandi sono stati testati e' le risposte sono state tutte elaborate tramite supposizioni.

1. Rilevazione tipo PLC

Invio al PLC:

[at]00MB2D0400013C*

Esempio Risposta:

[at]00MB008F1E0001FF3F631B01FF19FF0000,093043504D322A2D3430432A2A202020202030313

3331362030312E303967*

Ora provate a fare una conversione di tutta la stringa dopo la , in ASCII tranne il CheckSum e teminatore vi ritroverete, una

stringa simile a questa:

0CPM2*-40C** 010316 01.09

I Primi caratteri ignoro purtroppo cosa siano ma di sicuro saranno qualche configurazione, pero nota subito all'occhio questa

fantastica scritta dove il Tipo di PLC e' ben definito e addirittura mi dice che e' un 40 ! per quanto riguarda gli altri 2

parametri di seguito ad occhio possono sembrare l'ora e la data dal PLC ma dopo delle verifiche posso assicurarvi che non

lo sono, magari e' la data di produzione o qualcosa di simile.

e ora veniamo al bello

2. Rilevazione Stato Forzature PLC Canali I/O

Si avete letto bene cè la possibilità di sapere se un I/O e' forzata o no cosa che l'HOST LINK documentato non Permette..

Allora il Comando in questione e' piu articolato e quindi aprite bene le orecchie che si riesce veramente a far scintille !!

Ecco un esempio:

[at]00MB30841400,80088009800A800B800C800D800E800F800080016E*.

Svisceriamo il Comando:

[at]00MB3084 = Non lo so -- Prendetelo per buono Cosi.

1400 = Sono il numero di I/O da leggere specificati in questo comando viene e' concepito in questo modo e' il numero in

byte degli I/O, non preoccupatevi mi spiego meglio.

Allora 14 in Decimale e' = 20 quindi 20 / 2 = 10 in tutto questo comando richiede lo stato di 10 I/O

, = Non lo so -- Presumo sia un separatore del Comando MB infatti e' presente in tutte le sue forme.

8008, 8009, 800A, 800B, 800C, 800D, 800E, 800F, 8000, 8001

Questi fantastici numeri sono gli I/O di cui voglio vedere lo stato sono composti della seguente maniera...

8 = Non lo so (Presumo sia l'area di memoria per gli I/O forse ereditato dal CV1000)

00 = Il numero del canale (Fantastico vero ??? i Chan vanno da 0 a 255 quindi sarà da 00 a FF)

8 = Il numero del Bit del Canale e qua apriamo un'altra parentesi dato che non e' vero che 0 = bit 0 ecc.. ma:

Considerando i 16 BIT per il canale in HEX: 0123456789ABCDEF, viene eseguito la memorizzazione con l'inversione del Byte

con il piu significativo con il meno significativo, quindi la corrispondenza con il valore fisico e' la seguente:

Memoria: 0 1 2 3 4 5 6 7 8 9 A B C D E F

Bit Fisico: 8 9 10 11 12 13 14 15 0 1 2 3 4 5 6 7

Entusiasmante vero ?

Quindi guardando il comando precedente vediamo che eseguo la richiesta di stato dal 0.0 al 0.9 (Totale 10 Bit vedi 1400)

Ora vediamo la risposta del nostro PLC in 4 differenti casi:

Tutti gli ingressi sono bassi e non forzati.

[at]00MB00842800,000000000000000000000000000000000000000000000000000000000000000

000000000000000065*

Ingresso 0.0 Alto a livello elettrico e non per forzatura.

[at]00MB00842800,000100000000000000000000000000000000000000000000000000000000000

000000000000000064*

Ingresso 0.0 Alto a causa di una Forzatura in Set!

[at]00MB00842800,000100010000000000000000000000000000000000000000000000000000000

000000000000000065*

Ingresso 0.0 Basso a causa di una Forzatura in Reset !

[at]00MB00842800,000000010000000000000000000000000000000000000000000000000000000

000000000000000064*

Salta subito all'occhio il Tutto

[at]00MB0084 = Header della risposta presumo il 00 prima del 84 sia l'ok del comando

2800 = Come per il 1400 citato prima rappresenta il numero dei dati in risposta infatti mi fa 40 in decimale

40 / 2 mi fa 20 effettivamente va bene perchè mi da 2 Word di risposta per ogni BIT vediamo in seguito

, = Solito separatore

Poi i dati sono rappresentati nella seguente forma

0000 = Word che mi indica lo stato del bit = 0 Basso , 1 Alto

0000 = Word successiva mi indica lo stato della forzatura = 0 Non forzato, 1 Forzato

Quindi combinando le 2 Word sappiamo se e' forzato e se in forzatura alta o bassa.

Per ora e' tutto ma vediamo se piu avanti tempo permettendo si riesce a sviscerare altro di questo comando MB come lo stato

delle forzature oltre agli I/0 anche del resto.

Saluti

LC (Alias Varg)

Link al commento
Condividi su altri siti


Congratulazioni :clap: per la "pazienza " dedicata a sviscerare i più nascosti segreti del protocollo Hostlink.

Anche a me era parso chiaro che l'ambiente di sviluppo utilizzasse qualche comandino non dettagliato nella manualistica, ma non avevo mai avuto bisogno di utilizzare null'altro che leggere o scrivere dei valori in memoria e difficilmente avrei intrapreso un'operazione tanto interessante quanto dispendiosa in termini di tempo.

Bravo, tienici aggiornati!

Ciao

Link al commento
Condividi su altri siti

Aggiungo altri punti molto interessanti:

3. Rilevazione Stato Forzature PLC Canali HR

4. Rilevazione Stato Forzature PLC TIM/CNT

5. Rilevazione Stato Forzature PLC Ausiliari

6. Rilevazione Stato Forzature PLC Area Link

7. Lettura DM con comando MB a basso livello

...

3. Rilevazione Stato Forzature PLC Canali HR

Esempio:

[at]00MB30841400,98089809980A980B980C980D980E980F980098016E*

Considerazioni:

[at]00MB3084 Come per punto 2

1400 Come per punto 2

, Separatore

9808

980 Offset 0 degli HR quindi andranno per i CPM 2 dato che sono da 0 a 99 vai da 980 a 9E3

8 Bit di puntamento stesso discorso del Punto 2

Risposte sempre come per il punto 2 ovvero 2 Word con Valore e stato forzatura

4. Rilevazione Stato Forzature PLC TIM/CNT

Esempio:

[at]00MB30840400,9400940169*

Considerazioni:

[at]00MB3084 Come per punto 2

0400 Come per punto 2

, Separatore

9400 Offset del del TIM/CNT qua non abbiamo i puntamenti ai Bit quindi va da 9400 per TIM0 al 95FF per il 511

Risposte sempre come per il punto 2 ovvero 2 Word con Valore e stato forzatura

5. Rilevazione Stato Forzature PLC Ausiliari

Esempio:

[at]00MB30841400,9E489E499E4A9E4B9E4C9E4D9E4E9E4F9E409E416E*

Considerazioni:

[at]00MB3084 Come per punto 2

1400 Come per punto 2

, Separatore

9E4 Offset 0 degli Ausiliari quindi andranno per i CPM 2 dato che sono da 0 a 27 vai da 9E4 a 9FF

8 Bit di puntamento stesso discorso del Punto 2

Risposte sempre come per il punto 2 ovvero 2 Word con Valore e stato forzatura

6. Rilevazione Stato Forzature PLC Area Link

Esempio:

[at]00MB30841400,90089009900A900B900C900D900E900F900090016E*

Considerazioni:

[at]00MB3084 Come per punto 2

1400 Come per punto 2

, Separatore

900 Offset 0 degli Area Link quindi andranno per i CPM 2 dato che sono da 0 a 63 vai da 900 a 93F

8 Bit di puntamento stesso discorso del Punto 2

Risposte sempre come per il punto 2 ovvero 2 Word con Valore e stato forzatura

7. Lettura DM con comando MB a basso livello

Alcuni Esempi:

Qua leggo dalla DM 0 per 14 DM

[at]00MB0D0700000C000E3A*

Qua leggo dalla DM 128 per 128 DM

[at]00MB0D0700000D008040*

[at]00MB0D0700000 = Prendetelo come al solito per Buono cosi

C00 = Offset di Start espresso in BYTE quindi per partire dalla DM 10 devo fare

C14 = perche Hex 14 = 20 poi 20/2 = 10 Quindi

Infatti dopo facendo delle letture da 80Hex Blocchi = 128 DM

L'offset cambia ogni volta di 256 = 100Hex

0E = Numero di DM da leggere espresso in HEX

Nota: valgono le stesse regole del protocollo HOST LINK ovvero se la risposta e' lunga viene spezzata in attesa di un CR da

parte dell'HOST

Esempio di Risposta

[at]00MB00841C00,111122223333444455556666777788889999AAAABBBBCCCCDDDDEEEE1D*

Direi che cè Poco da spiegare. Dopo la , ci sono i valori delle DM richiesti.

Altra Nota ho effettuato dei Test per verificare se questa tecnica fosse piu veloce del Protocollo con il Comando RD

e con mia estrema sorpresa ho notato che sembra piu lento, ovviamente liberi di testare il tutto

1 Test:

1000 Letture di 10 Dm alla volta

Comando RD = media di 0.088s a lettura, totale di 85,563s per tutte le 1000 letture

Comando MB = media di 0.099s a lettura, totale di 100,266s per tutte le 1000 letture

2 Test:

1000 letture di 1 dm alla volta

Comando RD = media di 0.046s a lettura, totale di 43,516s per tutte le 1000 letture

comando MB = media di 0.062s a lettura, totale di 58,281s per tutte le 1000 letture

Saluti

LC (Varg)

Link al commento
Condividi su altri siti

  • 3 months later...

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