Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Wysyłanie protokołu RS w C#

juli126 05 Kwi 2012 22:39 1018 5
  • #1 05 Kwi 2012 22:39
    juli126
    Poziom 8  

    Witam,
    chciałbym się dowiedzieć jak działa protokoły.
    Interesuje mnie protokół Protokół Modbus ASCII.
    Czytałem o nim, ale nie doczytałem się jak to dokładnie działa.
    Wiem ze protokół składa się z ramki(ma określoną wielkość), która jest podzielona części.
    ADRES POCZĄTKOWY(1znak) | ADRES(2znaki) | FUNKCJA(2znaki) | DANE(N x 2 znaki) | LRC(2znaki) | ZNACZNIK KOŃCA (znaki)

    teraz moje pytania, do tej ramki to :
    jeśli bym pisał program, który wysyła taką ramkę, to jak to zakodować w C#.

    0 5
  • #2 05 Kwi 2012 23:11
    maciej_333
    Poziom 34  

    Skoro Modbus ASCII, to pamiętaj, że wysyłamy i odbieramy bajty szesnastkowo w ASCII. Ramka składa się jeszcze ze znacznika początku (: - 0x3A). Znacznik końca to CR LR. Jedynie znaczniki nie są przesyłane we wspomniany sposób. Po szczegóły odsyłam tu: http://www.simplymodbus.ca/ASCII.htm

    0
  • #3 05 Kwi 2012 23:16
    juli126
    Poziom 8  

    a co chodzi z tym wysyłaniem i odbieraniem bajtów szesnastkowo??

    0
  • #4 05 Kwi 2012 23:31
    maciej_333
    Poziom 34  

    Wyraźnie opisali to w podanym linku. Jeśli mamy do przesłania np. bajt 169 (dziesiętnie), to jest to 0xA9 szesnastkowo. Musimy zatem wysłać dwa bajty A i 9. Jednak te dwa półbajty kodujemy w ASCII - tzn. wysyłamy kolejno 0x41, 0x39.

    0
  • #5 05 Kwi 2012 23:50
    juli126
    Poziom 8  

    napiszę przykład, żebyś mógł mi odp czy dobrze zrozumiałem
    jeśli chce wysłać słowo np dom 160(0xA0) to muszę to zakodować w ASCII, czyli:
    0x61,0x 0x6F,0x6D, 0x41,0x30

    i przy odbieraniu jest to dekodowane przez ASCII do znaków systemowych.

    Możesz mi napisać przykład, jak by wyglądało wysłanie takich bajtów w protokole Modbus ASCII jako cała ramka.

    0
  • #6 06 Kwi 2012 00:04
    maciej_333
    Poziom 34  

    Nie mam pojęcia o co chodzi w tym przykładzie. Kiedyś z kolegą wykonałem pewne urządzenie. Przykładowa ramka (jedna z wielu - najprostsza) wyglądała tak: : 0 F 0 P D 8 CR LR. Zatem należało przesłać bajty: 0x3A, 0x30, 0x46, 0x30, 0x50, 0x44, 0x38, 0x0D, 0x0A. Tutaj 0x0F to adres slave, P - polecenie, dane polecenia - brak, 0xD8 - LRC.

    0