Modbus Baudrate

rage
Benutzer
Avatar
Gender: n/a
Age: 64
Homepage: processanalytik.de
Posts: 235
Registered: 02 / 2007
Subject:

Modbus Baudrate

 · 
Posted: 16.10.2020 - 10:42  ·  #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
Gender:
Age: 52
Homepage: pvs-deck.de
Posts: 1340
Registered: 02 / 2009
Subject:

Re: Modbus Baudrate

 · 
Posted: 16.10.2020 - 16:35  ·  #2
Quote by 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
Gender: n/a
Location: Weingarten - Baden
Posts: 307
Registered: 07 / 2003
Subject:

Re: Modbus Baudrate

 · 
Posted: 17.10.2020 - 08:11  ·  #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
Gender: n/a
Age: 64
Homepage: processanalytik.de
Posts: 235
Registered: 02 / 2007
Subject:

Re: Modbus Baudrate

 · 
Posted: 23.10.2020 - 12:40  ·  #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
Gender:
Location: Belgrade, Serbia
Age: 53
Homepage: rs.linkedin.com/in…
Posts: 653
Registered: 07 / 2002
Subject:

Re: Modbus Baudrate

 · 
Posted: 25.10.2020 - 22:11  ·  #5
Quote by 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.
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   92   106 · Page-Gen-Time: 0.029359s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI