EibScout

SCS Ticino MyHome

LOG di esempio - analisi rete domotica SCS Ticino Myhome

 

Piccolo esempio di LOG.

Accensione e spegnimento luci

EIB log start

>M
Send bus monitor request to TPUART05>
MONITOR MODE-
>
r(A8)
: data : A8 26 24 01 A4 FF FA
r(A8)
: data : A8 37 92 01 B3 FF
r(A8)
: data : A8 37 92 01 B3 FF
r(A8)
: data : A8 37 92 01 B3 FF
r(A8)
: data : A8 26 24 00 A4 FF FA
r(A8)
: data : A8 37 92 00 B3 FF
r(A8)
: data : A8 37 92 00 B3 FF
r(A8)
: data : A8 37 92 00 B3 FF

 

Qui le cose si fanno complicate: Intanto i dati loggati NON hanno nulla a che fare con lo standard Konnex.

Ogni comando genera uno stream di 7 bytes - il quarto byte sembra valere 0x01 per il comando "accendi" e 0x00 per il comando "spegni". Ogni stream di comando è seguito da 3 stream identici tra loro di 6 bytes ciascuno (stream di stato?) - non si sa se questi stream siano generati dallìinterruttore o dall'attuatore.

A complicare le cose c'è il fatto che in modalità "monitor" i dati si possono ricevere ma non inviare...

Sto ora cercando di analizzare gli stream in modalità "analogica" ma non trovo corrispondenza con quanto ricevuto in modalità "monitor". 

Il problema è che in modalità analogica i dati o meglio gli impulsi vengono rappresentati in uscita tal quali che in entrata (bus) solamente rovesciati di segno, ma non leggibili direttamente con protocollo rs232. Ho evoluto il firmware per analizzarli e questo è ciò che vedo:

____^__^__^__^_____^_____^_________^__^_____^__^________^__^______^__^__^__^__^__^__^__^__^____

Timing in uSec
HHH LLL 
35 69 
32 71 
32 71 
31 173
33 173
32 310

eccetera

  Non è uno stream rs232. Gli impulsi alti durano sempre (circa) 35 microsecondi - le pause sono sempre multiple di 35 microsecondi - le pause più corte sono di 70 microsecondi.

Ogni bit sembra essere rappresentato da 3 tempi di 35 microsecondi l'uno (105 microsecondi cioè 9600 baud) - i  bit a zero (o uno?) hanno il primo tempo ALTO e gli altri 2 tempi BASSO - i bit a uno (o zero) hanno tutti e 3 i tempi BASSO. Ogni byte inizia con un bit di start seguito da 8 bit di dati - non c'è bit di parità.

Con questa interpretazione il bit di start è (stranamente) uno 0 ma sono propenso a credere a questa interpretazione perchè il primo byte mi viene interpretato 0xA8 proprio come vedo in modalità monitor - gli altri non corrispondono. Se l'interpretazione fosse rovesciata sarebbe 0x57 - non che abbia grande importanza, l'importante è mantenere poi la medesima logica in scrittura.

 

                     8                     A                                 2                    3                                  0                    0 
       s    0    0    0    1    0    1    0    1          s    0    1    0    0    1    1   0    0           s    0    0    0    0    0    0    0    0 
____^__^__^__^_____^_____^_________^__^_____^__^________^__^______^__^__^__^__^__^__^__^__^____

  

Purtroppo la lettura RS232 (e la scrittura) non soddisfano queste modalità - per andare avanti devo scrivere delle routines (assembler) di lettura e scrittura - tra l'altro il PIN del processore che utilizzo per la lettura non prevede neppure l'interrupt e quindi l'interfaccia definitiva va modificata...

Peraltro anche utilizzare un integrato complesso e costoso come il Siemens TPUART è uno spreco visto che lo utilizziamo in SCS solo come transceiver di linea...

 


 

28/12/2013 - NEWS:

Ho modificato il firmware aggiungendo delle routines assembler che leggono e scrivono con la logica di cui sopra. Sono routines "preemptive" provvisorie giusto per analizzare gli stream. Dopo qualche test ho impostato il timeout di stream a circa 400 uSecondi. Questo è ciò che vedo accendendo una luce:

Buf[0] l:07 p:0000 A8 33 00 12 00 21 A3
Buf[1] l:01 p:0354 A5
Buf[2] l:07 p:3417 A8 B8 33 12 00 99 A3
Buf[3] l:07 p:0D0C A8 B8 33 12 00 99 A3
Buf[4] l:07 p:0D0C A8 B8 33 12 00 99 A3

Spengo la luce:

Buf[0] l:07 p:0000 A8 33 00 12 01 20 A3
Buf[1] l:01 p:034B A5
Buf[2] l:07 p:420A A8 B8 33 12 01 98 A3
Buf[3] l:07 p:0D0C A8 B8 33 12 01 98 A3
Buf[4] l:07 p:0D0C A8 B8 33 12 01 98 A3

Intanto necessita una spiegazione di ciò che vedete:

Buf[x] numero del buffer di ricezione (fino al timeout)

l:xx numero di bytes ricevuti

p:xxxx microsecondi di attesa (in esadecimale)

seguono i bytes dei dati in esadecimale.

 

Analisi: ogni stream è composto di 7 bytes, inizia sempre con 0xA8 e termina sempre con 0xA3. Allo stream di comando (primo buffer) segue sempre, con un ritardo di circa 800-900 uSecondi il carattere 0xA5 (quindi un acknowledgement).

Seguono 3 stream identici probabilmente generati dal dispositivo acceso/spento che ne indicano lo stato - infatti se faccio "scrivere" al dispositivo solo il primo buffer (con il comando Z) effettivamente la luce si accende !!! Purtroppo la risposta NON è stabile...

Hacked ! (circa)

Quindi il formato del primo buffer sembra essere (confermato dall'analisi di numerosi altri casi) il seguente: 

Il secondo buffer è formato solo dal carattere 0xA5 (ack) - i buffer terzo, quarto e quinto sono identici - il formato sembra essere il seguente:

Non mi resta che scrivere le routines definitive - devono essere:

- Scritte in assembler

- Usare gli interrupt per consentire al processore altre attività

- Gestire le possibilità di collisione e di reinvio

 

- Ultime novità

Ho scritto le routines interrupt in assembler - funzionano e sono molto più efficienti.

Purtroppo la risposta degli attuatori è ancora incerta (ora va, ora no). Per capire bene il giro devo modificare l'hardware: ho intenzione di aggiungere un piccolo trasformatore in serie alla linea, interposto tra il comando che voglio loggare e l'attuatore, in modo che analizzando gli impulsi sul secondario possa capire chi trasmette e chi risponde cosa. 



20/02/2014

Ancora non ci siamo...

Ho aggiunto un'interfaccia di corrente per verificare le direzioni dei segnali. Confermo che il primo stream viene inviato dal pulsante:

A8 33 00 12 00 21 A3

L'attuatore risponde con un byte di acknowledge:

A5

Poi risponde con tre stringhe identiche di stato (luce accesa) che fanno accendere i led negli interruttori:

A8 B8 33 12 01 98 A3

Purtroppo però se i medesimi comandi li invio io, il rele a volte scatta e a volte no.

Ho verificato e adattato esattamente i tempi di pausa ma ancora non ci siamo. A questo punto il dubbio è sui livelli di tensione degli impulsi (che i livelli scs siano più alti o più bassi di quelli eib). 

Il mio oscilloscopio è troppo ingombrante da trasportare - ora mi progetto una interfaccina che mi faccia da mini-oscilloscopio. Userò il dspic33FJ128GP802 che conosco e che ha un ADC interno che arriva fino a 500 Ksps.

Vedremo chi la vince...

 

 24/02/2014 - NEWS:

Costruito e programmato il mini-analizzatore con ADC - non è precisissimo ma per quel che mi serve basta così - ecco il confronto tra gli impulsi "veri" Ticino e quelli generati da me:

TICINO:
Adc : 521 = 29V : 17,97 div/volt
ADCmax: 549 = 30,55V ADCmin: 449 = 24,99V
-------------------------------------------------------------------------------------------------------------------------------------
54..............................................................................................XXXXXXXXXXXXXXXXXXXXXXX.XXX.XX..XX......
53........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.......................XX.......................X...X..XX..X.....
52......................XX...................................................................X..........................................
51......................................................................................................................................
50.....................X...............................................X....................X...........................................
49......................................................................................................................................
48......................................................................................................................................
47....................X.................................................X...............................................................
46.......................................................................XX..XX..XX.XXXXXXXX............................................
45.XXXX.XXXXXXXXXXXXXX.....................................................XX..XX..X....................................................
44.....X...30uS........6uS..............................................................................................................
43......................................................................................................................................
42......................................................................................................................................
41......................................................................................................................................
40......................................................................................................................................
39......................................................................................................................................
38......................................................................................................................................
37......................................................................................................................................
36......................................................................................................................................
35......................................................................................................................................

 

EIB:
Adc : 521 = 29V : 17,97 div/volt
ADCmax: 565 = 31,44V ADCmin: 420 = 23,37V
-------------------------------------------------------------------------------------------------------------------------------------
56......................................................................................................................................
55.....................................................................................................XXXXXXXXXXXXXXXXXXXXXXXXXX.X.....
54............................X.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXX.XX.............................XX..........................X......
53...........................X.X.................................X...X..X...............................................................
52..................................................................................................X...................................
51..........................X............................................X..............................................................
50......................................................................................................................................
49.........................X.......................................................................X....................................
48......................................................................................................................................
47........................................................................X.......................X.....................................
46........................X.............................................................................................................
45......................................................................................................................................
44.........................................................................X............................................................
43.X........................................................................X.XX..XX.XXXXXXXXXXXXX......................................
42..XXXXXXXXXXXXXXXXXXXXXX...................................................X..XX..X...................................................
41.........39uS............6uS.............................start 2uS late...............................................................
40......................................................................................................................................
39......................................................................................................................................
38......................................................................................................................................
37......................................................................................................................................
36......................................................................................................................................

 

Appaiono evidenti 2 differenze: una sul "timing" dove la mia interfaccia genera impulsi un pelo più lunghi (9uS) e l'altra sulla tensione, dove il Ticino genera degli impulsi abbassando la tensione a 24,99Volt, la mia interfaccia invece abbassa la tensione a 23,37 Volt. Le misure non sono precisissime ma quel che vale è il confronto.

Ora, sul timing avevo già fatto vari tentativi con esito negativo e quindi agisco sulle tensioni, Faccio un calcolo approssimativo di quale sia in ohm la resistenza interna apparente della rete, sapendo che la resistenza di carico del mio dispositivo è di 68ohm:

I = V2/R = 23,37/68ohm=0,344A          Rx=Vd/I=(29-23,37)/0,344=16,37ohm

Ora calcolo quanto dovrebbe essere la mia resistenza per simulare esattamente Ticino:

I=Vd/Rx =(29-24,99)/16,37=0,245A     Ry=V2/I=24,99/0,245=102ohm

Primo tentativo veloce: sostituisco la resistenza di carico da 68ohm con una da 120ohm (nei cassettini ho questa) e riprovo.

CI SIAMO QUASI: prima l'attuatore rispondeva una volta su 10, ora risponde 9 volte su 10 !!!!!!!!!!!!!!!!!

Problemi residui da risolvere in questo ordine:

1- rifare le misurazioni e adeguare tempi e tensioni in modo da raggiungere la risposta del 100%

2- sistemare la routine di scrittura in interrupt perchè non funziona ancora bene (la lettura è ok)

opzionale:

3- accantonare il software di analisi e scrivere quello di "produzione"

4- sostituire il TPUART con qualcosa di meno costoso e più accessibile

 

 26/02/2014 - NEWS:

Funzionante al 100% - resistenza di carico a 110 ohm, abbassato leggermente il timing (-4uS).

Presto pubblicherò il software di analisi - a seguire quello di interfaccia.

Vi terrò informati...

 

Stay tuned !!!