Alleen 3 regels uit p1 poort

Arduino specifieke Software
Gebruikers-avatar
Berichten: 140
Geregistreerd: 22 Jan 2013, 16:40

Re: Alleen 3 regels uit p1 poort

Berichtdoor zuid » 06 Dec 2019, 19:29

Even als aanvulling op de antwoorden van Koepel.
De slimme meters t/m versie DSMR 4.x geven elke 10 seconden een telegram.

5 PROTOCOL DESCRIPTION The protocol is based on NEN-EN-IEC 62056-21 Mode D. Data transfer is requested with request line and automatically initiated every ten seconds until request line is released.

Vanaf versie DSMR versie 5.0 is dat elke seconde.

6 PROTOCOL DESCRIPTION The protocol is based on NEN-EN-IEC 62056-21 Mode D. Data transfer is requested with request line and automatically initiated every second until request line is released. The information in the P1 telegram must be updated every second.

Informatie via Google te vinden door te zoekem DSMR x.x

Advertisement

Berichten: 239
Geregistreerd: 03 Okt 2015, 13:39

Re: Alleen 3 regels uit p1 poort

Berichtdoor DeDraak » 06 Dec 2019, 20:58

Koepel schreef:Kun je de verbindingen nog eens goed nakijken ?
Zit het op een breadboard ? Die maken soms (vaak) slecht contact.
Kun je de weerstanden eens doormeten of ze de juiste waarde hebben.
Heb je een lange kabel ?
De 115200 baud over een telefoonkabel is niet geschikt voor lange afstanden.

Ik heb 2k2 voor het signaal van de P1 poort. Daar heb jij 4k7, dat zou geen probleem mogen zijn.

Ergens zit er iets verkeerd. Kun je misschien een tweede circuit met ook een eigen kabel naar de P1 poort maken ? Bij voorkeur gesoldeerd zonder breadboard.

Ik begrijp het symbool van de connector niet. Als je daar een probleem met GND hebt, dan kun je ook dit soort problemen krijgen.
Ik heb dit:
1. 5V niet aangesloten
2. RTS verbonden met Arduino 5V
3. GND verbonden met Arduino GND
4. NC niet aangesloten
5. TXD naar inverter
6. GND niet aangesloten
Volgens mij heb jij wat anders. De ene GND is niet hetzelfde als de andere GND. Ik heb begrepen dat de GND op pin 3 bij de meeste meters aanwezig is.


Ik zal er maandag weer mee verder gaan, heb nu een druk weekend. Het zit allemaal op een breadbordje..
De verbindingen zitten goed, de connector loopt onder links naar rechts (1,2,3) en boven ook (4,5,6)

De kabel is 1 meter,

Zoals Zuid aangaf komen deze telegrammen om de 10 seconden binnen!

Gebruikers-avatar
Berichten: 2336
Geregistreerd: 06 Aug 2016, 01:03

Re: Alleen 3 regels uit p1 poort

Berichtdoor Koepel » 06 Dec 2019, 22:36

DeDraak schreef:de connector loopt onder links naar rechts (1,2,3) en boven ook (4,5,6)

Dan heb je hetzelfde als ik. Kun je dat op de pinnetjes van de connector zelf nog even nameten ? Kun je een 100nF op de 5V en GND zetten op het breadboard als ontkoppeling.
Ik weet weinig anders te verzinnen, behalve dan natuurlijk met een logic analyzer of een scoop het signaal meten.

Berichten: 239
Geregistreerd: 03 Okt 2015, 13:39

Re: Alleen 3 regels uit p1 poort

Berichtdoor DeDraak » 09 Dec 2019, 12:47

Vandaag begonnen om alles op een protobordje te solderen, ik had zo’n bordje liggen die je zo op een Mega kunt plaatsen.
Daarna naar een slimme meter gegaan van het type: Landis +Gyr E350 DSMR4.0
Daaruit kwam onderstaand telegram, Die foutmelding blijft komen!
De weerstand heb ik nagemeten en heb het ledje met de voorschakelweerstand even achterwege gelaten.

/XMX5LGBBFFB231189743
1-3:0.2.8(42)
0-0:1.0.0(191209103412W)
0-0:96.1.1(4530303035303031353832333630333134)
1-0:1.8.1(037779.548*kWh)
1-0:2.8.1(000000.000*kWh)
1-0:1.8.2(072884.160*kWh)
1-0:2.8.2(000000.000*kWh)
0-0:96.14.0(0002)
1-0:1.7.0(05.287*kW)
1-0:2.7.0(00.000*kW)
0-0:96.7.21(00035)
0-0:96.7.9(00024)
1-0:99.97.0(10)(0-0:96.7.19)(190814064345S)(0000055605*s)(190812071947S)(0000147540*s)(190810072913S)(0000056200*s)(190809073041S)(0000057330*s)(190808071849S)(0000057150*s)(190807072047S)(0000055850*s)(190806071925S)(0000056100*s)(190805062654S)(0000150650*s)(190803065700S)(0000054000*s)(190802060037S)(0000044490*s)
1-0:32.32.0(00013)
1-0:52.32.0(00008)
1-0:72.32.0(00000)
1-0:32.36.0(00000)
1-0:52.36.0(00000)
1-0:72.36.0(00000)
0-0:96.13.1()
0-0:96.13.0()
1-0:31.7.0(003*A)
1-0:51.7.0(013*A)
1-0:71.7.0(008*A)
1-0:21.7.0(00.662*kW)
1-0:41.7.0(02.827*kW)
1-0:61.7.0(01.798*kW)
1-0:22.7.0(00.000*kW)
1-0:42.7.0(00.000*kW)
1-0:62.7.0(00.000*kW)
0-1:24.1.0(003)
0-1:96.1.0(473030
---------------------------------------------------
Aantal telegrammen: 15
Waarvan foute CRC : 15
Telegram iedere : 10.01 seconden
---------------------------------------------------



Daarna ben ik met dezelfde proto naar een ISKRA MT382-D2A52 geweest en hierbij kreeg ik helemaal geen telegram uit de meter, ook niet na het aanpassen van de baudrate naar 9600….

En de derde meter was een ISKRA AM550 en daarbij lukte het perfect!
Ook de gasmeter kwam mee en had geen foutmelding..
Dus wat zou er aan de hand kunnen zijn?
Het enige verschil in de telegrammen zij de verversingen, bij de een komt hij om de 10 seconden en bij de andere elke seconde.

/ISK5\2M550T-1011
1-3:0.2.8(50)
0-0:1.0.0(191209105748W)
0-0:96.1.1(4530303334303036373936373034353136)
1-0:1.8.1(019626.959*kWh)
1-0:1.8.2(018340.476*kWh)
1-0:2.8.1(000000.002*kWh)
1-0:2.8.2(000000.004*kWh)
0-0:96.14.0(0002)
1-0:1.7.0(00.349*kW)
1-0:2.7.0(00.000*kW)
0-0:96.7.21(00009)
0-0:96.7.9(00003)
1-0:99.97.0(1)(0-0:96.7.19)(180219114842W)(0000001787*s)
1-0:32.32.0(00004)
1-0:52.32.0(00003)
1-0:72.32.0(00005)
1-0:32.36.0(00001)
1-0:52.36.0(00001)
1-0:72.36.0(00001)
0-0:96.13.0()
1-0:32.7.0(236.7*V)
1-0:52.7.0(233.7*V)
1-0:72.7.0(236.6*V)
1-0:31.7.0(000*A)
1-0:51.7.0(000*A)
1-0:71.7.0(000*A)
1-0:21.7.0(00.112*kW)
1-0:41.7.0(00.083*kW)
1-0:61.7.0(00.154*kW)
1-0:22.7.0(00.000*kW)
1-0:42.7.0(00.000*kW)
1-0:62.7.0(00.000*kW)
0-1:24.1.0(003)
0-1:96.1.0(4730303432303031363039393733373136)
0-1:24.2.1(191209105510W)(009860.32*m3)
!722B
---------------------------------------------------
Aantal telegrammen: 30
Waarvan foute CRC : 0
Telegram iedere : 1.00 seconden
---------------------------------------------------

Berichten: 239
Geregistreerd: 03 Okt 2015, 13:39

Re: Alleen 3 regels uit p1 poort

Berichtdoor DeDraak » 09 Dec 2019, 13:08

3.jpg
3.jpg (157.91 KiB) 104 keer bekeken

Gebruikers-avatar
Berichten: 140
Geregistreerd: 22 Jan 2013, 16:40

Re: Alleen 3 regels uit p1 poort

Berichtdoor zuid » 09 Dec 2019, 14:42

ISKRA MT382-D2A52


Misschien helpt het als je bij deze meter niet alleen de baudrate wijzigt maar ook het aantal bits.
DSMR 2.2
9600 7E1:
Baudrate = 9600
Data bits = 7
Parity = Even
Stop bits = 1

Landis +Gyr E350 DSMR4.0

Zou het kunnen zijn dat deze meter (nog) geen CRC heeft.
Onze meter een DSMR 2.2 heeft in ieder geval GEEN CRC
Ik weet niet vanaf welke versie CRC toegepast is.

m.v.g. Nico

Berichten: 239
Geregistreerd: 03 Okt 2015, 13:39

Re: Alleen 3 regels uit p1 poort

Berichtdoor DeDraak » 09 Dec 2019, 14:44

Waar kan ik dat in deze code aanpassen dan?


Code: Alles selecteren
// P1 poort tester
// ---------------
//
// Board
// -----
//   Arduino Leonardo/Micro/Pro Micro of een andere ATmega32U4.
//   Deze sketch zou zonder wijzigingen op een Arduino Mega 2560
//   kunnen draaien. Dat heb ik nog niet geprobeerd.
//
// Werking
// -------
//   De 115200 8N1 seriele data van de P1 poort wordt ingelezen op pin 0
//   bij een Leonardo of anders de RX pin van Serial1 bij een Mega 2560.
//   Vanzelfsprekend het signaal van de P1 poort inverteren zodat het
//   een normaal serieel signaal wordt met idle hoog en startbit laag.
//   In de seriele monitor wordt het telegram weergegeven.
//   Ze de seriele monitor ook op 115200 baud !
//
// Versies
// -------
//   Versie 1, 20 juni 2019
//     Eerste versie.
//     De CRC berekening werkt, maar testen van verkeerde invoer is niet perfect.
//
// CRC
// ---
//   De CRC is een standaard crc16 vanaf het '/' teken tot en met het '!'.
//   Inclusief die beide tekens zelf en inclusief alle '\r' en '\n'.
//   Na de '!' komt de checksum.
//   Dat zijn altijd 4 hexadecimale cijfers, bijvoorbeeld: 0A89
//
//

#include <util/crc16.h>

#define BUFFER_SIZE 1024
byte buffer[BUFFER_SIZE];
 
unsigned long previousMillis;
 
unsigned int telegramCount;
unsigned int errorCount;
 
 
void setup()
{
  Serial.begin(115200);                    // Stel de seriele monitor in op 115200 baud.
  while( !Serial);                          // Wacht totdat de seriele monitor geopend is (Leonardo).
  Serial.println(F( "==================================================="));
  Serial.println( "De sketch \"P1 poort tester\" loopt");
  Serial.println(F( "==================================================="));
 
  Serial1.begin(115200);                    // Voor de P1 poort, alleen RX wordt gebruikt
 
  // Maak pin 13 hoog, die is misschien verbonden met het RTS signaal.
  // Bijvoorbeeld als iemand de "P1 poort vertrager" met pin 13 heeft gebruikt.
  pinMode( 13, OUTPUT);
  digitalWrite( 13, HIGH);
}
 
 
void loop()
{
  Serial1.setTimeout( 15000UL);              // 15 seconden timeout, een hogere waarde mag ook.
  if( Serial1.find( '/'))                    // zoek het begin van een telegram
  {
    unsigned long currentMillis = millis();   // onthoudt dit tijdstip
    memset( buffer, '\0', BUFFER_SIZE);       // maak buffer schoon, en zorg meteen voor zero-terminator
    buffer[0] = '/';                          // zet de '/' ook nog in de buffer, nodig voor de CRC
    Serial1.setTimeout( 2000UL);             // 2 seconden timeout om de rest van het telegram in te lezen.
    int m = Serial1.readBytesUntil( '!', &buffer[1], BUFFER_SIZE - 2);  // lees tot einde-teken van telegram
 
    if( m > 2)                                // Is er iets ontvangen ? Negeer minder dan 2 bytes
    {
      telegramCount++;                        // hou aantal ontvangen telegrammen bij.
 
      // De '!' is gelezen, maar zit nog niet in de buffer.
      // De '!' is echter wel nodig bij de crc checksum.
      // Na de '!' komen nog 4 cijfers met de checksum, en daarna carriage return en linefeed.
 
      int n = (int) strlen( (char *) buffer); 
      if( n < BUFFER_SIZE - 2)
      {
        buffer[n] = '!';                      // voeg de '!' alsnog toe aan de buffer
        n++;
      }
 
      uint16_t crc = 0;
      for( int i=0; i<n; i++)
        crc = _crc16_update( crc, buffer[i]); // gebruik de standaard crc16
 
      // Lees ook de 4 cijfers van de checksum, en zet die dan meteen om naar een unsigned integer.
      unsigned int crcTelegram = 0xFFFF;      // zomaar een waarde, de 'crc' is al default 0, dus deze anders.
      if( n < BUFFER_SIZE - 5 && Serial1.available() > 4)  // is er nog een checksum ?
      {
        for( int i=0; i<4; i++)               // lees de 4 cijfers van de crc
        {
          buffer[n++] = (byte) Serial1.read();
        }
        sscanf( (char *) &buffer[n-4], "%4x", &crcTelegram);
      }
 
      if( crc != crcTelegram)                 // test de berekende waarde met de ingelezen checksum
      {
        errorCount++;
      }
    }
 
    Serial.println( (char *) buffer);        // Druk het gehele telegram af
 
    Serial.println(F( "---------------------------------------------------"));
    Serial.print(F( "Aantal telegrammen: "));
    Serial.println( telegramCount);
    Serial.print(F( "Waarvan foute CRC : "));
    Serial.println( errorCount);
    Serial.print(F( "Telegram iedere   : "));
    float t = float(currentMillis - previousMillis) / 1000.0;
    Serial.print( t);
    Serial.println(F( " seconden"));
    Serial.println(F( "---------------------------------------------------"));
 
    previousMillis = currentMillis;           // onthouden, de volgende keer wordt verschil berekend.
  }
}

Gebruikers-avatar
Berichten: 140
Geregistreerd: 22 Jan 2013, 16:40

Re: Alleen 3 regels uit p1 poort

Berichtdoor zuid » 09 Dec 2019, 14:49

https://www.arduino.cc/reference/en/lan ... ial/begin/

Zie bovenstaande documentatie
m.v.g. Nico

Gebruikers-avatar
Berichten: 140
Geregistreerd: 22 Jan 2013, 16:40

Re: Alleen 3 regels uit p1 poort

Berichtdoor zuid » 09 Dec 2019, 15:15

Je kan aan het eind van het bericht zien of er wel of geen CRC is.
GEEN CRC
0-1:96.1.0(473030
---------------------------------------------------
Aantal telegrammen: 15
Waarvan foute CRC : 15
Telegram iedere : 10.01 seconden
---------------------------------------------------

Met CRC
0-1:24.2.1(191209105510W)(009860.32*m3)
!722B
---------------------------------------------------
Aantal telegrammen: 30
Waarvan foute CRC : 0
Telegram iedere : 1.00 seconden
---------------------------------------------------

Gebruikers-avatar
Berichten: 2336
Geregistreerd: 06 Aug 2016, 01:03

Re: Alleen 3 regels uit p1 poort

Berichtdoor Koepel » 09 Dec 2019, 18:06

@zuid, bedankt om het een en ander te verhelderen.

Er zijn volgens mij verschillende dingen gaande en er is wat verwarring.
Je schreef: "Dit doet hij niet bij elke "verversing" overigens. soms mist hij bv het lage verbruik en soms het actuele verbruik.", dus ik ging er van uit dat het signaal onstabiel was, een hardware probleem. Daarom kwam ik met die checksum controle. Maar nu blijkt dat jij geen checksum had.
Maar misschien was het wel de AltSoftSerial die problemen gaf.

Dus al die meters hebben verschillende dingen en soms zonder checksum. Sorry, dat wist ik niet. Als je precies iedere seconde een telegram binnenkrijgt of iedere 10 seconden en het ziet er goed uit, dan zullen de gegevens wel goed zijn. Ik heb die "P1 poort tester" nog niet nagekeken wat er gebeurt als er iedere 10 seconden een telegram binnenkomt.

Hoe ga je nu verder ?
Als er een 7E1 binnenkomt en Arduino staat als 8N1, dan is het inderdaad mogelijk om de 8-ste bit er af te halen. Dus dat deed de sketch waar je mee kwam.

Stel dat je de oorspronkelijke sketch neemt, en 8N1 gebruikt en het 8-ste bit weghaalt zodat ook 7E1 goed gaat. Dan nog de twee mogelijkheden voor de gaswaarde er in zetten. En dat alles met de hardware seriële poort van een Arduino Mega 2560.
Als je zeker weet dat je dan alle telegrammen goed binnenkrijgt, dan hoef je alleen nog te kiezen tussen 115200 en 9600 baud.

VorigeVolgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast