zależy jak tą ramkę sobie zorganizujesz ale jeden z prostszych sposobów, gdy przesyłamy znaki ASCII to koniec ramki łatwo np odróżnić po tym, że nadleciał znak ENTER (0x0d). Gdy wykryjesz go w przerwaniu to już możesz powiadomić pętlę główną czy jakieś zdarzenie w tej pętli, że już jakaś cała i gotowa ramka czeka na odczytanie. Jeśli pętla główna będzie...
Chyba się udało :D Podsumowanie i przykładowe kody w Pythonie - wykorzystywany algorytm CRC MAXIM czyli wielomian x8+X5+X4+X0 jako generator ciągu pseudolosowego [syntax=python]# Define a function `crc8()` def crc8(x): if x & 0x01: x = (x >> 1) ^ 0x98 else: x = x >> 1 return x [/syntax] - obliczanie ograniczyłem tylko do obszaru danych...
http://obrazki.elektroda.pl/4164965000_1... Witam. Od dłuższego czasu interesuję się technologią RFID i dziś chciałem zaprezentować rozwinięcie mojej dawnej konstrukcji mianowicie czytnik kart RFID ze zintegrowaną anteną na płytce PCB. Ze względu na skomplikowaną konstrukcję anteny (niewielkie odległości między ścieżkami) płytka została...
Podmień procedurę RAMKA na taką : procedure ramka(x1,y1,x2,y2:byte); var poz,pio:char;i:byte; begin poz:=Char(205); pio:=Char(186); for i:=x1+1 to x2-1 do begin GoToXY(i,y1); write(poz); GoToXY(i,y2); write(poz); end; for i:=y1+1 to y2-1 do begin GoToXY(x1,i);...
Twój program nie miał prawa działać. 1) Napisałeś sobie funkcje FC1 ale jej nie wywołałeś z bloku OB1 2) Wielokrotnie przypisałeś jakąś wartość do wyjścia Q0.1 co jest zabronione (w całym programie może być tylko jedno przypisanie =( ) do danego symbolu 3) Wg tabelki wiadomość powinna mieć 5 bajtów a w funkcji Length miałeś ustawione na 3 4) Wg tabelki...
Ale ten sposób wysyłania ramek to trochę nie teges. A jak poprawnie się wysyła takie ramki i czym? Nie możesz po prostu sprawdzić w opisie programu jak należy formatować dane? Bo domyślam się że to jakiś terminal jest. Na Wikipedi jest opisane tak: "Minicom to program do kontroli modemu oraz emulator terminala dla systemów uniksowych" Ciężko Ci pomóc...
Witam Jak swego czasu rozkodowywałem komunikacje to miałem zapisaną ramkę nadawczą i odpowiedź ze sterownika SolarComp jak poniżej. Ramka wysłana do sterownika solarnego składa się z 30 bajtów: byte 0 - 95 (adr+100 228) byte 1 - 54(Kod rozkazu w ASCII 'T') byte 2 - 16#0007(suma kontrona)9554 076F 0000 0100 0000 0200 0000 0300...
http://obrazki.elektroda.pl/6148316100_1... http://obrazki.elektroda.pl/9687194100_1... Mając kilka wolnych chwil, postanowiłem skonstruować odbiornik do bezprzewodowego czujnika stacji pogodowej Oregon Scientific RMR203HG. Stacje tej marki są ogólnie dostępne, jeśli chodzi o wrażenia z użytkowania – działa bez...
https://obrazki.elektroda.pl/8287704400_... Witajcie moi drodzy Przedstawię tutaj mój projekt zewnętrznego wyświetlacza temperatury procesora z komputera. Wyświetlacz pokazuje temperatury od 0 do 99C, jednocześnie odpowiednio dobierając swój kolor. Wyświetlacz zrobiony jest samodzielnie od 0 w oparciu o diody WS2812B, sterowany jest...
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
To oczywiste, tylko u mnie wyskakują jakieś krzaczki nieczytelne a nie ramka w postaci szesnastkowej. Sprawdź jak masz ustawiony terminal. Jeśli w tryb ASCII to tak właśnie będzie... Na szybko patrząc w Putty nie widzę możliwości zmiany na HEX. Ściągnij sobie np. Br(at)y Terminal.
Zastosowałem odczyt portu COM metodą ReadByte() i rzeczywiście odczytuję całą ramkę. A że ramka ma wagę przekazywaną w kodach ASCII to dlatego widać ją na podglądzie. Dziękuję za pomoc. Problem rozwiązany.
Witam. Mamm pytanko o wyliczanie sumy LRC. Ogólnie wiem jak to się liczy poza jednym szczegółem. Mianowicie mam dodawać do siebie znaki ascii, czy parami przetwarzać je na 8-biotwe liczby i dopiero wtedy dodawać ?? Czyli jeśli ramka wygląda przykładowo tak : :0A030011XXCRLF, gdzie xx to znaki wyliczonego LRC. To mam dodawać : (gdzie 0x30 - oznacza wartość...
musisz mieć program-server , który złoży odpowiednio z zasadami protokołu Modbus ASCII ramkę, nie da się bez końcowego wyliczenia LRC (dla ASCII LRC a dla RTU CRC)wysłać poprawnego zapytania. Sprawdz coś takiego 0211CO2C Sprawdz czy firma, która wyprodukowała ten przepływomierz, poleca program driver etc.
tryb ASCII ramka wygląda tak: char query[liczba_znakow] = { ':', '0', '1', .... nie wiem ..., 0x0D, 0x0A}; takie query trzeba wysłać na COM'a do urządzenia z tym zapoznaj się http://www.eti.pg.gda.pl/katedry/kose/dy... Dodano po 2 Jak wysyłasz w ASCII to musisz wysłać...
http://en.wikipedia.org/wiki/Carrier_sen... Rozumiem, że o ten arbitraż chodzi... Tylko mam takie pytanie - jak ja to mam zrealizować - jednoczesne odbieranie i wysyłanie? Jak rozpoznać, że to jednak nie mój sygnał jest na linii? Dodam tylko, że prawdopodobnie zastosuję konwertery rs232>rs485/can Tzn - będę miał...
aster , jeżeli się używa konkretnego protokołu to naprawdę nie jest potrzebne wysyłanie reprezentacji liczby w ASCII. Można na przykład wysyłać takie ramki: [komenda:8][długość danych:8][dane:x][suma kontrolna:8] Ale jeżeli zawsze mają to być dwa bajty wysyłane, to wystarczy wysyłać je w takiej postaci w jakiej są. Oczywiście wtedy może pojawić się...
Powyższa ramka ma, zdaje się, za dużo zer. Ramka 01040000000131CA jest poprawna.
Witam, Dopiero zaczynam zgłębiać tajniki komunikacji szeregowej więc z góry wybaczcie, jeżeli odpowiedź na zadane pytanie wyda się dla Was oczywista. Czy w komunikacji szeregowej przez RS-232 ramka danych zawsze wygląda tak samo? Oczywiście wiem, że można zmieniać ilość bitów danych, włączać kontrolę parzystości i wybierać ilość bitów stopu. Ale czy...
Celem było stworzenie uniwersalnego narzędzia umożliwiającego wymianę danych pomiędzy mikro kontrolerem a komputerem. Ramka wzorowana na Modbus ASCII przesył danych zabezpieczony jest sumą kontrolną CRC. Program odczytuje tablicę dostępnych parametrów ( tablica odkreślana jest odgórnie programowo ). Dla każdego z parametrów przypisany jest programowo...
Witam kolegów/koleżanki :-) Mam problem - będę miał na pewno w przyszłym tygodniu z uruchomieniem komunikacji miedzy sterownikiem siemens s 7 1200 a drukarką "plujką" Videojet 1710. Informację jakie udało mi się zdobyć na temat komunikacji drukarki są jedynie takie że komunikacja odbywa się po protokole WSI a ramka jaką należy wysłać do drukarki ma...
Kontrola parzystości i liczba bitów stopu to parametry transmisji przez łącze szeregowe RS232/485, podobnie jak szybkość transmisji w bitach/sekundę. Są niezależne od protokołu.
Doceniam za ten hash, choć nie spełnia to koncepcji ramki co do startu (konieczne) i kontroli poprawności (mile widziane/zalecane). Jak ramki są przez USB, ETH, mówimy o "sprzętowym," odbiorze a nie mostki w rodzaju FTDI, to, o ile ramka nie przekracza wielkości przyjętej przez standard, startu i stopu nie musi byc. Podobnie CRC, bo USB/ETH, daję "czyste"...
Popieram taki pomysł bo też myślałem w tych kategoriach, ale ja nie mogę tego wykonać z pomocą terminala, mam to zrobić na podstawie danych które zamieściłem powyżej (zczytanych koniecznie z oscyloskopu). Trochę myślałem nad znaczeniem tych "słów" i starałem się "odkodować" je w ASCII. Poniżej zamieszczam wyniki swojej pracy http://obrazki.elektroda.net/9_127281649...
Witam, Mam taki problem, chcę się komunikować z pewnym urządzeniem ale nie wiem z jakiego protokołu korzysta. Na płycie znajduje się układ MAX14780E i to jego wyjścia są wyprowadzone i to do niego trzeba się podpiąć. Pierwszy do głowy przyszedł mi modbus. Urządzenie działa jako master i zbiera informacje od slaveów, więc zainstalowałem slave'a na komputerze...
No i tu się sprawa rozwiązuje trochę ? Dodano po 34 Przyłożenie identyfikatora powoduje wydanie sygnału dźwiękowego oraz zgaszenie diodyzielonej LED i zaświecenie diody czerwonej LED przez około 1s. Jednocześnie jest wysyłanapięciobajtowa ramka danych z kodem odczytanego identyfikatora w formie binarnej big endian.Uwaga: Kod identyfikatora jest wartością...
Rozumiem, że skander już działa, czyli jest zaimplementowana obsługa modbus i komendy po stronie mikrokontrolera. Ramka MODBUS w trybie ASCII składa się z następujących części: początek ramki - znak dwukropka adres odbiorcy - 1 bajt (0=broadcast, lub 1-127) kod rozkazu - 1 bajt LRC - 1 bajt koniec ramki - enter (znaki CR i LF czyli 13 i 10 dziesiętnie)...
Łatwiej i szybciej :wink:. "Łapiąc" tylko koniec ramki mamy pewność że skoro jest koniec to i cała ramka jest w buforze i można zacząć ją analizować. W szybkich transmisjach jest to istotne (przełączamy się na inny bufor i wtedy można analizować ramkę a w tym samym czasie odbierać następną). Bez ustalonych znaków końca ramki nie wiemy jak długa ona...
Witam. Mam taką sprawę. Wg specyfikacji pewnego protokołu suma kontrolna jest liczona następująco: " suma kontrolna - zanegowana suma wszystkich składników bloku z wyzerowanym najstarszym bitem ". Obliczyłem ją sobie dla ramki zapytania: suma składników: C0h + 01h + 54h + BCh = 1D1h = 1 1101 0001b suma z wyzerowanym najstarszym bitem: 1101 0001b negacja:...
soft z posta nie będzie działać prawidłowo trzeba napisać nowy niemalże od podstaw odczyt danych jest sformułowany pod ramkę z danymi wychodzących z procka program powinien wyglądać mniej więcej tak: $regfile = "m8def.dat" $crystal = 8000000 $baud = 4800 Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol...
Witam, opracowana została prosta ramka przesyłania danych w oparciu o przerwanie USART_RXC_vect. Wysłanie bajtu 255 z aplikacji informuje mikrokontroler że zaraz otrzyma 5 znaków ASCII które ma załadować do tablicy charów a bajt 254 kończy wpisywanie do tablicy. Tablicę ze znakami wyświetlam na wyświetlaczu LED. LEcz np. wysyłam "186A0" a na wyświetlaczu...
Witam. Zbudowalem sobie Yampa 3 usb i chialem go zamontowac w samochodzie. Yamp ma mozliwosc pełnego sterowania przez rs232, mam jednak problem z roszyfrowaniem sposobu komunikacji z nim. W ramce yampp wysyla 16 znaków bedacych tytulem piosenki i chyba 6-7 znaków jako czas odtwarzania...a poza tym kilka nie zrozumialych dla mnie zeczy:) Nie potrzebuje...
Tak, to jest konwerter podany w linku przez Jestam. Chodziło mi o to by w programie zmieniać (wybierać) tryb ASCII / RTU. Ale też o podłączenie się jako interfejs do programowej symulacji wielu urządzeń slave (Modbus). A póki co to w tym trybie umiem uzyskać odpowiedź wirtualnego urządzenia, ale jego adres muszę mieć ustalony na "sztywno" w konwerterze....
Z odbiorem już sobie poradziłem. Pojawiły się naszeptujące pytania ze specyfikacji modbusa dowiedziałem się że ramka w trybie ASCII składa się 16 bitowych danych. W RTU natomiast z 8 bitowych. Jednak w kazdym programie do testowania po ustawieniu liczby rejestru na 4 (tak mam w programie na procesor) zamiast rejestrów 4 rejestrów przypadających na każdy...
Witam Mam problem z uruchomieniem RS232 w AT89C5131. Tylko raz bardzo elementarny program mi zadziałał, niestety po wciśnięciu RST przestał. I już nigdy nie nadawał. Gdy sprawdzałam wysyłaną ramkę na analizatorze to wyszło, że raczej ustawiłam wszystko dobrze. Prędkość 9600 , zegar 24MHz , transmisja 8 bitowa. Niestety analizator pokazywał, że ramka...
Witam, Jak sprawnie odebrać dane bajty lub znak ascii z przedziałów: - 1..32 - 126..255 Gdyż program sprawuje się rewelacyjnie i NIEZAWODNIE jak odbieram tylko znaki z klawiatury, a ja chcę przesłać z PC do uC ok 1MB danych z zakresu Bajt = 1..255 Rozwiązanie jakie jest poniżej - rewelacja! Lecz moja ramka danych jest 128bajtowa i docelowo 128bajt jak...
Płytkę mam podpiętą do PC a na nim uruchomiony program komunikacji z com4 Realterm. Mój kody jest taki http://obrazki.elektroda.pl/1540352500_1...
Rozczarowałeś mnie tylko tym, że znowu używasz Delphi... A myślałem, że w końcu wziąłeś się za C++ :) Nawyków się niestety trudno pozbyć... Na prawdę chciałem napisać jakieś narzędziowe programy do tego już w QT. Nawet na elektrodzie są już moje pytania w dziale początkujących - programowanie n/t startu z QT (wiem już mniej więcej co to są sloty i...
z tego co sobie wyczytałem z tej książki co zamieściłeś, faktycznie jest tam coś na temat 'computer link' tyle, że według mnie to trochę źle to zinterpretowałeś. "computer Link" tj protokół komunikacyjna dla PLC, w tej książce Twojej to jest w miare fajnie napisane, jak podlaczyc, że rs232, rs485, jakie wtyczki gdzie podłączyć, jakie moduły to maja...
(at)Markosik20 Dziękuję za zainteresowanie! :-D Nie zrozumieliśmy się. Nie chcę transmitować znaków w czasie rzeczywistym. Druga sprawa - w RS485 masz wiele nadajników, jeden master reszta slave - nie można sobie tak śmiecić na linii (po znaku), to nie buforowany RS232! Inna sprawa, że docelowo przesył będzie w trybie ASCII (później rozszerzę soft o...
Nie podałeś jak wygląda funkcja uart_puts() Zapewne ciąg rozkładany jest w niej na znaki i wysyłane są pojedynczo. Mam podobne funkcje i u mnie to wygląda tak: [syntax=cpp] void USART_Transmit( unsigned char data ) { while ( !( UCSRA & (1<<UDRE)) );//Poczekaj na pustym buforze/* Wait for empty transmit buffer */ UDR = data;//Umieszczanie danych...
Dobrze kombinujesz. Ja rozwiązałbym to tak, że zapamiętywałbym timestamp (w milisekundach) ostatniego przychodzącego znaku. i jeżeli jest większy niż 4 ms (dla baudrate 9600) to uznajemy że jest koniec ramki. Oczywiście można użyć timera o większej rozdzielczości dla szybszych transmisji. Dla trybu ASCII sprawa jest chyba jasna.
wikipedia...faktycznie, mój błąd, dziękuję za odpowiedź. Ale mam jeszcze jedno pytanie, mianowicie jaki jest znak ASCII końca ramki?
jesli dobrze zrozumialem to chyba ASCII Nie bardzo to wynika z tej ramki. Masz jakiś dokładniejszy opis protokołu lub jego nazwę?
Nie napisałeś jaki ma to być Modbus ascii czy rtu, kodu w bascomie nie posiadam ale może Ci coś podpowiem, więc tak jeśli chodzi o rtu jest to postać bitowa i ważne są odstępy czasu miedzy znakami oraz początkiem i końcem ramki, jak to zrealizować a no bardzo prosto ramkę składasz z ascii i posyłasz to na rs232/485 i będzie działało może nie jest to...
Witam, Nie są to ramki z numerem UNIQUE, tylko dane przesyłane poprzez port szeregowy, praktycznie RFiD nie ma tu żadnego znaczenia, był wyłącznie wspomniany. Ponieważ jest to pracujące stare urządzenie jest problem z identyfikacją sposobu liczenia tzw. sumy kontrolnej , czyli bajtu do kontroli błędów. W powyższych ramkach suma ta jest 1 bajtowa i znajduje...
Czy to byłyby pierwsze 3 bajty ? Serial1.print(54) wyśle dwa bajty: "5" i "4" :) Jeżeli chcesz wysłać "T" jako kod ASCII to robisz Serial.write(84) lub Serial.write(0x54). 84 to kod litery "T".
No a jaki masz status komunikacji? Czy masz błędy czy nie? Może masz zamienione przewody A-B (rs485). Jeśli masz jakiś PLC z modbusem i RS485 to możesz na nim spróbować czy odpowiada i czy wartości na panelu są <> od 0. Ewentualnie jakiś modbus slave (programowy na komputerze - znajdziesz na modbus.org) i sprawdzenie co pojawia się na panelu....
Ustal sobie po stronie uC jakiś format ramki, np. 0xFF - początek ramki [asci] [asci] [asci]-3 cyfrowa liczba w formacie ascii - PWM1 [asci] [asci] [asci]-3 cyfrowa liczba w formacie ascii - PWM2 0xFE - koniec ramki i potem w programie rozkodowuj wg. tych znaczników
A czemu akurat modbus? Czy rzecz w tym, że mogę go implementować korzystając z UARTa (z tego, co widze to transmisja jest w postaci ASCII) i posiada w ramce miejsce na adres?
ramka danych modbus ascii rs232 ascii filtr ascii
opuszczać ramienia gramofon daniel spadek jasno system zamknięty centralnego ogrzewania
plasma power supply plasma power supply
Naprawa radiotelefonu Tukan 1: Diagnostyka i porady Podłączenie 220V do programatora DIEHL 131-002