Transmisja danych RS485_RS422

Pytania, kody i porady dotyczące nie tylko Bascom.
ODPOWIEDZ
Awatar użytkownika
Henryk
Posty: 348
Rejestracja: 22 sty 2018, 17:20

Re: Transmisja danych RS485_RS422

Post autor: Henryk » 09 sty 2019, 18:49

Witaj Bartek :D
Nie zawsze potrafię wyrazić słowami co w myślach się kłębi ;)
Dziękuje za podpowiedź , za chwilę przetestuję .
Baskoma mam 2.0.8.1 kompiluje moje pomysły bez problemu :D to co ja napisałem również działa w takiej zmodyfikowanej formie .
  1.  $regfile = "m8def.dat"
  2.    $crystal = 8000000
  3.    $hwstack = 40
  4.    $swstack = 16
  5.     $framesize = 32
  6.     $baud = 1200
  7.   'Config Serialout = Buffered , Size = 64
  8.   Dim X As Byte , Tab1(19) As Byte , Tab2(6) As Byte
  9.  
  10.   Tab1(1) = 1       'xxx wstawię odpowiednie wartości
  11.   Tab1(2) = 1       'xxx
  12.   Tab1(3) = 1       'xxx
  13.   Tab1(4) = 1       '
  14.   Tab1(5) = 1       '
  15.   Tab1(6) = 1       '
  16.   Tab1(7) = 1       '
  17.   Tab1(8) = 1       '
  18.   Tab1(9) = 1       'xxx
  19.   Tab1(10) = 2       '
  20.   Tab1(11) = 2       '
  21.   Tab1(12) = 2       '
  22.   Tab1(13) = 2       '
  23.   Tab1(14) = 2       '
  24.   Tab1(15) = 2       '
  25.   Tab1(16) = 0       '
  26.   Tab1(17) = 0       '
  27.   Tab1(18) = 6       'xxx
  28.   X = Crc8(tab1(1) , 18)
  29.   Tab1(19) = X
  30.  
  31.   Tab2(1) =1       'xxx
  32.   Tab2(2) = 1       '
  33.   Tab2(3) = 1      '
  34.   Tab2(4) = 11       '
  35.   Tab2(5) = 33       'xxx
  36.   X = Crc8(tab2(1) , 5)
  37.   Tab2(6) = X
  38.  
  39.     Do
  40.  
  41.      Printbin Tab1(1) ; Tab1(2) ; Tab1(3) ; Tab1(4) ; Tab1(5) ; Tab1(6) ; Tab1(7) ; Tab1(8) ; Tab1(9) ; Tab1(10) ; Tab1(11) ; Tab1(12) ; Tab1(13) ; Tab1(14) ; Tab1(15) ; Tab1(16) ; Tab1(17) ; Tab1(18) ; Tab1(19)
  42.       Waitms 300
  43.        Printbin Tab2(1) ; Tab2(2) ; Tab2(3) ; Tab2(4) ; Tab2(5) ; Tab2(6)
  44.        Waitms 300
  45.  
  46.      Loop
  47.     End
musiałem tylko pozbyć się bufora , ale mniejsza z tym , transmisja śmiga za szybko względem oryginalnej .
Ćwiczę umysł dalej ;)
Awatar użytkownika
niveasoft
Posty: 1213
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Transmisja danych RS485_RS422

Post autor: niveasoft » 09 sty 2019, 19:40

No forma na pewno musiała być zmodyfikowana. Po prostu mój jak spodziewa sie tablicy to nie nadasz czegoś takiego i to na pewno się nie kompiluje:
  1. Print Tab1 ; Waitms 100 ; Tab2
bo Tab1 i Tab2 to tablice i musisz jakiś indeks podać.
Tylko dlatego podejrzewałem jakiś inny Bascom bo nowe nie pozwalają na takie błędy.

Ale ja nie o tym.
Do takich zadań, czytaj "rozkminianie" to, jeśli masz jakieś wolne 40zł kupic takie cuś LINK

To nie dość że pozwala analizować transmisję/otrzymane zera i jedynki, ale tez pokazuje dokładny czas pomiędzy ramkami. To naprawdę ułatwia coś co może być mordęgą lub z takim urządzonkiem dużo łatwiejsze.
Przykładowo zerkasz na jakiś nadany Bajt i jego czas.. dzielisz sekundę przez ten czas, mnożysz x 8 i masz bits/s czyli Baudrate.
Potem możesz podejrzeć czas przerwy pomiędzy ramkami...itd...
Mnie przydał się kilkakrotnie.
Pikczu
Posty: 389
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: Transmisja danych RS485_RS422

Post autor: Pikczu » 09 sty 2019, 20:03

Henryk, ale ten zapis nie ma sensu:
Printbin Tab1(1) ; Tab1(2) ; Tab1(3) ; Tab1(4) ; Tab1(5) ; Tab1(6) ; Tab1(7) ; Tab1(8) ; Tab1(9) ; Tab1(10) ; Tab1(11) ; Tab1(12) ; Tab1(13) ; Tab1(14) ; Tab1(15) ; Tab1(16) ; Tab1(17) ; Tab1(18) ; Tab1(19)
Bo to wysyła całą tablice za każdym razem starująć od kolejnej komórki.
Czyli wynik wygląda tak jak na zdjęciu poniżej.
przy print bin daje się przecinek i liczbę komórek do wysłania Jak pisał Bartek.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Awatar użytkownika
Henryk
Posty: 348
Rejestracja: 22 sty 2018, 17:20

Re: Transmisja danych RS485_RS422

Post autor: Henryk » 09 sty 2019, 20:17

Jak nie znajdę innego rozwiązania , to będę musiał coś takiego nabyć ;)

Myślę , że problem leży w interpretacji tego co terminal pokazuje , np .wysyłam znak "M" chr(77) i zmienną N ..1 bajt ...
  1.   N = 123
  2.     Do
  3.     Print Chr(77) ; N;
  4.      Waitms 400
  5.     Print Chr(77) ;
  6.      Waitms 400
  7.   Loop
  8.     End
Pytanie : dlaczego zmienna N jest rozbita na trzy elementy :?:
test.JPG
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Awatar użytkownika
Henryk
Posty: 348
Rejestracja: 22 sty 2018, 17:20

Re: Transmisja danych RS485_RS422

Post autor: Henryk » 09 sty 2019, 20:18

Pikczu pisze:
09 sty 2019, 20:03
Henryk, ale ten zapis nie ma sensu:
Printbin Tab1(1) ; Tab1(2) ; Tab1(3) ; Tab1(4) ; Tab1(5) ; Tab1(6) ; Tab1(7) ; Tab1(8) ; Tab1(9) ; Tab1(10) ; Tab1(11) ; Tab1(12) ; Tab1(13) ; Tab1(14) ; Tab1(15) ; Tab1(16) ; Tab1(17) ; Tab1(18) ; Tab1(19)
Bo to wysyła całą tablice za każdym razem starująć od kolejnej komórki.
Czyli wynik wygląda tak jak na zdjęciu poniżej.
przy print bin daje się przecinek i liczbę komórek do wysłania Jak pisał Bartek.
Pikaczu , ćwiczę i kombinuję , wiesz jak to bywa z amatorami ;)
Pikczu
Posty: 389
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: Transmisja danych RS485_RS422

Post autor: Pikczu » 09 sty 2019, 20:22

Jedyna droga żeby zostać profesjonalistą :)
Awatar użytkownika
niveasoft
Posty: 1213
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Transmisja danych RS485_RS422

Post autor: niveasoft » 09 sty 2019, 20:25

"N" jest rozbite na trzy elementy tak samo jak ma trzy litery kiedy je teraz czytasz 123 dlatego że użyłeś "PRINT" czyli wersji "human readable" czyli takiej żeby człowiek mógł przeczytać.

Printbin to skrót od "Printuj binarnie". Printbin wyśle 123 jako jeden bajt bo w bajcie można pomieścić od 0 do 255.
Na dodatek możliwe że zobaczysz " 123 173 07B 01111011 { (left/opening brace)"
A jeśli czasem inna liczba to na to mówią krzaki :D
Awatar użytkownika
Henryk
Posty: 348
Rejestracja: 22 sty 2018, 17:20

Re: Transmisja danych RS485_RS422

Post autor: Henryk » 09 sty 2019, 20:32

Jeśli teraz użyję dla wartości odczytanej z terminala.... Printbin ...poznam faktyczną wartość takiej pozycji :?:
Awatar użytkownika
niveasoft
Posty: 1213
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Transmisja danych RS485_RS422

Post autor: niveasoft » 09 sty 2019, 20:41

Nie. Co jeśli wartością jest 1, 0 lub 10? czyli tylko jedna lub dwie litery?

Inaczej Henryku.
Wciskasz w Bascom F1 i w Index wpisujesz ASCII chart.
Żadna wartość poniżej 32 (co oznacza spację, puste miejsce) się w terminalu nie wyświetla.
Prawie każdy plik fontów zaczyna się nie od zera a od offsetu 32 bo po prostu literki które się da czytać to się zaczynają od 32.
Te wartości poniżej służą do kontroli różnych rzeczy. Dopiero wartość 48 oznacza zero...

Litera duża A ma wartość 65. Żeby napisac w terminalu ABCD trzeba wysłać 65,66,67 i 68

Tylko czasem nie chodzi o transmisję znaków dla ludzi. Maszyny tego nie potrzebują. Maszyny potrafią właśnie poczytać sobie binarnie i 1 dla nich znaczy 1.
Tu właśnie chodzi o to czy w tym Twoim systemie komunikacja jest jawna/ascii albo też jawna ale najprostsza binarna.

Binarną stosuje się do szybszego przesyłu danych, ale też podglądać trzeba inaczej.
Awatar użytkownika
Henryk
Posty: 348
Rejestracja: 22 sty 2018, 17:20

Re: Transmisja danych RS485_RS422

Post autor: Henryk » 09 sty 2019, 20:49

Czyli dane odczytane z terminala niczego konkretnego mi nie dadzą , jedynie mogę sobie popatrzeć gdzie jakaś tam zmienna/wartość jest usadowiona w ciągu danych .
ODPOWIEDZ