| Author |
Message
|
marek_Łódź Poziom 23

Joined: 23 Dec 2004 Posts: 3131 Location: Łódź
|
#31
21 May 2006 15:06 Re: sterowanie przez rs232 |
|
|
|
1. Jakiego typu jest binarna reprezentacja temperatury temp1, temp2 (to pytanie już kiedyś padło). Czy są to zmienne integer.
2. Jak przebiega synchronizacja, czy opróżniasz bufor RS przed odebraniem danych, jeśli tak, to czy nie robisz tego za wcześniej lub za późno, czy masz jakieś bajty synchronizujące (sygnalizacja początku ramki). Jeśli nie, to w jaki sposób zapewniasz zgodność faz w nadajniku i odbiorniku.
|
|
| Back to top |
|
 |
KanGu Poziom 11

Joined: 07 May 2005 Posts: 76 Location: Suwałki / Gdynia
|
#32
21 May 2006 17:41 Re: sterowanie przez rs232 |
|
|
|
| Quote: |
1. Jakiego typu jest binarna reprezentacja temperatury temp1, temp2 (to pytanie już kiedyś padło). Czy są to zmienne integer. |
No właśnie tego pytania nie rozumiem ale pokaże jak deklarowałem zmienne
| Code: |
Dim Bd(9) As Byte
Dim Tmp As Integer
Dim Wynik As Single
Dim Temp1 As String * 10
Dim Temp2 As String * 10 |
Wynik to obliczona temperatura z czujnika zamieniam ją tak żeby miała 2 miejsca po przecinku.
| Code: |
Temp2 = Fusing(wynik , "#.##")
|
Wiec jeśli występuje jako string, a zostaje wysłana przy pomocy printbin to nie wiem w jakiej postaci widzi ja komputer w każdym bądź razie w hyperterminalu wyświetla mi się jedna obok drugiej jeśli użyje komendy printbin.
| Quote: |
2. Jak przebiega synchronizacja, czy opróżniasz bufor RS przed odebraniem danych, jeśli tak, to czy nie robisz tego za wcześniej lub za późno, czy masz jakieś bajty synchronizujące (sygnalizacja początku ramki). Jeśli nie, to w jaki sposób zapewniasz zgodność faz w nadajniku i odbiorniku.
|
Próbowałem na wiele sposobów żaden nie był efektywny więc nie wklejam ich tutaj funkcje jakich używam są wcześniej. Wymienię tylko te sposoby bez kodu.
Przypisałem procedurze timerontimer zadnie żeby co jedna sekundę wysyłała ciąg znaków np sNIS i w tym samym czasie wystartowała inna funkcja w opóźnieniu 500 ms o takim samym czasie trwania która odbiera z bufora odbiorczego odebrane dane (których nie umiem rozdzielić, uważam ze sNIS to ramka ale nie potrafię jej zinterpretować). Jako że w mikrokontrolerze mam ułożony program tak że odwołuje się co 100ms do funkcji sprawdzającej buforr odbiorczy przy wysłaniu 5 zapytań musze odczekać 500ms zanim mikrokontroler na nie odpowie.
| Code: |
'kwałek pętli głównej
Waitms 100
Call Status ' odwołanie się do pętli interpretującej
Waitms 100
Call Status
Waitms 100
Call Status
Waitms 100
Call Status
Waitms 100
Call Status
Waitms 100
Call Status
Waitms 100
Call Status
Waitms 100
Call Status
|
W sumie nie do końca rozumiem zmienne jakie występują w trakcie transmisji wiem że bez problemów wysyła mi z użyciem podanych przeze mnie funkcji w delphi dane do mikrokontrolera.
|
|
| Back to top |
|
 |
marek_Łódź Poziom 23

Joined: 23 Dec 2004 Posts: 3131 Location: Łódź
|
#33
21 May 2006 21:58 Re: sterowanie przez rs232 |
|
|
|
Jeśli w BASCOMie robisz konwersję do łańcucha i potem to wysyłasz binarnie, to idzie mniej więcej tak, jakbyś transmitował znakowo instrukcją PRINT.
Jak dotąd wszystko OK. Jeśli dalej wchodzisz w DELPHI z funkcją konwersji CharToNum, która traktuje Twoje dane jako binarne, i wymnaża kolejne znaki przez 256^n dostaniesz bzdurę. Trzeba albo zapisać temperaturę w zmiennej binarnej (np. integer) i po przesłaniu poddać konwersji, albo transmitować znakowo i zapisywać bezpośrednio w zmiennej łańcuchowej (polu edycji).
|
|
| Back to top |
|
 |
KanGu Poziom 11

Joined: 07 May 2005 Posts: 76 Location: Suwałki / Gdynia
|
#34
22 May 2006 00:02 Re: sterowanie przez rs232 |
|
|
|
Czyli jednym słowem po zrobieniu fusing musze spowrotem zmienic je na zmienna typu integer (bo fusing można tylko jako string zrobić)
wynik(ineteger)FUSINGTemp1(string)>>tempi1(integer)
|
|
| Back to top |
|
 |
Google

|
#
22 May 2006 00:02 |
|
|
|
|
|
| Back to top |
|
 |
marek_Łódź Poziom 23

Joined: 23 Dec 2004 Posts: 3131 Location: Łódź
|
#35
23 May 2006 08:20 Re: sterowanie przez rs232 |
|
|
|
Masz dwie możliwości: albo zrealizujesz transfer temperatury w trybie znakowym, do czego wystarcza instrukcja PRINT ewentualnie Twój fusing.
Wtedy po stronie DELPHI otrzymujesz od razu łańcuch, który możesz np wyświetlić bezpośrednio:
| Code: |
editxx.text:=datastringfromBASCOM1;
edityy.text:=datastringfromBASCOM1; |
albo przekonwertować do zmiennej numerycznej:
| Code: |
decimalseparator:='.'
temp1:=strtofloat(trim(datastringfromBASCOM1));
temp2:=strtofloat(trim(datastringfromBASCOM2)); |
inna propozycja to przeliczenie temperatury na decystopnie lub centystopnie (wymnożenie przez 10 lub 100) i podstawienie do zmiennej INTEGER. Po przesłaniu tej wartości przez RS instrukcją PRINTBIN trzeba skorzystać z konwersji chartonum, po czym podstawić wynik podzielony przez nasze 10 lub 100 pod zmienną SINGLE/DOUBLE.
|
|
| Back to top |
|
 |