Slimme meter - CRC16 berekening -P1 - welke?

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • castertje
  • Registratie: April 2011
  • Laatst online: 05-05 17:44
In de telegrammen die ik uitlees uit de P1 poort van de slimme meter zit een CRC16 checksum.
Het lukt mij echter niet om die zelf uit te rekenen. Dit is nodig om te zien of het telegram geldig is.

De DSMR spec schrijft op
http://www.netbeheerneder...el=Documenten&pageindex=1

CRC is a CRC16 value calculated over the preceding characters in the data message (from
“/” to “!” using the polynomial: x16+x15+x2+1). CRC16 uses no XOR in, no XOR out and is
computed with least significant bit first. The value is represented as 4 hexadecimal charac-
ters (MSB first).

- is nu ¨/¨ het eerste teken waar begonnen moeten worden?
- is ¨ |¨ het laatste teken of juist het teken ervoor waar gestopt moet worden?
- worden alle tekens, ook CR en LF mee genomen ?
- welk van de tig CRC16 algoritmes wordt bebruikt ?

Ik gebruikt onderstaand:

#define BYTE unsigned char
#define USHORT unsigned short

USHORT crc16(const BYTE *data_p, int length)
{
int pos;
int i;
USHORT crc = 0x0;

for (pos = 0; pos < length; pos++)
{
crc ^= (USHORT) data_p[pos];

for (i = 0; i < 8; i++)
{
if ((crc & 0x0001) == 0x0001)
crc = (crc >> 1) ^ 0xA001;
else
crc >>= 1;
}
}

return crc;
}


...

Alle reacties


Acties:
  • 0 Henk 'm!

  • CodeIT
  • Registratie: Juni 2002
  • Laatst online: 04-06 22:16

CodeIT

Code IT

castertje schreef op zondag 10 juli 2016 @ 11:03:
In de telegrammen die ik uitlees uit de P1 poort van de slimme meter zit een CRC16 checksum.
Het lukt mij echter niet om die zelf uit te rekenen. Dit is nodig om te zien of het telegram geldig is.
Ik heb dit een tijdje geleden gemaakt voor mijn slimme meter uitlezer op basis van een ESP8266. Code is hier te vinden: https://github.com/jantenhove/P1-Meter-ESP8266

Ik ga er van uit dat je meter conformeert aan DSMR 4.x
- is nu ¨/¨ het eerste teken waar begonnen moeten worden?
- is ¨|¨ het laatste teken of juist het teken ervoor waar gestopt moet worden?
- worden alle tekens, ook CR en LF mee genomen?
Inclusief “/” en ¨|¨ en CR LF.
Het algoritme wat gebruikt wordt wordt door je gequote: "polynomial: x16+x15+x2+1". Deze staat ook bekend als: CRC-16-IBM. Wel is deze geinverteerd. Dus 0xA001 gebruiken ipv 0x8005.

Acties:
  • 0 Henk 'm!

  • Paysan9136
  • Registratie: November 2019
  • Laatst online: 19-12-2021
Ik vind jouw crc berekening heel mooi.
Heb je het aan de gang gekregen?
Laat even weten