PDAclub.pl - Forum użytkowników technologii mobilnych
Windows Mobile (Classic, Professional, Standard), Windows Phone 6.x oraz 7/8.x/10 => Oprogramowanie PPC => Dla programistów => Wątek zaczęty przez: alien1983 w Październik 07, 2009, 16:21:00
-
Witam
Mam pytanie odnośnie programowania w Visual Basic dla windows mobile 5/6.
Aktualnie mogę załączyć jeden przekaźnik na płytce realyboard (płytka podłączona jest przez usb (emuluje virtualny port com))
Mam następujący kod odpowiedzialny za sterowanie:
Na kontrolce serialport
Serialport1.Write(chr(&H55))
Serialport1.Write(chr(&H1))
Serialport1.Write(chr(&H4F))
Serialport1.Write(chr(&H0))
Serialport1.Write(chr(&H28))
Ten kod działa i na monitorze portów, i dokładnie te dane przesyła co prawda w osobnych liniach...
Pyt1. Czy da się wysłać w jednej linii, jak to zrobić?
Serialport1.Write(chr(&H53))
Serialport1.Write(chr(&H1))
Serialport1.Write(chr(&H23))
Serialport1.Write(chr(&H0))
Serialport1.Write(chr(&H89))
Ostatni kod jest przykładowy :
Tutaj niestety ostatnia linia się nie zgadza z Danymi z programu port monitor.
Wysyłając tą linię: Serialport1.Write(chr(&H89))
Na port monitorze pokazuje się wartość 2F (lub coś podobnego aktualnie jestem w pracy i nie pamiętam)
Dla wyższych danych też ta sama wartość się pojawia. Przez co nie działa reszta która wymaga większych wartości lich 16-nastkowych.
Dodam że Serialport1.Write()
Czyta dane w stringach, natomiast do płytki realyboard trzeba wysyłać dane w wartościach Hex.
-
Tu jest opisane jak się połączyć z API do portów seryjnych: http://support.microsoft.com/kb/823179 (http://support.microsoft.com/kb/823179)
Wykorzystując to możesz zapisywać binarnie dane i bez wielkiego narzutu. Podłączasz się po prostu do WIN API do seriali.
Twoich dywagacji o przesyłaniu na liniach zupełnie nie rozumiem niestety :mysli: Płytka, jeśli dobrze zrozumiałem łączy się przez USB i pokazuje profil USB portu szeregowego, dzięki czemu można utworzyć wirualny com. W rzeczywistości dane są przesyłane w postaci ramek USB seryjnie ( więc gdzie te linie? ) Dodatkowo jakbyś spojrzał na narzut tych ramek, to dane to tylko ich część. Są tam dodatkowo nagłówki synchronizacyjne i inne szpargały.
-
Komunikacją usb zajmują sie stery od FTDI i ich chipset. Wiec ja widze na virtualnych comach czystą komunikację szeregową. Pozatym mikrokontroler na płytce komunikuje się kodzie 16-nastkowym i takie dane przyjmuje. Wydaje mi się że dosc szczegółowo objaśniłem problem. na który w tym wypadku składa się wysyłanie danych przez kontrolke serialport w vb i tyle na delphi działa mi bez problemu.
-
Jeśli chodzi o linie to monitor portów pokazuje:
Tak wysyla mój program:
SmartDeviceProj IRP_MJ_WRITE VCP5 SUCCESS Length 1: 55
SmartDeviceProj IRP_MJ_WRITE VCP5 SUCCESS Length 1: 01
SmartDeviceProj IRP_MJ_WRITE VCP5 SUCCESS Length 1: 53
SmartDeviceProj IRP_MJ_WRITE VCP5 SUCCESS Length 1: 00
SmartDeviceProj IRP_MJ_WRITE VCP5 SUCCESS Length 1: 3F
Tak wysyła oryginalny program:
RealyBoard.exe IRP_MJ_WRITE VCP5 SUCCESS Length 5: 55 01 53 09 15
-
Twój opis nie jest taki szczegółowy i zawiera po prostu błędy terminologiczne. Np "wyższe dane", "przesyła co prawda w osobnych liniach","trzeba wysyłać dane w wartościach Hex".
Twój post zrozumiałem w ten sposób, że nie dostajesz tej sekwencji bajtów, którą wysyłasz.
Zerknij tu: http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.write.aspx (http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.write.aspx)
, bo pewnie tej kontrolki używasz i spróbuj z funkcją nr 2. Tam masz napisane o przekodowaniu dla innych funkcji, jeśli wykorzystujesz stringi.
PS Odnośnie tego - "Pozatym mikrokontroler na płytce komunikuje się kodzie 16-nastkowym i takie dane przyjmuje." to ja sie założę, że jednak w kodzie binarnym :P
-
hehe no niech ci bedzie binarny ale chodziło mi o logiczną budowe ramki, dla komputerów to tylko są zera i jedynki :P
-
Jeśli chodzi o wirtualny com, to nie masz żadnej ramki - to tylko funkcja wysyłania ciągu oktetów do portu. :) Operacje charakterystyczne dla prawdziwego portu com ( a raczej kontrolera ) są pozorowane.
-
Chodzi o to że mikrokontroler za chipem od usb>com czyta ramki dane muszą mieć początek potem np. 3 hexe danych potem CRC8. Ogólnie już prawie wszystko chodzi... tzn sterowanie z pda płytką I/O jeszcze tylko musze przetlumaczyć kod crc8 z delphi na vb oraz wymyslic jak wysyłać te hexy w ciagu jako ramke a nie w 5 czesciach bo to nie pozostaje bez znaczenia na czas reakcji płytki/programu.
-
Aha kumam ramki zatem.
Przecież ta funkcja nr 2 robi Ci to w jednym kawałku... Masz nawet przykład do VB jak klikniesz na link.