-
1. Data: 2014-04-06 22:30:24
Temat: Modbus, mierzenie odstępu między znakami i paczkami
Od: "Robbo" <n...@g...com>
Witam uprzejmie,
Tworzę bibliotekę Modbus/RTU w języku C, łącze szeregowe, slave, która
będzie działać na mikrokontrolerze ATmega. Korzystam ze sprzętowego USART-a
w ATmega. Zgodnie ze standardem Modbus dla łącza szeregowego, odstęp między
znakami w pojedynczej paczce nie może być większy niż 1,5 *
czas_przesyłania_pojedynczego_znaku. Natomiast odstęp między paczkami
powinien być większy niż 3,5 * czas_przesyłania_pojedynczego_znaku. Jest to
pokazane na stronie nr 13 tego dokumentu:
http://modbus.org/docs/Modbus_over_serial_line_V1_02
.pdf
Żeby dokonywać pomiarów zgodnie z tym, jako pokazano to w standardzie,
powinienem wiedzieć, kiedy kończy się transmisja znaku i kiedy zaczyna się
transmisja kolejnego znaku. Ponieważ korzystam ze sprzętowego USART-a i
przerwania SIG_UART_RECV, to wiem tylko, kiedy kończy się transmisja znaku.
Wstępnie postanowiłem korzystać z SIG_UART_RECV (informacja w momencie
zakończenia przesyłania znaku) i mierzyć czas między znakami jako 2,5 *
czas_przesyłania_pojedynczego_znaku oraz czas między paczkami jako 4,5 *
czas_przesyłania_pojedynczego_znaku. Chciałem zapytać, czy takie podejście
do tematu będzie prawidłowe?
Przygotowałem ilustrację graficzną:
http://s11.postimg.org/43qi83etf/Modbus.png
Pozdrawiam,
Robbo
-
2. Data: 2014-04-07 09:40:52
Temat: Re: Modbus, mierzenie odstępu między znakami i paczkami
Od: John Smith <d...@b...pl>
On 06-04-2014 22:30, Robbo wrote:
> Witam uprzejmie,
>
> Tworzę bibliotekę Modbus/RTU w języku C, łącze szeregowe, slave, która
> będzie działać na mikrokontrolerze ATmega. Korzystam ze sprzętowego
> USART-a w ATmega. Zgodnie ze standardem Modbus dla łącza szeregowego,
> odstęp między znakami w pojedynczej paczce nie może być większy niż 1,5
> * czas_przesyłania_pojedynczego_znaku. Natomiast odstęp między paczkami
> powinien być większy niż 3,5 * czas_przesyłania_pojedynczego_znaku. Jest
> to pokazane na stronie nr 13 tego dokumentu:
> http://modbus.org/docs/Modbus_over_serial_line_V1_02
.pdf
> Żeby dokonywać pomiarów zgodnie z tym, jako pokazano to w standardzie,
> powinienem wiedzieć, kiedy kończy się transmisja znaku i kiedy zaczyna
> się transmisja kolejnego znaku. Ponieważ korzystam ze sprzętowego
> USART-a i przerwania SIG_UART_RECV, to wiem tylko, kiedy kończy się
> transmisja znaku. Wstępnie postanowiłem korzystać z SIG_UART_RECV
> (informacja w momencie zakończenia przesyłania znaku) i mierzyć czas
> między znakami jako 2,5 * czas_przesyłania_pojedynczego_znaku oraz czas
> między paczkami jako 4,5 * czas_przesyłania_pojedynczego_znaku. Chciałem
> zapytać, czy takie podejście do tematu będzie prawidłowe?
>
> Przygotowałem ilustrację graficzną:
> http://s11.postimg.org/43qi83etf/Modbus.png
Jeżeli chcesz być pewny zależności czasowych, to pomiar robisz
oscyloskopem albo analizatorem cyfrowym.
Mikrokontrolery mogą mieć bufory sprzętowe i zmienić zależności czasowe
między wysyłanymi znakami.
K.
-
3. Data: 2014-04-07 09:56:15
Temat: Re: Modbus, mierzenie odstępu między znakami i paczkami
Od: pytajacy <r...@p...fm>
Zobacz tutaj:
http://freemodbus.berlios.de/
pytajacy
-
4. Data: 2014-04-07 14:53:37
Temat: Re: Modbus, mierzenie odstepu miedzy znakami i paczkami
Od: "Robbo" <n...@g...com>
Nie mam pewnosci, ale we Freemodbus wyglada troche tak, jakby nie
przejmowali sie odleglosciami miedzy znakami (1,5 * T), a jedynie
odleglosciami miedzy ramkami (3,5 * T). Bazuja zdaje sie na SIG_UART_RECV
tak, jak ja to chcialem zrobic. Przy czym takze wyglada na to, ze licza czas
3,5 * T, a nie 4,5 * T jak to chyba powinno byc, gdy mamy pomiar tylko po
przeslaniu znaku, a nie po przeslaniu znaku i na poczatku przesylania.
Nie za bardzo rozumiem zadnie (plik mbrtu.c we Freemodbus), a moze jest ono
istotne:
"* The reload for t3.5 is 1.5 times this value and similary
* for t3.5."
Pozdrawiam,
Robbo
-
5. Data: 2014-04-07 18:16:05
Temat: Re: Modbus, mierzenie odstępu między znakami i paczkami
Od: "michal" <...@b...pl>
Użytkownik "Robbo" <n...@g...com> napisał w wiadomości
news:5341b961$0$2228$65785112@news.neostrada.pl...
> Witam uprzejmie,
>
> Tworzę bibliotekę Modbus/RTU w języku C, łącze szeregowe, slave, która
> będzie działać na mikrokontrolerze ATmega. Korzystam ze sprzętowego
> USART-a w ATmega. Zgodnie ze standardem Modbus dla łącza szeregowego,
> odstęp między znakami w pojedynczej paczce nie może być większy niż 1,5 *
> czas_przesyłania_pojedynczego_znaku. Natomiast odstęp między paczkami
> powinien być większy niż 3,5 * czas_przesyłania_pojedynczego_znaku. Jest
> to pokazane na stronie nr 13 tego dokumentu:
> http://modbus.org/docs/Modbus_over_serial_line_V1_02
.pdf
> Przygotowałem ilustrację graficzną:
> http://s11.postimg.org/43qi83etf/Modbus.png
>
> Pozdrawiam,
> Robbo
czesc.
w mojej opinii (niekoniecznie prawidlowej) najprosciej zrobić to za
pomocą timera uruchamianego właśnie w obsłudze SIG_UART_RECEIVE
uruchamiasz timer i kolejne przerwanie SIG_UART_RECEIVE kasuje timer
a jak nie zdąży to w przerwaniu timera musisz ocenić czy błąd transmisji czy
koniec ramki przy czym ja zrobiłbym tylko warunek na koniec ramki (by nie
mieć
kłopotów z tym że komuś uart/(program właściwie) w drugim urządzeniu nie
wyrabia - gdy transmisja błędna to i tak wyjdzie za pomocą crc - format
ramki jest dość sztywny) tym ze przeranie jest na końcu a nie na początku
znaku
przejmowałbym się najmniej, uart jak zacznie odbierać to musi odebrać do
konca.
pozdrawiam.
michal
-
6. Data: 2014-04-09 09:50:39
Temat: Re: Modbus, mierzenie odst?pu mi?dzy znakami i paczkami
Od: John Smith <d...@b...pl>
> czesc.
> w mojej opinii (niekoniecznie prawidlowej) najprosciej zrobiae to za
> pomoc? timera uruchamianego w?a?nie w obs?udze SIG_UART_RECEIVE
> uruchamiasz timer i kolejne przerwanie SIG_UART_RECEIVE kasuje timer
To rozwiązanie nie uwzględnia buforowania sprzętowego w uC, obsługi
przerwań, itp.
K.