logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

H8/3048 modbus rtu odbiór ramki

seba582 30 Sie 2009 11:38 4105 10
REKLAMA
  • #1 6959965
    seba582
    Poziom 10  
    Witam. Mam problem z przepisaniem w całości odebranej ramki do bufora odbiorczego. Przepisane są tylko dwa początkowe znaki ramki, reszta jest tracona. Problem banalny a jednak jest.
  • REKLAMA
  • #2 6960871
    markosik20
    Poziom 33  
    I co w związku z tym?
  • REKLAMA
  • #3 6961439
    seba582
    Poziom 10  
    Dokładnie prawdopodobnie problem dotyczy przerwań. Ramkę odbieram w założonym czasie zliczania przez timer w przerwaniu. Założony czas wystarczy na całkowity odbiór ramki a jednak tak nie jest. Może ktoś miał ten sam problem. Dodatkowo założyłem odpowiednio priorytety przerwań, ale nic to nie pomogło.
  • #4 6961624
    markosik20
    Poziom 33  
    Wobec tego na pewno prawdopodobnie masz problem z tą zmienną jaką inkrementujesz w przerwaniu :wink:.
  • #5 6962524
    august_a
    Poziom 21  
    a może jakiś kawałek kodu umieścisz??
  • #6 6962996
    seba582
    Poziom 10  
    Kawałek kodu :)

    data = SCI1_RDR;

    if (counter<=73)
    buffer[counter] = data;
    counter++;
  • REKLAMA
  • #7 6971606
    seba582
    Poziom 10  
    Czy ktoś pisał może protokół modbus rtu na tym uP
  • REKLAMA
  • #8 7054069
    jabu74 - ekspert
    Poziom 19  
    Może nie przyszły jeszcze następne dane, a ty za szybko zapisujesz z bufora odbioru do tablicy buffer[] ?

    Jakiego typu jest zmienna data ? czy to char ?
  • #9 7066622
    seba582
    Poziom 10  
    Typ zmiennej to unsigned char. Odbiór i wysyłanie zaczął mi działać lecz tylko z prędkością jak na razie 2400 kB.
  • #10 7066670
    jabu74 - ekspert
    Poziom 19  
    z tego fragmentu kodu wynika, że nie masz synchronizacji. musi być gdzieś w specjalnym rejestrze bit ktory jest ustawiany gdy bufor odbioru jest pełny (przyszedł bajt). pewno trzeba sprawdzać ten bit i zsynchronizować z nim zapis do tablicy kolejnych przychodzących bajtów.
  • #11 7066779
    seba582
    Poziom 10  
    OK działa problem polegał na ponownym włączeniu sterownika po zmianie prędkości transmisji. Obecnie poszukuje procedury zamiany liczby szesnastkowej na wartość zmiennoprzecinkową float.
REKLAMA