Na een verkeerde rs485 -- rs232 gebruikt te hebben die de bus iedere keer plat gooit heb ik nu met een andere (goedkopere) rs485 -- rs232 -- usb converter weer een poging gedaan om het protocol van mijn atag cv te ontrafelen.
Omdat het niet lukte met start en end karakters ben ik maar eens gaan spelen met de timing van de bus. Het lijkt er op dat Atag een variant van het modbus rtu protocol gebruikt.
Bij een baudrate van 9600 baud is een pauze van 3,5 karakters of meer een nieuw frame.
Een pauze van 1,5 karakter is een nieuwe deel van hetzelfde bericht.
Met een klein programma kon ik de data filteren en krijg ik het volgende:
Alle data van binary omgezet naar hex.
code:
c6 47 48 41
06418210200121f122bd030641
0641821020102101620000000000000000000000000000c25a030641
06418210200121f2b98f030641
0641821020102102000000000000000000000000000000dc86030641
06418210200121f3309e030641
0641821010012109178a03068234200921034b3e45fe7f10284ae07a0341
06418210200121f48fea030641
0641821010012109178a03068235200921041070f8df05870300477b0341
06418210200121f506fb030641
0641821010012109178a03068236200921051e005b125c124e043b8e0341
06418210200121f69dc9030641
0641821010012109178a03068237200921064cff400206ffe618b3790341
06418210200121f714d8030641
0641821010012109178a0306823820092107c8c8551444141f06cd490341
06418210200121f8e320030641
0641821010012109178a0306823920092108000000000000000066fa03fc82
60200ed0454b3e7ffe1fff184a0600000070aa3c03fc82
60200ed100000000b2020000000000000000f90b03fc82
60200ed200000080ee020000000000000000001b0341
06418210200121f122bd030642 c3 44 c5
Dit herhaalt zich constant. Ik heb hier nog geen verandering in gezien.
De spaties geven de 1,5 karakter pauze aan.
Ik weet niet zeker of mij start en end goed zijn maar dit leek mij te werken.
Vervolgens ben ik de data gaan analyseren.
Uit de eerste regel heb ik geen zinnige info kunnen halen.
c6 47 48 41
dan de 2e regel
code:
064182 10200121f1 22bd 030641
start data crc end
de crc wordt berekend over de data. Het algoritme dat gebruikt wordt is CRC-CCITT (Kermit)
dan de 3e regel
code:
064182 1020102101 620000000000000000000000000000 c25a 030641
start data data crc end
Uit de data van regel 2 en 3 haal ik het volgende
10200121 F1 = Geef Data F1
10201021 01 = Dit is data 01
en vervolgens de data.
Regels 4 en 5 zijn nagenoeg hetzelfde maar nu met F2 en 02
Dus:
10200121 F2 = Geef Data F1
10201021 02 = Dit is data 02
en vervolgens de data.
Regel 6 lijkt op regel 4 en 2 maar nu met F3
De respons is echter anders
Regel 7 gaat als volgt:
code:
064182 1010012109 178a 030682 35200921041870f8df06eb0300 d8d3 0341
start data crc end+start data crc end
Het begin is hetzelfde alleen eindigt dit niet met 030641 maar met 030682 en vervolgens begint er een tweede data gedeelte met een crc en een einde.
Het lijkt er op dat 41 een eind aangeeft en 82 een start of vervolg.
Ook dit herhaalt zich een aantal keer.
Het eerste data gedeelte 1010012109 lijkt op de vorige gedeeltes maar nu met 09 als laatste code.
bij het tweede data gedeelte kunnen we ook weer een patroon herkennen.
3420092103 is het eerst gedeelte. 04 geeft hier de respons op de F4 van de vorige regel. Daarna komt de werkelijk parameter data.
Dit patroon herhaalt zich een aantal keer.
F3 met respons 03
F4 met respons 04
F5 met respons 05
F5 met respons 06
F7 met respons 07
F8 met respons 08
Dus 8 datablokken met 8 bytes data.
Dan komt er een totaal ander patroon
code:
60200ed0454b3e7ffe23ff184a0600000070 2874 03fc82
data crc end
Dit is dus een heel blok data met een crc en een ander soort einde.
Het eerste gedeelte is altijd hetzelfde 60200e
Dan volgt d0 en daarna volgt de eigenlijke data.
De volgende regel is hetzelfde maar met d1.
De daaropvolgende regel is ook hetzelfde maar nu met d2 en als einde 0341
De laatste regels zijn dan d0, d1 en d2.
De allerlaatste regel is:
code:
064182 10200121f1 22bd 030642 c3 44 c5
start data crc eind code ???
Nogmaals de code maar nu met spaties om het patroon duidelijk te zien.
code:
c6 47 48 41
064182 10200121f1 22bd 030641
064182 1020102101620000000000000000000000000000 c25a 030641
064182 10200121f2 b98f 030641
064182 1020102102000000000000000000000000000000 dc86 030641
064182 10200121f3 309e 030641
064182 1010012109 178a 030682 3420092103 4b3e45fe7f10284a e07a 0341
064182 10200121f4 8fea 030641
064182 1010012109 178a 030682 3520092104 1070f8df05870300 477b 0341
064182 10200121f5 06fb 030641
064182 1010012109 178a 030682 3620092105 1e005b125c124e04 3b8e 0341
064182 10200121f6 9dc9 030641
064182 1010012109 178a 030682 3720092106 4cff400206ffe618 b379 0341
064182 10200121f7 14d8 030641
064182 1010012109 178a 030682 3820092107 c8c8551444141f06 cd49 0341
064182 10200121f8 e320 030641
064182 1010012109 178a 030682 3920092108 0000000000000000 66fa 03fc82
60200ed0454b3e7ffe1fff184a0600000070 aa3c 03fc82
60200ed100000000b2020000000000000000 f90b 03fc82
60200ed200000080ee020000000000000000 001b 0341
064182 10200121f1 22bd 030642 c3 44 c5
Eind codes:
41 eind
42 einde met extra codes
82 er komt meer data
Uit het vorige kun je de volgende data halen:
code:
01 62 00 00 00 00 00 00 00 00 00 00 00 00 00 00
02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
03 4b 3e 45 fe 7f 10 28 4a
04 10 70 f8 df 05 87 03 00
05 1e 00 5b 12 5c 12 4e 04
06 4c ff 40 02 06 ff e6 18
07 c8 c8 55 14 44 14 1f 06
08 00 00 00 00 00 00 00 00
d0 45 4b 3e 7f fe 23 ff 18 4a 06 00 00 00 70
d1 00 00 00 00 b2 02 00 00 00 00 00 00 00 00
d2 00 00 00 80 ee 02 00 00 00 00 00 00 00 00
De volgende info heb ik nu gevonden:
Als je de hex waarden omzet naar decimaal kun je een en ander vinden.
code 03-0 = Aanvoer Tmp
code 03-3 = Buiten Tmp
code 03-7 = Toestel Tmp
code 06-7 = Water Druk (Delen door 10)
code 07-6 = Modulatie
Verder nog het volgende:
d0-1 = 03-2
d0-1 = 03-0
d0-2 = 03-1
d0-5 = 07-6
d0-7 = 06-7
Dus de D codes komen ook in de andere table voor. Volgens mij is dat een soort feedback systeem.
Tot zover mijn protocol. Zal binnenkort de php sourcecode plaatsen als deze wat leesbaarder is.
Hoop dat iemand hier iets aan heeft.
Michael