Witam,
Zacząłem obsługę standardu MODBUS RTU. Na wstępie wziąłem pod rozpatrzenie biblioteki FreeMODBUS BerliOS.
Udało mi się to uruchomić wstępnie bez problemów dla AVR na prockach typu ATmega8 czy ATmega32 działa ok
Tylko pytanie:
Czy ktoś używał z szanownych kolegów tych bibliotek (już nawet nie ważne czy dla AVR czy dla innych procków) i mógłby mi podpowiedzieć jedno -
- w którym momencie można sobie obsłużyć jakieś polecenia z Mastera zakładając, że potrzebujemy na ich wykonanie niech będzie że aż 2 sekundy!
Program składa się z pętli głównej w której cyklicznie wywoływana jest funkcja:
Obsłużyłem sobie poprawnie dwa wywołania funkcji typu Callback dla komend Read i Write Holding Registers (0x03 oraz 0x16). Czyli Master ładnie może mi coś podawać a ja mogę odpowiadać.
Jeśli potrzebuję dla celów testowych zapalić diodę LED to np po funkcji eMBPool(); sprawdzam sobie zawartość jednego z rejestrów i w zależności od jego wartości zapalam lub gaszę diodę LED - wszystko super.
Ale jeśli teraz zamiast diody LED muszę coś wykonać co przyblokuje mi cały procek (muszę załóżmy wyłączyć nawet wszystkie przerwania) kosztem TimeOuta dla Mastera jeśli w tym czasie będzie chciał coś "zagadać".
To gdy próbuję to wykonać w pętli głównej i potem znowu zacząć ją normalnie wykonywać to niestety jakaś czkawka się robi, Master najpierw po kolejnym zapytaniu nie dostaje odpowiedzi - czyli jest Timeout chociaż już nie powinien być przecież bo już wykonuje się pooling.
Poza tym, jak podglądam latające ramki - to w trakcie gdy zaczynam wykonywać tą swoją mozolną operację 2 sekundową to ramki się nagle urywają, rozumiem, że są wysyłane na przerwaniach ale wprowadzenie jakiejś zwłoki przed moją operacją zanim wyłączę przerwania też nic nie daje
Może jakoś źle podchodzę do tego zagadnienia??? - jakaś sugestia ????
Zacząłem obsługę standardu MODBUS RTU. Na wstępie wziąłem pod rozpatrzenie biblioteki FreeMODBUS BerliOS.
Udało mi się to uruchomić wstępnie bez problemów dla AVR na prockach typu ATmega8 czy ATmega32 działa ok
Tylko pytanie:
Czy ktoś używał z szanownych kolegów tych bibliotek (już nawet nie ważne czy dla AVR czy dla innych procków) i mógłby mi podpowiedzieć jedno -
- w którym momencie można sobie obsłużyć jakieś polecenia z Mastera zakładając, że potrzebujemy na ich wykonanie niech będzie że aż 2 sekundy!
Program składa się z pętli głównej w której cyklicznie wywoływana jest funkcja:
( void )eMBPoll( );Obsłużyłem sobie poprawnie dwa wywołania funkcji typu Callback dla komend Read i Write Holding Registers (0x03 oraz 0x16). Czyli Master ładnie może mi coś podawać a ja mogę odpowiadać.
Jeśli potrzebuję dla celów testowych zapalić diodę LED to np po funkcji eMBPool(); sprawdzam sobie zawartość jednego z rejestrów i w zależności od jego wartości zapalam lub gaszę diodę LED - wszystko super.
Ale jeśli teraz zamiast diody LED muszę coś wykonać co przyblokuje mi cały procek (muszę załóżmy wyłączyć nawet wszystkie przerwania) kosztem TimeOuta dla Mastera jeśli w tym czasie będzie chciał coś "zagadać".
To gdy próbuję to wykonać w pętli głównej i potem znowu zacząć ją normalnie wykonywać to niestety jakaś czkawka się robi, Master najpierw po kolejnym zapytaniu nie dostaje odpowiedzi - czyli jest Timeout chociaż już nie powinien być przecież bo już wykonuje się pooling.
Poza tym, jak podglądam latające ramki - to w trakcie gdy zaczynam wykonywać tą swoją mozolną operację 2 sekundową to ramki się nagle urywają, rozumiem, że są wysyłane na przerwaniach ale wprowadzenie jakiejś zwłoki przed moją operacją zanim wyłączę przerwania też nic nie daje
Może jakoś źle podchodzę do tego zagadnienia??? - jakaś sugestia ????