⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfrom.cs

📁 gps首先手机要有上网的硬件条件,然后获取某一网络地址映射的GUID ,最后通过调用ConnMgrEstablishConnectionSync函数让手机自己选择某一最 佳路径.
💻 CS
📖 第 1 页 / 共 2 页
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using Microsoft.Practices.EnterpriseLibrary.Data;
using Microsoft.Practices.EnterpriseLibrary.Data.Sql;
using System.Data.Common;
using System.Collections;

namespace GPSSerialPortData
{
    public partial class MainFrom : Form
    {
        private System.IO.Ports.SerialPort[] ports = null;
        private bool IsShowData = false;
        StringBuilder f_SB = new StringBuilder();    

        public MainFrom()
        {            
            InitializeComponent(); 
        }

        private string newline()
        {
           return "\r\n";
        }

        /// <summary>
        /// 打开串口并开始数据接收
        /// </summary>
        private void OpenPort()
        {
            for (int i = 0; i < SerialPortConfig.Ports.Count; i++)
            {
                try
                {
                    ports[i].Open();
                    ports[i].DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(SPort_DataReceived);
                    tbPortState.Text += "串口" + ports[i].PortName + "已经打开" + newline();
                }
                catch
                {
                    tbPortState.Text += "串口" + ports[i].PortName + "不存在或已占用" + newline();
                }
            }
        }

        /// <summary>
        /// 停止数据接收并关闭串口
        /// </summary>
        private void ClosePort()
        {
            for (int i = 0; i < SerialPortConfig.Ports.Count; i++)
            {
                try
                {
                    if (ports[i].IsOpen)
                    {
                        ports[i].DataReceived -= new System.IO.Ports.SerialDataReceivedEventHandler(SPort_DataReceived);
                        ports[i].Close();                        
                    }
                    tbPortState.Text += "串口" + ports[i].PortName + "已经关闭" + newline();
                }
                catch
                {
                    tbPortState.Text += "串口" + ports[i].PortName + "不存在或已占用" + newline();
                }
            }
        }
       
          
        private void AddReceiveData(byte[] bytes)
        {
            lock (f_SB)
            {
                foreach (byte b in bytes)
                {
                    if (b < 16)
                    {
                        f_SB.Append( "0"+Convert.ToString(b, 16).ToUpper());
                    }
                    else
                    {
                        f_SB.Append(Convert.ToString(b, 16).ToUpper());
                    }
                }
            }
        }
        BackgroundWorker f_BG = new BackgroundWorker();
        private void bgWorkerAnalyze_DoWork(object sender, DoWorkEventArgs e)
        {
            while (true)
            {
                if (f_SB.Length < 58)
                {
                    System.Threading.Thread.Sleep(200);
                }
                else
                {
                    lock (f_SB)
                    {
                        while (f_SB.Length>=58)
                        {
                            if (f_SB.ToString().Substring(0,4).ToUpper() == "ACAC")
                            {
                                SaveGPSData(f_SB.ToString().Substring(0, 58));
                                f_SB.Remove(0, 58);
                            }
                            else
                            {
                                f_SB.Remove(0, 4);
                            }
                        }                  
                    }
                }
            }
        }
        void SPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            System.IO.Ports.SerialPort serialPort = (System.IO.Ports.SerialPort)sender;
            
            //此处 在测试时不能够确定出发的次数 故做了长度判断当长度为0时 不予考虑
            int len = serialPort.BytesToRead;
            byte[] bs = new byte[len];
            serialPort.Read(bs, 0, len);
            if (len == 0)
            {
                return;
            }
            else
            {
                BackgroundWorker bgWorker = new BackgroundWorker();
                bgWorker.DoWork += new DoWorkEventHandler(bgWorker_DoWork);
                bgWorker.RunWorkerAsync(bs);
                return;
            }
        }

        private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            byte[] bs = (byte[])e.Argument;
            AddReceiveData(bs);
        }

        delegate void ShowGPSDataCallback(string text);

        private void ShowGPSData(string message)
        {
            if (tbView.InvokeRequired == true)
            {
                ShowGPSDataCallback callback = new ShowGPSDataCallback(ShowGPSData);
                tbView.Invoke(callback, message);
            }
            else
            {
                tbView.Text += message;
            }
        }

        private void SaveGPSData(string data)
        {
            GPSData gpsData = new GPSData();

            #region 设置数据

            /*获取编号*/
            gpsData.Terminal_Id = Convert.ToInt32(data.Substring(10,2)+ data.Substring(12,2) +
                data.Substring(14,2) + data.Substring(16,2));

            /*获取时间*/
            gpsData.AddTime = Convert.ToDateTime(
                data.Substring(20, 2) + ":"
                + data.Substring(22, 2) + ":"
                + data.Substring(24, 2));

            /*获取纬度*/
            gpsData.OriginalLatitude = Convert.ToDouble(
             data.Substring(26, 2) + data.Substring(28, 2)
             + "."
             + data.Substring(30, 2) + data.Substring(32, 2)
             );

            /*获取纬度*/
            gpsData.Latitude = Convert.ToString(Math.Truncate(gpsData.OriginalLatitude / 100)) + "°" +
               Convert.ToString(Math.Truncate(Math.IEEERemainder(gpsData.OriginalLatitude, 100))) + "′" +
               Convert.ToString(
                   Math.Round(
                       (Math.IEEERemainder(gpsData.OriginalLatitude, 100) - Math.Truncate(Math.IEEERemainder(gpsData.OriginalLatitude, 100))) * 60, 0, MidpointRounding.AwayFromZero)
                           ) + "″";
          


            /*获取经度*/
            gpsData.OriginalLongitude = Convert.ToDouble(
               data.Substring(34, 2) + data.Substring(36, 2) + data.Substring(38, 2)
               + "." + data.Substring(40, 2)
               + data.Substring(42, 2)
               );
            gpsData.Longitude = Convert.ToString(Math.Truncate(gpsData.OriginalLongitude / 100)) + "°" +
                Convert.ToString(Math.Truncate(Math.IEEERemainder(gpsData.OriginalLongitude, 100))) + "′" +
                Convert.ToString(
                    Math.Round(
                        (Math.IEEERemainder(gpsData.OriginalLongitude, 100) - Math.Truncate(Math.IEEERemainder(gpsData.OriginalLongitude, 100))) * 60, 0, MidpointRounding.AwayFromZero)
                            ) + "″";

            /*获取高度*/
            gpsData.Height = Convert.ToDouble(
                data.Substring(44, 2) + data.Substring(46, 2)
                + "." + data.Substring(49, 1));

            #endregion

            switch (data.Substring(18, 2))
            {
                case "89":
                    if (IsShowData)
                    {
                        ShowGPSData(
                            "终端" + gpsData.Terminal_Id +
                            " 北纬" + gpsData.Latitude +
                            " 东经" + gpsData.Longitude+
                            " 海拔" + gpsData.Height.ToString() +
                            " 时间" + gpsData.AddTime.ToString("hh:mm:ss" + newline())
                            );
                    }
                    break;
                case "4B":
                    ShowGPSData(gpsData.Terminal_Id + "时间设置成功" + newline());
                    return;
                case "50":

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -