Adresowanie urządzeń

Ten wpis dotyczy kolejowych modułów Arduino. Dowiesz się z niego:

Co to jest adresowanie sterowników?

Każdy sterownik urządzeń przytorowych musi posiadać przypisany adres. Dzięki temu można komunikować się z konkretnym urządzeniem.

Sterownik przechowuje swój adres na jeden z dwóch sposobów:

  • w pamięci, dzięki czemu adresowanie wystarczy wykonać jeden raz;
  • fizycznie, dzięki ustawieniu przełączników na płytce.

Jak odbywa się adresowanie?

Urządzenia wyposażone w mikroprzełączniki suwakowe adresowane są poprzez ustawienie odpowiedniej konfiguracji przełączników. Adres ustawiany jest w kodzie dwójkowym.

Urządzenia niewyposażone w mikroprzełączniki suwakowe, adresowane są poprzez wysłanie polecenia adresującego.

Zakres adresów

Zakres adresów sterowników to od 10 do 127.

Domyślny adres

Domyślnie każdy nowy moduł ma przypisany adres, zależnie od rodzaju urządzenia:

Typ urządzeniaKod produktuAdres
Moduł semafora00xx10
Moduł rozjazdów03xx20
Moduł niezajętości torów02xx30
Moduł pulpitu22xx50
Urządzenia wyposażone w przełączniki do adresowania, nie wymagają nadawania adresu poprzez inne urządzenie.

Co to są kanały?

Sterowniki oraz czujniki mogą obsługiwać jedno lub kilka urządzeń przytorowych. Określane jest to liczbą kanałów. Liczba kanałów odpowiada liczbie wejść lub wyjść danego sterownika.

Dozwolony zakres kanałów zależy od konkretnego modelu urządzenia, zazwyczaj od 1 do 4.

Adresowanie obiektów urządzeń przytorowych w kodzie programu

Adresowanie sterowników odbywa się poprzez wysłanie do urządzenia odpowiedniej ramki danych. Można to zrobić z wykorzystaniem odpowiedniego programu w urządzeniu, do którego podłączony jest sterownik.

Przykład

W tym przykładzie wykorzystamy płytkę Arduino Uno z podłączonymi sterownikami. Do napisania programu do adresującego sterowniki wykorzystamy bibliotekę trainbrains SDK. W tym celu należy pobrać bibliotekę i dołączyć ją do projektu. Zależnie od środowiska będzie się to odbywało nieco inaczej.

Pełny kod do tego przykładu możesz pobrać z repozytorium trainbrains.

Projekt

Załóżmy, że budujemy makietę z 3 rozjazdami. Wykorzystamy 2 moduły sterowników napędów rozjazdów:

  • Jednokanałowy sterownik punktu pod adresem 20
  • Dwukanałowy sterownik punktowy pod adresem 21

Napędy zwrotnic są podłączone do sterowników w następujący sposób:

  • Napęd zwrotnicy 1 jest podłączony do sterownika pod adresem 20, kanał 1;
  • Napęd zwrotnicy 2 jest podłączony do sterownika pod adresem 21, kanał 1;
  • Napęd zwrotnicy 3 jest podłączony do sterownika pod adresem 21, kanał 2;

Krok 1. Deklaracja urządzeń przytorowych

Deklarujemy w kodzie programu jakimi urządzeniami przytorowymi będziemy sterować. Można to zrobić na przykład w ten sposób:

C++
#include <Arduino.h>
#include "TrainbrainsModules.h"

TrainbrainsModules *modules = new TrainbrainsModules();

PointRef point1 = new Point(20, "Point 1");
PointRef point2 = new Point(21, 1, "Point 2");
PointRef point3 = new Point(21, 2, "Point 3");

void setup()
{
  modules->init();
}

Domyślnym numerem kanału jest 1. W tym przypadku nie trzeba podawać go ręcznie.

Krok 2. Wysłanie polecenia adresującego

Polecenia adresujące są rozsyłane do wszystkich podłączonych urządzeń.

Aby uniknąć sytuacji, w której wszystkie podłączone urządzenia zostaną zaadresowane w ten sam sposób, urządzenie musi pracować w trybie adresowania.

W tym celu należy jednokrotnie nacisnąć przycisk na wybranym urządzeniu. Dopiero wówczas poleceni adresujące zostanie przyjęte.

Najprostszym (choć niekoniecznie najlepszym 😉 ) sposobem na zaadresowanie urządzeń jest:

  • przygotowanie pętli programu tak, aby wysyłała polecenie adresujące do wskazanego urządzenia;
  • wgrać programu do urządzenia nadrzędnego;
  • powtórzenie tego procesu dla kolejnych urządzeń.
C++
void loop()
{
  modules->addressDevice(point1);
  //modules->addressDevice(point2);
  //modules->addressDevice(point3);

  // Give it some brake as the adressing will be performed only once;
  delay(2000);
}

W przypadku kilku urządzeń przytorowych podłączonych do tego samego sterownika, adresowanie wystarczy wykonać tylko raz, dla jednego z obiektów.

Pełny kod tego przykładu możesz pobrać tutaj.

To już prawie wszystko

Hej!

Mam nadzieję, że ten wpis jest dla Ciebie wartościowy. Może chcesz pomóc w rozwoju tych materiałów? Wystarczy, że zostawisz poniżej komentarz co o nim myślisz, czego Ci zabrakło lub co Twoim zdaniem trzeba poprawić albo dasz mu łapkę w gorę 👍

Otrzymuj informacje o nowych ciekawych materiałach. Dołącz do newslettera trainbrains!

Leave a Reply