PC-styrning av Bergvärmepump

Planering och tankar kring eventuella framtida projekt.
FredRovers
Inlägg: 19
Blev medlem: 9 januari 2007, 21:24:41

Inlägg av FredRovers »

8) Hög tid att släppa lite information om NIBEs RS485 protokoll 8)

Använd 19200, 9bit, N, 1.
All data är angivet i hex. En stjärna (*) före hexdata indikerar att bit 9 är satt.

Det finns fyra noder (adresser) i systemet:
14 RCU
24 Styrkort (Master)
F5 Reläkort
F9 Displaykort

Styrkortet adresserar noderna och det är bara för noderna att svara ACK eller ENQ. ACK om noden inte har något att meddela och ENQ om noden har något att meddela till styrkortet, det kan t.ex. vara en knapptryckning på displaykortet eller liknande. ACK=06 och ENQ=05. Det gäller dock att svara i tid!!!

Det som är av intresse är RCUns kommunikation. För att styrkortet ska adressera RCU (14) krävs att RCU aktiveras i meny i pannan. Om din panna inte har stöd för RCU så finns heller ingen meny för att aktivera RCU.

Styrkortet inleder varje adressering med *00. följt av en adress t.ex. *14 för RCUn.

:!: Exempel av läsning av parametrar.
När styrkorted adresserar RCUn enligt:
*00 *14
förväntar sig styrkortet ett svar. Om endast läsning av parametrar ska göras är det bara att svara med 06 d.v.s. ACK.
Styrkortet kommer då att skicka, tex:
C0 00 24 11 00 04 01 25 00 05 01 10 00 06 01 42 00 07 01 66 01 E5
C0 är det som man kan kalla cmd, det är olika för olika enheter men för RCUn är det alltid C0 men för displayen kan det vara tex 51 som betyder att datat är en textsträng som ska presenteras på översta raden, 52 andra raden 53 tredje raden.
00 skickas alltid efter cmd.
24 identifierar vem som skickar datat, dvs styrkortet i detta fallet.
11 är längden av datat som kommer efter ländbyten, 0x11=17. Obs! csum ej inkluderat.
00 första byten före en ny parameter är alltid 00.
04 parameterindex dvs parameter 4.
01 25 = data för parameter 4, 0x0125 (1/10°C)=29.3°C == Frånluftstemperatur för mif som har en 360p.
00 05 = parameterindex 05.
01 10 = 0x0110=27.2°C == Förångningstemp.
00 05 = parameterindex 06
01 42 ...
00 06 ...
01 66 ..
01 = I slutet kommer det ibland skräp. Det gäller att hålla koll på detta. Detta beror på att man kollar datalängden för sent när man skickar ut datat på RS-485. Datamängden är nämligen begränsad.
E5 = csum dvs XOR av allt från cmd till sista byten.

Nu är det inte alla parametrar som består av två bytes. Vissa parametrar består av endast en byte och vissa bytes eller bytepar kan vara bitfält. Jag antar att det ger sig om man börjar undersöka lite närmare för respektive pannmodell.

Efter att RCUn har tagit emot datat och kollat att csum stämmer ska den skicka 06 för att informera styrkortet om att den har tagit emot allt. Styrkortet kommer då att skicka *03 (ETX). Om det skulle visa sig att du får csum-fel skall 15 (NAK) skickas.

På detta sätt kommer styrkortet att gå igenom parameterindexen för att sedan börja om från början när man fått in alla. Däremellan skickars info till display och reläkort också. Det är bara att hålla koll på parameterindex och spara undan värdet på parametern.

:!: Exempel av skrivning av parametrar.
När styrkortet adresserar RCUn enligt:
*00 *14 ska RCUn svara 05 (ENQ) isf 06 (ACK). Styrkortet kommer då att svara 06 (ACK). RCUn ska då sända följande:
C0 00 14 (sender address) följt av antal bytes data du vill skicka.
Efter detta ska adress och data skickas, tex:
00 14 01 45.
XOR-summan skickar du efter att du skickat dina data bytes. XOR-summan ska räknas ut med allt som du sänder dvs c0 00 14 04 00 14 01 45.
När styrkortet tagit emot XOR-summan kommer den att skicka 06 (ACK) om XOR-summan var ok. Om styrkortet skickar 15 (NAK) så var det fel XOR-summa.
När RCUn fått in 06 (ACK) från styrkortet ska RCUn skicka *03 (ETX) och så är det färdigt. Observera att bit 9 skall vara satt när du skickar ETX.

Det finns endast parametrar som har en eller två bytes.

För min 360p så har jag lyckats lista ut följande:
Index Bytecount =Parameterdescription
=============================
00 01 =CPUid 0x20=360p, (0x72=1135)
01 02 =Utomhustemperatur
02 02 =Temp. varmvattengivare
03 02 =Avluftstemperatur
04 02 =Frånluftstemperatur
05 02 =Förångartemperatur
06 02 =Framledningstemperatur
07 02 =Returtemperatur
08 02 =Temp. Kompressorgivare
09 02 =Temp. Elpatrongivare
0a 02
0b 01 =Kurvlutning
0c 01 =Förskjutning värmekurva
0d 01
0e 02
0f 02
10 01
11 01
12 01
13 01 =Kompressordrift 0x02=på 0x00=av
14 02 =Fläkthastighet. bl.a. (1)
15 02 =Bl.a. driftläge (2)
16 02
17 02 =Strömförmrukning (maxfas)
18 02
19 02
1a 01
1b 02 =Antal starter kompressor
1c 02 =Drifttid kompressor
1d 02 =Tidfaktor elpatron
1e 01 =Maxtemp. framledning
1f 01 =Mintemp. framledning
20 01 =? ?Bitfält?
21 01 =Driftläge autodrift ?Bitfält?
22 01 =Kompensering yttre
23 01
24 01 =Intervall periodiskt XVV
25 02
26 01 =RCU-förskjutning värmekurva
27 01
28 01 =Larmnivå frånluftstemperatur
29 01 =year
2a 01 =month
2b 01 =day
2c 01 =hour
2d 01 =minute
2e 01 =second
2f 01

Nu lär det väl ta fart därute i stugorna, mycket nöje! :D
cosmos
Inlägg: 14
Blev medlem: 11 september 2007, 17:00:47
Ort: Norge

Inlägg av cosmos »

det er jo bare nydelig :)
mange takk
hammer1975
Inlägg: 7
Blev medlem: 16 september 2007, 10:01:16
Ort: Nyköping

Inlägg av hammer1975 »

Hur påverkar egentligen det här med att man kör med nio databitar. Jag har hållit på en del med RS232/485 kommunikation men aldrig stött på att man använt just nio databitar. Jag har provat att koppla in mig på min Nibe 1230 och kör 19200,8,N,1 i Realterm, jag kan då bla se klartext informationen som skickas till displayen t.ex "Varmvattentemperatur" trots att jag kör med 8 databitar. Jag kollat på alla mina datorer och ingen av UARTarna klarar nio databitar.

Är det så att nio databitar endast används vid adressering och åtta när "vanlig" data skickas? Kanske nån skulle vilja förklara lite närmare hur detta funkar.

MVH, Magnus
cosmos
Inlägg: 14
Blev medlem: 11 september 2007, 17:00:47
Ort: Norge

Inlägg av cosmos »

Ja det anvendes bare ved adressering og det er ikke 9bit data felt, det er 8 bit + parity feltet

master i systemet sender en request (adresse) som nodene kan svare på.

Da sender master med
19200,8,M,1 ... bemerk M = Mark = 1

så svarer noden og den sender da med
19200,8,S,1 ... merk S = SPACE = 0
sokrates
Inlägg: 5
Blev medlem: 8 augusti 2007, 20:48:59

9 bitar

Inlägg av sokrates »

hammer1975 skrev:Hur påverkar egentligen det här med att man kör med nio databitar. Jag har hållit på en del med RS232/485 kommunikation men aldrig stött på att man använt just nio databitar. Jag har provat att koppla in mig på min Nibe 1230 och kör 19200,8,N,1 i Realterm, jag kan då bla se klartext informationen som skickas till displayen t.ex "Varmvattentemperatur" trots att jag kör med 8 databitar. Jag kollat på alla mina datorer och ingen av UARTarna klarar nio databitar.

Är det så att nio databitar endast används vid adressering och åtta när "vanlig" data skickas? Kanske nån skulle vilja förklara lite närmare hur detta funkar.
Jag skulle nog vilja hålla fast vid beskrivningen att kommunikationen använder 9 bitar. Dessa är uppdelade så att bit 0-7 innehåller kommandon, ascii text etc, medan bit 8 (den som i vanliga fall har rollen som paritetsbit) används för att signalera till alla enheter på bussen att bit 0-7 innehåller en enhetsadress.

En standard-UART har ingen ren 9-bitarsmode, men om man ställer in den på, tex, 8-bitar, udda paritet, så kan man lyssna efter 0x00 utan paritetsfel. Om nästföljande byte är 0x14 utan paritetsfel vet man att RCU:n blivit adresserad. Då är det ju, enligt det protokoll som FredRovers publicerat, dags att sända ACK. För sändning brukar det då gå att ställa in en standard-UART så att den håller paritetsbiten (= bit 8) fixerad till 0. På så vis går det alldeles utmärkt att använda en standard-UART för protokollet. Dock skall man alltså inte använda 8N1 eftersom man då riskerar att få framingfel.
sokrates
Inlägg: 5
Blev medlem: 8 augusti 2007, 20:48:59

9 bitar

Inlägg av sokrates »

Förlåt, jag insåg att jag inte besvarat din fråga:
hammer1975 skrev:Är det så att nio databitar endast används vid adressering och åtta när "vanlig" data skickas?
Nej, det är 9 bitar hela tiden. Bit 8 = 1 för att signalera adress, 0 annars.
hammer1975
Inlägg: 7
Blev medlem: 16 september 2007, 10:01:16
Ort: Nyköping

Inlägg av hammer1975 »

Tack för informationen! Jag har börjat labba lite med ett program för att läsa ut data från Niben. Jag hittar "00 14" i dataströmmen och svarar tillbaka med 06 (19200,8,S,1). Jag får dock inget tillbaka från Niben vilket jag skulle få om jag förstår FredRovers beskrivning rätt. Har ni fått tillbaka nåt om ni skickar ack?

Nu kanske det har med min RS232 till 485 konverter som är av enklaste modell, jag kör med 1st 1kOhm mellan RX och TX på RS232 samt ett 1kOhm mellan Data- och GND på RS485, fanns en beskrivning på den i Allt om elektronik 2005/1.

Jag tänkte försöka bygga en bättre konverter efter denna beskrivning istället. Verkar rätt enkel även för en inte så elektronikinsatt person! http://aquaticus.info/rs485_to_rs232

MVH, Magnus
cosmos
Inlägg: 14
Blev medlem: 11 september 2007, 17:00:47
Ort: Norge

Inlägg av cosmos »

Du setter selvsagt RTS når du svarer 06?
FredRovers
Inlägg: 19
Blev medlem: 9 januari 2007, 21:24:41

Inlägg av FredRovers »

För min del så kör jag inte någon serieport på en PC, jag använder en uP och kör en av uartarna mot en Intersil 485-krets.
cosmos
Inlägg: 14
Blev medlem: 11 september 2007, 17:00:47
Ort: Norge

Inlägg av cosmos »

FredRovers: Har du lyst til å si litt mer om løsningen din?

...

Hva gjør du etter å ha lest inn data i uP?

...

Jeg tenkte også på å bruke en uP/uC, men ville prøve en PC først, hvis det fungerer bra er jo informasjonen kommet dit jeg vil ha det.

Litt usikker på om RTS styringen i PC reagerer raskt nok, det var ikke så mye tid etter 06 svaret til master begynner å sende om jeg minnes rett.
I så fall er vel løsningen enten autotiming på RS485 eller en uP/uC av noe slag.

Autotiming kan feks være en 74xx123 styrt av start flanken og som overtar styringen av RTS i en vanlig low cost 232 -> 485.
Timing kan stå fast siden formatet er kjent og baudrate like så.

Lastet ned PC compiler og leser meg opp på WIN API for seriecom.
Vil gjerne etter hvert ha en løsning med galvanisk skille så en uP med ethernet ville vært supert siden man da får skillet gratis i TP trafo.

Noen ide om hvor mye man kan trekke fra 5V evt. 12V på Nibes RS485 port?

Noen bra source for billige 232-> 485 convertere?
kan bygge en håndlaget lab modell selv, men er kjøpe greier billige nok gidder jeg ikke.
hammer1975
Inlägg: 7
Blev medlem: 16 september 2007, 10:01:16
Ort: Nyköping

Inlägg av hammer1975 »

Den konverter jag kör använder ej RTS för växling av receive/trasmit. Enligt beskrivningen ska den växla automatiskt men jag tror inte det funkar mot Niben.

Jag ska beställa en MAX232 och MAX485 och se om kommunikationen blir bättre.
FredRovers
Inlägg: 19
Blev medlem: 9 januari 2007, 21:24:41

Inlägg av FredRovers »

Mer info om min implementation...

Jag plockar in alla parametrar och lagrar dem i en struct. På min andra UART kör jag RS-232 och kan skicka kommandon från en PC, t.ex. dumpa nuvarande parametrar eller sätt parameter. Jag loggar inte historiken utan sparar endast nuvarande värden. Det ligger senare i tiden att göra någon loggning, har dock begränsat med minne i min lösning om jag inte sätter dit ett SD-minne. Det som lockar är att få till en lösning mot nätverket.

Har också funderat på om man törs lasta NIBEs +5V och +12V, borde ju vara ganska bra kräm i dessa???

Ni som har andra modeller av pannor får gärna lägga upp motsvarande parametertabell så att vi kan identifiera alla parametrarna.
cosmos
Inlägg: 14
Blev medlem: 11 september 2007, 17:00:47
Ort: Norge

Inlägg av cosmos »

(edit: funnet noen flere og lagt til antall bytes, alt her er ikke 100% sikkert)

Her er dekodingsinfo for en annen type.

De før 40 som ikke er angitt varierer typisk men det er ikke så opplagt hva de er/indikerer, noen nr følger logisk av brukerhåndboken men er ikke verifiser (har ? etter)

nr etter 40 er stort sett statiske og er trolig limits og mindre brukte opsjoner

Dette er logget med nibe enhet der CPU har ID 0x70, tror dette er likt 1130 el. l.
bruker en auto timed RS485 (USB) driver, leser og dekoder alle telegrammer på bussen (dvs kan feks ha replika av display på PC skjermen) SW bruker kun std WIN API calls,
lagrer i struct alle 96*** verdier fra RCU og printer dem komma separert til stdout.
piper dette til fil og importerer til regneark.
Blir riktig vakre kurver, har ca 10 sec mellom hver struct dump.
Gjør ingen forsøk på å sette verdier (en så lenge)

  • # bytes function
    1 1 CPU type/produkt (denne hikker (-24) ca hver time)
    2 2 VV temp
    3 1 Start temp VV
    4 1 VV stop
    5 1 VV minutter
    6 1 VV legionlla stop
    7 1 VV legionella intervall
    8 1 VV tid min.
    9 4 VV tid timer
    10 2 VB tur
    11 2 VB ønsket verdi
    12 1 Vamekurve?
    13 1 Forskyvning varmekurve?
    14 1 VB MIN?
    15 1 VB MAX?
    16 1 Kompensering giver?
    17 2 VB retur?
    18 1 VB retur MAX?
    19 2 grad minutter
    20 2 VB2 tur temp???
    21 2 VB2 ønsket temp
    22 1 VB2 kurve
    23 1 VB2 Forskyvning
    24 1 VB2 MIN
    25 1 VB2 MAX
    26 1 kompensering VB2
    27 2 Inne temp???
    28 2 ute temp
    29 2 KB retur avg.
    30 2 KB retur
    31 2 KB tur
    32 4 kompressor starter
    33 1 komp. time min
    34 4 komp tid timer
    35 2 Hetgas temp
    36 2 Væskeledningstemp
    37 2 Sugegasstemp
    38 2 Kondensator ut temp
    39 2 temp???
    40 2 temp???
    41 1
    42 1
    43 2
    44 2
    45 2
    46 1 TS EL minutter
    47 4 TS EL timer
    48 1
    49 1
    50 1
    51 1
    52 1
    53 1
    54 1
    55 1
    56 2
    57 1
    58 2 Relay VV prioritering ++
    59 1 Relay KB pumpe ++
    60 1 Relay kompressor ++
    61 2
    62 1
    63 1
    64 1
    65 1
    66 1
    67 1
    68 2
    69 2
    70 2
    71 2
    72 1
    73 1
    74 1
    75 1
    76 1
    77 1
    78 1
    79 1
    80 1
    81 1
    82 1
    83 1
    84 2
    85 2
    86 1
    87 1
    88 1
    89 1
    90 1
    91 1
    92 1
    93 1
    94 2
    95 2
    96 1
cosmos
Inlägg: 14
Blev medlem: 11 september 2007, 17:00:47
Ort: Norge

Inlägg av cosmos »

FredRovers:
Jeg ser i min logg at VP rebooter stadig vekk (litt varierende men gjerne en gang om dagen... ) fungere fint likevel, den bare glemmer gradminuttene den har spart opp, ser ok ut selv ved reboot midt i kompressordrift.
Funderer på om jeg ber den sende for mye data?
evt om PC ikke svarer raskt nok og skrur opp CPU..
evt om lang kabel til PC korrupter telegrammer så CPU restarter.

Hva gjør din?
Hvor ofte ber du om data?
FredRovers
Inlägg: 19
Blev medlem: 9 januari 2007, 21:24:41

Inlägg av FredRovers »

Jag har också lyckats att få pannan ar reboota men då har det nog varit jag som har skickat felaktigt data. Jag har faktiskt inte loggat under några längre tider så jag kan inte säga om jag får samma problem. När jag loggar så svarar jag 06 på alla adresseringar vilket blir maximal belastning. Du skulle ju kunna prova att endast svara var tionde sekund eller liknande för att se om det gör någon skillnad.
Skriv svar