Forum: Mikrocontroller und Digitale Elektronik Protokoll für einfache Kommunikation rs485


von Karl K. (leluno)


Lesenswert?

hallo,

ich will meinen Deye-Solar-Wechselrichter steuern. Dazu habe ich einen 
nano-AVR, der Lichteinfall, Batteriespannung, und Stellung des 
Lasttrennschalters misst und über zwei Relais den Lasttrennschalter und 
den Akku steuert. Funktioniert alles ohne größere Probleme. Lediglich 
die i2c-rtc und die Lcd-Anzeige sind manchmal - wohl aufgrund von 
Störimpulsen - weg. Deswegen will ich lcd und rtc auf einen zweiten Nano 
auslagern. uart-RS485-Kommunikation funktioniert auch - fast - 
fehlerfrei.
1
#if sender0_empfaenger1==0//Sender
2
if(sec%7==3)
3
  {
4
//0110006C0001020078 AF1E //crc-teststring
5
    u8 len=9;
6
    u16 crc=0;
7
    txBuffer[0]=0x01;
8
    txBuffer[1]=0x10;
9
    txBuffer[2]=0x00;
10
    txBuffer[3]=0x6c;
11
    txBuffer[4]=0x00;
12
    txBuffer[5]=0x01;
13
    txBuffer[6]=0x02;
14
    txBuffer[7]=0x00;
15
    txBuffer[8]=0x78;
16
17
  crc= function_crc( txBuffer,  len);
18
  txBuffer[len]  = crc & 255 ;
19
  txBuffer[len+1]= crc>>8  ;
20
21
  serial_tx(txBuffer,len+2);
22
  }
23
  
24
#else//empfänger  
25
  if(sec%7==3  
26
  && uart_str_rx[9]>0
27
  )
28
  {
29
    for (u8 i=0;i<15;i++)
30
    {
31
      lcd_goto(5+i,1);
32
      lcd_int4(uart_str_rx[i]);
33
    }
34
    
35
    u16  crc= function_crc( uart_str_rx,  9);
36
    uart_str_rx_ct=0;
37
    
38
    if(((crc>>8)==uart_str_rx[10]) && ((crc&255)==uart_str_rx[9]))
39
    {    
40
      lcd_goto(5+9,5);
41
      lcd_int4(crc&255);
42
      lcd_int4(crc>>8);
43
    }    
44
    memset(uart_str_rx, 0, 13);
45
  }
46
#endif

Jetzt geht es um das Protokoll. Wie macht man das am besten - wiederholt 
Senden bis vom Empfänger eine Bestätigung kommt oder z.B. 5mal Senden 
und der Empfänger steigt aus, wenn er korrekt empfangen hat?

Das ist sicher ein Problem, über das sich schon viele kluge Köpfe 
Gedanken gemacht haben. Gibt es vielleicht eine einfache 
Standard-Musterlösung?

: Bearbeitet durch User
von Rüdiger B. (rbruns)


Lesenswert?

Karl K. schrieb:
> Lediglich
> die i2c-rtc und die Lcd-Anzeige sind manchmal - wohl aufgrund von
> Störimpulsen - weg.

Fehlerquelle suchen, Watchdog Timer, Abblockkondensatoren....

von Nick (b620ys)


Lesenswert?

Karl K. schrieb:
> Gibt es vielleicht eine einfache Standard-Musterlösung?

Schau dir mal das ModBus-Protokoll an.

von Harald K. (kirnbichler)


Lesenswert?

Nimm Modbus-RTU. Das ist erprobt, dafür gibt es zig Testwerkzeuge und 
fertige Libraries auf so gut wie allen Plattformen.

Modbus-RTU bietet Fehlererkennung. Einerseits durch die Hardwareschicht 
der UART mit Parity- und Framingauswertung und andererseits durch 
16-Bit-CRC in jedem Telegramm. Ein Gerät ("Slave") kann ein fehlerhaftes 
Paket monieren (mit Modbus-Exceptions, der Gegenpart ("Master") kann 
wiederum bei fehlerhaften Paketen den zuletzt gesendeten Kram 
wiederholen.

Sofern nicht die Hardware besonders schrottig ist oder aber die 
Leitungen besonders ungünstig verlegt sind (z.B. um einen Wechselrichter 
gewickelt oder komplett auf Twisted-Pair verzichtet), treten im 
Normalbetrieb aber keine Fehler auf; Modbus-Verbindungen können jahre- 
und jahrzehntelang stabil arbeiten.

Ja, das Protokoll ist primitiv, da es genau zwei Datentypen kennt: Bit 
und 16-Bit-Wort. Aber es ist möglich und wird zigtausendfach 
praktiziert, auch größere Datentypen durch Zusammenfassen mehrerer 
16-Bit-Worte zu erhalten.

Das ist dann ein zusätzlicher Protokollayer, den man nur gut 
dokumentieren sollte. Die üblichen Modbus-Testprogramme (wie z.B. 
Modbus-Poll) kommen auch damit zurecht.

von Udo S. (urschmitt)


Lesenswert?

Karl K. schrieb:
> Funktioniert alles ohne größere Probleme. Lediglich
> die i2c-rtc und die Lcd-Anzeige sind manchmal - wohl aufgrund von
> Störimpulsen - weg.

Hier die Ursache suchen statt das System zusätzlich zu komplizieren wäre 
der bessere Weg.
Wie ist die Masseverbindung der unterschiedlichen Komponenten. Das ist 
eine häufige Störquelle.

Protokoll Modbus wie schon gesagt wurde.

von Michael B. (laberkopp)


Lesenswert?

Karl K. schrieb:
> wohl aufgrund von Störimpulsen - weg. Deswegen will ich lcd und rtc auf
> einen zweiten Nano auslagern

Falscher Ansatz.

Suche das Problem.
Schaffe nicht neue Probleme.

von Rainer W. (rawi)


Lesenswert?

Karl K. schrieb:
> "wohl aufgrund von Störimpulsen" hört sich nach blindem Raten an.
Guck, was wirklich das Problem ist und beseitige es.

Meinst du, dass es einfacher wird, wenn zusätzlich noch die beiden 
Controller miteinander kommunizieren sollen?

> Wie macht man das am besten - wiederholt Senden bis vom Empfänger eine
> Bestätigung kommt oder z.B. 5mal Senden und der Empfänger steigt aus,
> wenn er korrekt empfangen hat?

Fällt die Übertragung teilweise aus oder werden Daten fehlerhaft 
empfangen?
Wie lang sind deine Leitungen? Was gibt es für Störer in der Nähe?

Ohne die Art der Fehler zu kennen, kann man vieles probieren. Man kann 
die Zeichenkodierung ändern, also z.B. den Hammingabstand zwischen den 
Symbolen vergrößern, so dass Bitfehler erkannt und z.T. auch korrigiert 
werden können oder man kann eine Prüfsumme hinzufügen und bei 
Prüfsummenfehler die Daten neu anfordern - aber es kommt eben auf die 
Art der Fehler an.

Gegen Programmierfehler hilft das nichts.

: Bearbeitet durch User
von Nick (b620ys)


Lesenswert?

Karl K. schrieb:
> Lediglich die i2c-rtc und die Lcd-Anzeige sind manchmal

Bilder! :-)
Schon mal auf dem Oszi angesehen? Abschlusswiderstand richtig 
dimensioniert und verifiziert?

von Karl K. (leluno)



Lesenswert?

Nick schrieb:
> Abschlusswiderstand richtig

das ist eigentlich seit Jahren bewährte Technik. Der Zusammenhang 
"Umschalten der Stromquelle" ist auch relativ klar. Da entsteht manchmal 
ein Störimpuls, da das Hausnetz während des Umschaltens unterbrochen 
wird. Die Versorgung zum Nano wird natürlich nicht unterbrochen.

Nick schrieb:
> Bilder! :-)
ich bitte um Nachsicht für die noch provisorische Verkabelung der 
Steuerung - erstmal muss es richtig funktionieren.

Udo S. schrieb:
> Hier die Ursache suchen statt das System zusätzlich zu komplizieren wäre
> der bessere Weg.

Ich finde die Idee von zwei Nanos eigentlich nicht schlecht. Die können 
sich dann gegenseitig überwachen.

von Nemopuk (nemopuk)


Lesenswert?

Karl K. schrieb:
> Ich finde die Idee von zwei Nanos eigentlich nicht schlecht. Die können
> sich dann gegenseitig überwachen.

Normalerweise laufen Mikrocontroller jahrelang fehlerfrei durch. Ich 
würde lieber den Fehler beheben.

von Nick (b620ys)


Lesenswert?

Karl K. schrieb:
>> Bilder! :-)
> ich bitte um Nachsicht für die noch provisorische Verkabelung der
> Steuerung - erstmal muss es richtig funktionieren.

Schon OK. Ich hab nach scope-Bildern auf dem I2C gefragt ... oh ... 
gedacht gefragt zu haben. :-)

Wie lange ist denn die I2C-Leitung? Denn eigentlich ist das nur für 
kurze Strecken geplant gewesen. Es gibt zwar Isolatoren dafür, aber 
damit hab ich Null Erfahrungen.

von Rainer W. (rawi)


Lesenswert?

Karl K. schrieb:
> Ich finde die Idee von zwei Nanos eigentlich nicht schlecht. Die können
> sich dann gegenseitig überwachen.

Dafür wurde der WDT erfunden.

von Karl K. (leluno)


Lesenswert?

Nick schrieb:
> Wie lange ist denn die I2C-Leitung?

maximal 5cm auf der Streifenrasterplatine zum DS3231-Modul. Der 
gespeicherte Wert ist nach der Störung komplett weg - die rtc startet 
mit 1.1.2000 neu. Blöd weil ich eine Sonnenaufgangsfunktion hatte - geht 
aber mit der Messung des Lichteinfalls ohnehin besser.

von Hardy F. (hflor)


Lesenswert?

Was sagt Dein EVU zu dem fehlenden Abstandsflächen vor dem Zählerschrank 
und HAK?

von Harald K. (kirnbichler)


Lesenswert?

Hardy F. schrieb:
> Was sagt Dein EVU zu dem fehlenden Abstandsflächen vor dem Zählerschrank
> und HAK?

Zahlt der eigentlich Miete für die mehreren Quadratmeter, die der sich 
da so mittlerweile meint, fordern zu müssen?

von Michael B. (laberkopp)


Lesenswert?

Karl K. schrieb:
> Lediglich
> die i2c-rtc und die Lcd-Anzeige sind manchmal - wohl aufgrund von
> Störimpulsen - weg.

Karl K. schrieb:
> ich bitte um Nachsicht für die noch provisorische Verkabelung der
> Steuerung - erstmal muss es richtig funktionieren.

Wie soll es mit provisorischer Verkabelung störungsfrei funktionieren ?

Ich sehe Antennen, zum Aussenden von Störungen und Empfangen von 
Störungen und Masse wird kreuz und quer geführt.

Das ist keine elektronische Schaltung sondern ein Breakout Aufbau mit 
der Hoffnung daß es irgendwie glatt geht. Bloss muss die Hoffnung ja 
nicht immer erfüllt werden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.