ilias_gr Δημοσ. 17 Ιουλίου 2009 Δημοσ. 17 Ιουλίου 2009 Δεν ξέρω αν σε αυτό το φόρουμ υπάρχουν ειδικοί για να απαντήσουν στο πρόβλημά μου, αλλά δε χάνω τίποτα να ρωτήσω. Θέλω να φτιάξω ένα προγραμματάκι που να τρέχει σε συσκευή GPS (PNA) με Windows CE. Αυτό το πρόγραμμα θα λαμβάνει τις πληροφορίες NMEA από τον δέκτη GPS και θα εμφανίζει το Latitude και το Longitude. Εγκατέστησα το Visual Studio 2008 και έφτιαξα ένα απλό προγραμματάκι με την Visual Basic. Το κάνω κανονικά deploy σε μία συσκευή MLS Destinator και το τρέχω. Ξεκινάει κανονικά η εφαρμογή και μόλις πάει να ανοίξει την θύρα του GPS, μου βγάζει σφάλμα "System.IO.IOException" στην εντολή SerialPort.Open(). Το ίδιο το αρχείο exe, το κάνω Copy (μέσω της κάρτας SD) σε μία άλλη συσκευή που έχω (Navigon 2100max) και δουλεύει κανονικά! Ανοίγει την θύρα και δείχνει τα δεδομένα του GPS!! Δεν γίνεται, όμως, να χρησιμοποιήσω αυτή τη συσκευή για δημιουργία εφαρμογών γιατί δεν υποστηρίζεται από το ActiveSync, οπότε δεν μπορώ να κάνω deploy απ' ευθείας στο Navigon. Θα πρέπει να κάνω deploy στην άλλη συσκευή και μετά να αντιγράφω το exe και αυτό είναι πολύ χρονοβόρο. Στην συσκευή MLS Destinator έχω αρκετά προγραμματάκια (όπως το NoniGPS Plot) που την ανοίγουν κανονικά τη θύρα του GPS. Πως γίνεται; Έχω δοκιμάσει τη Visual Basic 2008 και 2005 και την Visual C# 2008 και 2005, αλλά τίποτα. Στο Navigon δουλεύει κανονικά, αλλά στο MLS Destinator δεν δουλεύει με τίποτα. Και οι δύο συσκευές έχουν Windows CE 5.0 Το Navigon έχει .NET CF 3.5 ενώ το MLS έχει .NET CF 2.0 (δεν γίνεται εγκατάσταση το 3.5) Έχει κανένας από σας MLS Destinator να μου πει αν αντιμετοπίζει το ίδιο πρόβλημα; Καμιά ιδέα πως να το κάνω να δουλέψει το SerialPort.Open(); Αν θέλετε μπορώ να σας δώσω τον κώδικα. Ευχαριστώ για τον χρόνο σας.
fromaz Δημοσ. 17 Ιουλίου 2009 Δημοσ. 17 Ιουλίου 2009 Μήπως δοκιμάζεις λάθος θύρα; Εξ' ορισμού, στα Windows CE .NET η COM1 δεσμεύεται για debugging και δεν είναι διαθέσιμη σε application level. Στο Navigon πιθανώς να είναι απενεργοποιημένη αυτή η δυνατότητα, με βάση αυτά, η περνώντας στον bootloader την παράμετρο /C:0
Directx Δημοσ. 17 Ιουλίου 2009 Δημοσ. 17 Ιουλίου 2009 Δεν έχω ασχοληθεί με Windows CE 5.0, αν όμως έχεις διάθεση δες το GPS Sample που έρχεται παρέα με το SDK των Windows Mobile 6 (και 5 –αν και η MS προτείνει την χρήση του WM6 GPS Sample ακόμα και για εφαρμογές που προορίζονται για WM5 καθώς είναι βελτιωμένο) το οποίο παρέχει ένα ολοκληρωμένο .NET Assembly για την διαχείριση του GPS μέσο του GPS Intermediate Driver που προσφέρουν τα Windows Mobile/CE σε Managed Code μορφή. Λογικά δεν θα χρειασθείς τίποτε περισσότερο από αυτό τουλάχιστον σε WM 5/6 εφόσον γράφεις σε Compact Framework .NET και ακολουθήσεις τις οδηγίες: http://msdn.microsoft.com/en-us/library/bb158708.aspx Καλή τύχη! Υ.Γ. Ελπίζω να μην έχω μπλέξει τα Version των CE και να παίζει αυτό το assembly σε WinCE 5 διότι η MS κάθε φορά αλλάζει την ονομασία τους
ilias_gr Δημοσ. 18 Ιουλίου 2009 Μέλος Δημοσ. 18 Ιουλίου 2009 Μόλις δοκίμασα το GPS Intermediate Driver αλλά δυστυχώς δεν δουλεύει σε Windows CE. Είναι μόνο για Windows Mobile. Πάντως, σ' ευχαριστώ για τον χρόνο σου.
ilias_gr Δημοσ. 19 Ιουλίου 2009 Μέλος Δημοσ. 19 Ιουλίου 2009 Επιτέλους, τα κατάφερα! Το OpenNETCF.IO.Serial δουλεύει άψογα! Σας αναφέρω την λύση για όποιον ενδιαφέρεται: Κατεβάστε το OpenNETCF.IO.Serial.zip από εδώ: http://serial.codeplex.com/Release/ProjectReleases.aspx Ξεκινήστε ένα νέο Project με VC# ή VB. Δώστε στην φόρμα τις διαστάσεις της συσκευής σας (πχ 240x320 ή 480x272). Αποθηκεύστε το! Αποσυμπιέστε το OpenNETCF.IO.Serial.zip στον φάκελο που κάνατε save το project σας. Από το μενού File επιλέξτε Add -> Existing Project... Πηγαίνετε στον φάκελο του project σας και κάντε διπλό κλικ στο αρχείο OpenNETCF.IO.Serial.csproj. Θα σας βγάλει ένα μήνυμα (δεν ξέρω γιατί) επιλέξτε Yes. Από δεξιά (Solution Explorer) κάντε δεξί κλικ στο OpenNETCF.IO.Serial και επιλέξτε Build (Μη τρομάξετε με τα Warnings). Τώρα κάντε δεξί κλικ στο Project σας (πάλι απ' το Solution Explorer) και επιλέξτε Add Reference... Από την καρτέλα Projects κάντε διπλό κλικ στο OpenNETCF.IO.Serial. Αυτό ήταν, είστε έτοιμοι! Σας δίνω ένα παράδειγμα γραμμένο σε Visual Basic: Βάλτε στην φόρμα 3 κουμπιά (Button1, Button2, Button3) και ένα TextBox (TextBox1). Στα Properties του TextBox1 επιλέξτε Multiline = True και μεγαλώστε το TextBox στο ύψος (σχεδόν σε όλο το παράθυρο). Τώρα θα πρέπει να βάλετε ένα Timer (Timer1) απ' το οποίο θα διαβάζουμε την θύρα του GPS. Μπείτε στον κώδικα και κάντε copy/paste τα παρακάτω και είστε έτοιμοι: > Imports System.Text Imports OpenNETCF.IO.Serial Public Class Form1 Dim MyPort As Port Dim IncomingData As String = "" Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Text = "Read GPS Sample" Button1.Text = "Open COM" Button2.Text = "Close COM" Button3.Text = "Exit" MyPort = New Port("COM7:") ' Εδώ βάλτε τη θύρα του GPS. MyPort.RThreshold = 1 ' get an event for every 1 byte received MyPort.InputLen = 1 ' calling Input will read 1 byte MyPort.SThreshold = 1 ' send 1 byte at a time Timer1.Enabled = True End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Try TextBox1.Text = TextBox1.Text + vbCrLf + "Opening COM Port... " MyPort.Open() TextBox1.Text = TextBox1.Text + "OK!" + vbCrLf Catch ex As Exception TextBox1.Text = TextBox1.Text + vbCrLf + ex.Message + vbCrLf End Try If MyPort.IsOpen() Then TextBox1.Text = TextBox1.Text + vbCrLf + "COM Port is open!" + vbCrLf End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Try TextBox1.Text = TextBox1.Text + vbCrLf + "Closing COM Port... " MyPort.Close() TextBox1.Text = TextBox1.Text + "OK!" + vbCrLf Catch ex As Exception TextBox1.Text = TextBox1.Text + vbCrLf + ex.Message + vbCrLf End Try If Not MyPort.IsOpen() Then TextBox1.Text = TextBox1.Text + vbCrLf + "COM Port is closed!" + vbCrLf End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click If MyPort.IsOpen() Then MyPort.Close() MyPort.Dispose() Application.Exit() End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick If Not MyPort.IsOpen() Then Exit Sub Dim enc As Encoding = Encoding.ASCII 'Display as text Dim inputData As Byte() = New Byte(0) {} Dim I As Integer For I = 1 To MyPort.InBufferCount inputData = MyPort.Input 'Read the character IncomingData = IncomingData + enc.GetString(inputData, 0, inputData.Length) Next I If IncomingData <> "" Then Try TextBox1.Text = TextBox1.Text + IncomingData IncomingData = String.Empty Catch ex As Exception TextBox1.Text = TextBox1.Text + vbCrLf + ex.Message + vbCrLf End Try End If TextBox1.SelectionStart = TextBox1.Text.Length : TextBox1.ScrollToCaret() 'Scroll TextBox Down End Sub End Class Αν τα κάνατε όλα σωστά, θα έχετε το παρακάτω αποτέλεσμα: Τώρα, αν κάποιος θέλει να το κάνει με Visual C#, μπορεί να κατεβάσει το SerialCSharp.zip από εδώ: http://serial.codeplex.com/Release/ProjectReleases.aspx Ευχαριστώ για τον χρόνο σας, το πρόβλημά μου λύθηκε!
pseisog Δημοσ. 16 Απριλίου 2010 Δημοσ. 16 Απριλίου 2010 Όμως ενώ δημιουργώ το πρόγραμμα ΑΚΡΙΒΩΣ όπως λέτε στο παράδειγμα και παίρνω και απάντηση ότι η port είναι κανονικα ανοικτή, τα data είναι πολυ διαφορετικα και δεν έχουν καμμία σχέση με μορφή δεδομένων NMEA....... ΠΟΥ μπορεί να υπάρχει σφάλμα ;;; Χρησιμοποιώ ένα Glofiish X600.....
tnikos Δημοσ. 28 Απριλίου 2010 Δημοσ. 28 Απριλίου 2010 Χρησιμοποίησε την ταχύτητα στα 57600 και είναι οκ, εγώ όμως αντιμετώπίζω ένα άλλο πρόβλημα, όταν κλείνω την εφαρμογή το process δεν λέει να τερματιστεί,και όταν προσπαθώ να το τερματίσω Manual δεν κλείνει οπότε αναγκάζομαι να κάνω Reset την συσκευή μήπως ξέρει κάτι κάποιος για αυτό ?
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.