Modbus Baudrate

rage
Benutzer
Avatar
Geschlecht: keine Angabe
Alter: 65
Homepage: processanalytik.de
Beiträge: 237
Dabei seit: 02 / 2007
Betreff:

Modbus Baudrate

 · 
Gepostet: 16.10.2020 - 12:42 Uhr  ·  #1
Guten Tag,

ich müsste beim Modbustreiber die Baudrate zur Laufzeit festlegen können. Getestet habe ich schon mit SetSerBaud(UsartXX,9600) dies zu ändern. Leider zeigt das keine Wirkung. Hat irgendwer das schonmal gemacht, oder kann man das nachrüsten?
Danke schonmal.

cu rage
pvs-deck
PowerUser
Avatar
Geschlecht:
Alter: 54
Beiträge: 1343
Dabei seit: 02 / 2009
Betreff:

Re: Modbus Baudrate

 · 
Gepostet: 16.10.2020 - 18:35 Uhr  ·  #2
Zitat geschrieben von rage

Guten Tag,

ich müsste beim Modbustreiber die Baudrate zur Laufzeit festlegen können. Getestet habe ich schon mit SetSerBaud(UsartXX,9600) dies zu ändern. Leider zeigt das keine Wirkung. Hat irgendwer das schonmal gemacht, oder kann man das nachrüsten?
Danke schonmal.

cu rage


Hallo rage,

ich mache das meistens nur beim booten.
Da hatte ich bis jetzt noch keine Probleme.

Ich meine da gab es aber schon mal eine Anfrage im Forum.
Thorsten
Mathias
Benutzer
Avatar
Geschlecht: keine Angabe
Herkunft: Weingarten - Baden
Beiträge: 315
Dabei seit: 07 / 2003
Betreff:

Re: Modbus Baudrate

 · 
Gepostet: 17.10.2020 - 10:11 Uhr  ·  #3
Habe es bei den xMegas noch nicht getestet.
Bei den "normalen" geht's.

SerBaud (SerBaud1, SerBaud2, SerBaud3, SerBaud4)
XMega
SetSerBaud
Stellt die BaudRate der seriellen Schnittstelle zur Laufzeit ein.

SerBaud(19200);
XMega
SetSerBaud(UsartC0, 19200);

Hier gibt's noch einen Hinweis:
https://www.kampis-elektroecke…ega-usart/
rage
Benutzer
Avatar
Geschlecht: keine Angabe
Alter: 65
Homepage: processanalytik.de
Beiträge: 237
Dabei seit: 02 / 2007
Betreff:

Re: Modbus Baudrate

 · 
Gepostet: 23.10.2020 - 14:40 Uhr  ·  #4
Guten Tag.

Ich war schon fast am verzweifeln, weil genau die Routine SetSerBaud(UsartE1,9600) nicht funktioniert. In der Konfiguration ist
Code
  
SerPortE1      = 19200, Databit8, parNone, Stop1;

eingestellt und wenn ich dann im Programm die Routine SetSerBaud(UsartE1,9600) aufrufe, bewirkt die garnix. Nach langen Rumprobieren habe ich jetzt
Code
  
SerPortE1      = 9600, Databit8, parNone, Stop1;

eingestellt und danach funktioniert die Routine SetSerBaud(UsartE1,xxx) wie erwartet. Nun könnte man das ja so lassen, aber ich weiss immer gerne was da so passiert. Hat irgendwer eine Idee warum das so ist. Vieleicht Avra?

cu Ralf
Avra
Schreiberling
Avatar
Geschlecht:
Herkunft: Belgrade, Serbia
Alter: 54
Homepage: rs.linkedin.com/in…
Beiträge: 653
Dabei seit: 07 / 2002
Betreff:

Re: Modbus Baudrate

 · 
Gepostet: 25.10.2020 - 23:11 Uhr  ·  #5
Zitat geschrieben von rage

Nun könnte man das ja so lassen, aber ich weiss immer gerne was da so passiert. Hat irgendwer eine Idee warum das so ist. Vieleicht Avra?

If I understood online translation well, there can be several things. Modbus driver does not have anything with baud rate. AvrCo takes care of that. Modbus RTU driver is using 1 timer and 1 process for it's work. So if there is runtime confusion, maybe stopping processes, disabling interrupts, changing baud rate, then enabling interrupts and starting processes could help. You could avoid all that if you set your baud rate only during initialization of your board (like reading from DIP switches). You should also be aware that not all OscType combinations are good for all baud rates. You might have big errors in communication if you do not think about it. So maybe you could use some online baud rate calculator to see how your desired baud rates fit: https://www.dolman-wim.nl/xmeg…/index.php.
Gewählte Zitate für Mehrfachzitierung:   0

Registrierte in diesem Topic

Aktuell kein registrierter in diesem Bereich

Die Statistik zeigt, wer in den letzten 5 Minuten online war. Erneuerung alle 90 Sekunden.
MySQL Queries: 15 · Cache Hits: 14   92   106 · Page-Gen-Time: 0.041896s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI