Hej!

Jag har försökt väcka Garos intresse utan större framgång, så jag gör ett försök här för att se om fler har upplevt samma sak eller om jag är ute och cyklar.

Jag påstår att den debiteringsgodkända mätaren Garo GNM3D-RS485 (en Carlo Gavazzi-produkt ursprungligen tror jag) förvisso mäter korrekt och presenterar korrekt data på displayen, men rapporterar fel mätvärden via modbus. Detta är särskilt problematiskt i de fall den används för t.ex. IMD-el i bostadsrättsföreningar eller för att debitera t.ex. elbilsladdning.

Jag har både tittat i senaste versionen av databladet samt explicit ställt frågan till produktchefen om vilka modbus-register som skall läsas av för att få ut mätarställningen och den totala effekten så som den presenteras på mätarens display. Jag har fått ett tydligt svar, som är i linje med databladet.

Vad jag upptäckt är att när det gäller energin så finns det i databladet två förslag på register, båda rapporterar dock helt fel mätarställning (tusentals kWh fel). Däremot finns det ett odokumenterat register som funkar perfekt.

När det gäller effekten är det tyvärr värre och lurigare. De register som anger den totala effekten stämmer bra upp till ett visst värde, så om man testar med t.ex. en värmefläkt ser det ut att vara i sin ordning, men kopplar man därefter in ytterligare en fläkt så ökar inte den totala angivna effekten (via modbus, displayen är korrekt). Lösningen här är att manuellt beräkna den totala effekten genom att summera effekten per fas (som redovisas korrekt via modbus).

Motbevisa mig gärna att jag har fel, så slipper vi riva ut våra mätare. Det som gör att jag vågar sticka ut hakan och inte avfärda detta som ett (programmerings-)misstag från min sida är att övriga mätvärden rapporteras korrekt, t.ex. frekvens, strömmar, spänningar etc.

Är det någon som har liknande erfarenheter? Någon som har kontakt med någon på Garo? Etc?
 
Hej.Har du kontrollerat att det är rätt format på registret? Signed eller unsigned? 16 bit eller 32 bit? Swapped?
 
S sven s skrev:
Hej.Har du kontrollerat att det är rätt format på registret? Signed eller unsigned? 16 bit eller 32 bit? Swapped?
Tack för svar - Samtliga register jag läser är (Signed) INT32, både de som blir rätt och de som blir fel.
 
Jag använder SAIA plc på jobbet och vi använder ibland Carlo Gavazzi elmätare. Läser du utan offset på register? Några Carlo Gavazzi mätare har blandade register med 32 bit och 32bit swapped. Har du manualen med modbusregister/adresser?
 
S sven s skrev:
Jag använder SAIA plc på jobbet och vi använder ibland Carlo Gavazzi elmätare. Läser du utan offset på register? Några Carlo Gavazzi mätare har blandade register med 32 bit och 32bit swapped. Har du manualen med modbusregister/adresser?
Tror motsvarande Carlo Gavazzi-mätare heter EM340. Manualen/registerlistan är identiska - är i princip samma fil med annan logotyp.

Här är en länk till dokument med modbus adresserna!
https://www.garo.se/storage/2F5C05C...6f4e2ef/108047_5_Protocol GNM3D,-T Modbus.pdf
 
Här är de register jag läser:
300053: Energi enligt datablad och via mail. Felaktigt värde
300275: Energi enligt datablad. Felaktigt.
301025: Energi (special) står ej i datablad. Korrekt.
300041: Effekt enligt datablad och via mail. Felaktigt.
300013:Enligt datablad. Korrekt.
300015:Enligt datablad. Korrekt.
300017:Enligt datablad. Korrekt.
300019:Enligt datablad. Korrekt.
300021:Enligt datablad. Korrekt.
300023:Enligt datablad. Korrekt.
 
Ser du någon korrelation mellan avläst värde och det förväntade (korrekta) värdet?
Kan du avgöra vid vilket absoluta tal som effekten plötsligt blir fel?
Detta kan ge ledtrådar. Alternativt får man lusläsa modbusprotokollet efter eventuella specialfall.
Men då så mycket ändå fungerar är det svårt att misstänka programmeringsfel.
 
Nu vet inte vad du läser modbus med, men när jag läser en CG EM330(tror det är samma protokoll) så måste jag läsa med offset, alltså för att få effekt läser jag på 300040 inte 300041. Med SAIA måsta jag også välja swapped, alltså att man läser *high word* före *low word* Eftersom värderna stämmer för dig upp til viss effekt, tyder det på att du læser i fel format. Har du provat att läsa *Input reg*? (Code 04)
 
S sven s skrev:
Nu vet inte vad du läser modbus med, men när jag läser en CG EM330(tror det är samma protokoll) så måste jag läsa med offset, alltså för att få effekt läser jag på 300040 inte 300041. Med SAIA måsta jag også välja swapped, alltså att man läser *high word* före *low word* Eftersom värderna stämmer för dig upp til viss effekt, tyder det på att du læser i fel format. Har du provat att läsa *Input reg*? (Code 04)
Jag läser med offset som du beskriver, utelämnade här för att minska förvirringen.
Läser på samma vis för samtliga register, dvs ett nummer ifrån.

ursäkta frågan, men vad är high word/Low word?
 
Bifogar en screenshot där både 30041 och min summering av respektive fas effekt är ritad. Strax över 4000W så blir det fel.
 
  • Graf med två överlagrade linjediagram som visar energiförbrukning, en topp över 7000W markerad som felaktig.
    Inloggade ser högupplösta bilder
    Skapa konto
    Gratis och tar endast 30 sekunder
Du läser 32bit, som är 2st sammansatta 16bit. Första 16bit som man läser är *low word* det andra blir *high word* Ibland måste man läsa *high word * före *low word* ,man byter plats på de(swapp)
Felet du beskriver kan vara en följd av det, små tal man läser kan bli riktiga, men stora tal blir fel.
 
  • Gilla
Oldfart
  • Laddar…
S sven s skrev:
Du läser 32bit, som är 2st sammansatta 16bit. Första 16bit som man läser är *low word* det andra blir *high word* Ibland måste man läsa *high word * före *low word* ,man byter plats på de(swapp)
Felet du beskriver kan vara en följd av det, små tal man läser kan bli riktiga, men stora tal blir fel.
S sven s skrev:
Du läser 32bit, som är 2st sammansatta 16bit. Första 16bit som man läser är *low word* det andra blir *high word* Ibland måste man läsa *high word * före *low word* ,man byter plats på de(swapp)
Felet du beskriver kan vara en följd av det, små tal man läser kan bli riktiga, men stora tal blir fel.
Intressant, det bör kollas upp.

När det gäller totala energin så läser jag som sagt både 300053 och 300275 (enligt datablad) och de ger helt fel värde. Läser jag däremot 301025 som inte finns i databladet stämmer det exakt med vad som visas på displayen. Det talar kanske emot att det skulle vara relaterat till att läsa high word före?

Oavsett, intressant spår.
 
O
S stugan_i_skogen skrev:
ursäkta frågan, men vad är high word/Low word?
S sven s skrev:
Du läser 32bit, som är 2st sammansatta 16bit. Första 16bit som man läser är *low word* det andra blir *high word* Ibland måste man läsa *high word * före *low word* ,man byter plats på de(swapp)
I datavetenskapliga sammanhang kallas det här för "endianess":
https://en.wikipedia.org/wiki/Endianness

En vanlig PC med Intel-kompatibel processer arbetar med little-endian medans t.ex. mobiler med ARM-processorer har sin kod i little-endian men kan växla mellan big- och little-endian för datasegment.

I det länkade dokumentation står det i kapitel "2.1 Data format representation In Carlo Gavazzi instruments" att:
"For all the formats the byte order (inside the single word) is MSB->LSB. In INT32, UINT32 and UINT64 formats, the word order is LSW-> MSW."
Det vill säga bit-endian. Så sitter du på en PC och inte tar hänsyn till att den arbetar med en annan minneslayout på sina register än vad informationen från elmätaren har så är det inte så konstigt att det blir fel.
 
Redigerat:
  • Gilla
NICHOLAS J
  • Laddar…
O Steamboy skrev:
I datavetenskapliga sammanhang kallas det här för "endianess":
[länk]

En vanlig PC med Intel-kompatibel processer arbetar med little-endian medans t.ex. mobiler med ARM-processorer har sin kod i little-endian men kan växla mellan big- och little-endian för datasegment.

I det länkade dokumentation står det i kapitel "2.1 Data format representation In Carlo Gavazzi instruments" att:


Det vill säga bit-endian. Så sitter du på en PC och inte tar hänsyn till att den arbetar med en annan minneslayout på sina register än vad informationen från elmätaren har så är det inte så konstigt att det blir fel.
Mitt (Python-)program körs på en ARM processor i en välkänd kreditkortsstor dator
O Steamboy skrev:
I datavetenskapliga sammanhang kallas det här för "endianess":
[länk]

En vanlig PC med Intel-kompatibel processer arbetar med little-endian medans t.ex. mobiler med ARM-processorer har sin kod i little-endian men kan växla mellan big- och little-endian för datasegment.

I det länkade dokumentation står det i kapitel "2.1 Data format representation In Carlo Gavazzi instruments" att:


Det vill säga bit-endian. Så sitter du på en PC och inte tar hänsyn till att den arbetar med en annan minneslayout på sina register än vad informationen från elmätaren har så är det inte så konstigt att det blir fel.
O Steamboy skrev:
I datavetenskapliga sammanhang kallas det här för "endianess":
[länk]

En vanlig PC med Intel-kompatibel processer arbetar med little-endian medans t.ex. mobiler med ARM-processorer har sin kod i little-endian men kan växla mellan big- och little-endian för datasegment.

I det länkade dokumentation står det i kapitel "2.1 Data format representation In Carlo Gavazzi instruments" att:


Det vill säga bit-endian. Så sitter du på en PC och inte tar hänsyn till att den arbetar med en annan minneslayout på sina register än vad informationen från elmätaren har så är det inte så konstigt att det blir fel.
Försöker läsa in mig efter bästa förmåga. Vad menar du med "det vill säga bit-endian". Menar du Bi-endian eller Big-endian? eller bit-endian?
 
Big.

Men du har LE här (little-endian). Om du har ett 32-bitarsvärde som är 0x12345678 så skickas det en byteström som består av 0x78 0x56 0x34 0x12. Detta måste du konvertera manuellt i python till ett korrekt 32-bitarsvärde. Det är därför jag ville veta lite absoluta tal här etc då det kan ske en endianswap nånstans du inte känner till.
 
  • Gilla
stugan_i_skogen
  • Laddar…
Vi vill skicka notiser för ämnen du bevakar och händelser som berör dig.