4 062 läst · 27 svar
4k läst
27 svar
Elmätare Garo GNM3D-RS485 mäter rätt men visar helt fel
Hobbyelektriker
· Stockholm
· 560 inlägg
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?
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?
Hobbyelektriker
· Stockholm
· 560 inlägg
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?
Hobbyelektriker
· Stockholm
· 560 inlägg
Tror motsvarande Carlo Gavazzi-mätare heter EM340. Manualen/registerlistan är identiska - är i princip samma fil med annan logotyp.S sven s skrev:
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
Hobbyelektriker
· Stockholm
· 560 inlägg
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.
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.
Hobbyelektriker
· Värmland, Molkom
· 24 447 inlägg
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.
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)
Hobbyelektriker
· Stockholm
· 560 inlägg
Jag läser med offset som du beskriver, utelämnade här för att minska förvirringen.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)
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?
Hobbyelektriker
· Stockholm
· 560 inlägg
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.
Felet du beskriver kan vara en följd av det, små tal man läser kan bli riktiga, men stora tal blir fel.
Hobbyelektriker
· Stockholm
· 560 inlägg
S sven s skrev:
Intressant, det bör kollas upp.S sven s skrev:
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.
S stugan_i_skogen skrev:
I datavetenskapliga sammanhang kallas det här för "endianess":S sven s skrev:
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:
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:
Hobbyelektriker
· Stockholm
· 560 inlägg
Mitt (Python-)program körs på en ARM processor i en välkänd kreditkortsstor datorO 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?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.
Hobbyelektriker
· Värmland, Molkom
· 24 447 inlägg
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.
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.