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

Modbus w Bascom: Optymalizacja odczytu wielu parametrów z miernika sieci

lolek50 07 Mar 2021 19:15 528 4
REKLAMA
  • #1 19303225
    lolek50
    Poziom 10  
    MAma taki temat dotyczący Modbusa w Bascom.
    Dzięki koledze BART-projects uruchomiłem sczytywanie danych z miernika parametrów sieci. Do czytania wielu parametrów użyłem Timera, który co ok 0,5 sekundy sczytuje dane i wyświetla je na wyświetlaczu i ok. Jednak jak chce się czytać dane dla 3 faz - 12 parametrów jednocześnie to zabiera trochę czasu.
    Sam miernik daje możliwość złożenia zapytania do odczytu max 20 rejestrów.
    Czy jest szansa aby w Bascomie przy wykorzystaniu funkcji makemodbus odczytać kilka rejestrów za jednym razem?


     if x=2 then
    
           If Licz_8ms = 5 or Licz_8ms = 6 or Licz_8ms = 7 Then
    
    
    
           Print#1 , Makemodbus(&H01 , 4, &H34 , 4);
    
    
           Waitms 200
    
    
           end if
    
    
          If Ischarwaiting(#1) <> 0 Then
    
          Incr Idx
    
          waitms 10
    
          Bufor(idx) = Waitkey(#1)
    
          If Idx = 7  Then
    
          For N = 1 To 4
          Arr(n) = Bufor(8 - N)
          Next
    
         Locate 2,11
         LCD Fusing (test,"#.##")
         Locate 2,16
         LCD "W"
         cursor off
    
         end if
         end if
    
     end if
    
    Loop
    
    End
    
    
    Co1s:
    load Timer0, 250
    Incr Licz_8ms
    
    If Licz_8ms = 60 Then
    Incr x
    Licz_8ms = 0
    
    End If
    
    if x = 3 then
    x =0
    end if
    
    Return
  • REKLAMA
  • #2 19304221
    kamyczek
    Poziom 38  
    Przeczytaj dokumentację modułu i protokołu tam będzie napisane jaką procedurę obsługuje odczyt i jak długo ona trwa z tego wynika to co można wyciągnąć z modbus . Generalnie to niezbyt szybki protokół oparty o uarta więc nie spodziewaj się cudów .
  • REKLAMA
  • #3 19306235
    bart-projects
    Poziom 29  
    W czym problem? Funkcją Modbus mozesz zapytać sterownik o jeden lub o kilka rejestrów na raz. W zapytaniu podajesz ile rejestrów chcesz otrzymać i od jakiego adresu.

    Ten kod który masz jest trochę za prosty. Gotowy przykład jest w Samplach Bascom`a (zajrzyj do katalogu Serial i Modbus_slave, Modbus_master)

    Chodzi o to że tam po adresie slave`a otrzymasz też informację ile bajtów bedzie przesyłał/zwracał sterownik PLC. Czekasz aż spłyną wszystkie bajty i analizujesz - to taki niepewny jeszcze sposób bo komunikacja może się zerwać i tych danych nie doczekasz a Twój kod bedzie czekał.

    Lepiej jest zrobić tak jak w przykładzie Slave. Tam Timer czeka na dane w ten sposób że po otrzymaniu jakiegoś Bajtu czeka na następny ale tylko półtora długości czasu potrzebnego na jego przesłanie - nic nie nadeszło to znak że transmisja zakończona i dopiero analizujesz lub sprawdzasz najpierw CRC.

    Można to więc rozwiązać na kilka sposobów - dla mniej leniwych preferowane jest rozwiązanie z Timerem.
  • REKLAMA
  • #4 19315856
    lolek50
    Poziom 10  
    ok dzięki za podpowiedź, będę kombinował :)
REKLAMA