.NET Compact Framework下的串口通信

在Wince和Windows Mobile下,很多设备以串口(Serial Port/Com Port)的方式提供访问接口,例如 可以通过串口访问GPS的receiver,从而接收NMEA Data。

在CF.NET2.0开始,MS把串口操作封装了到System.IO.Ports.SerialPort里面,大大简便了对串口的操 作,不再需要P/Invoke就可以直接操作串口。

下面展现两个串口通信类,一个负责发生,一个负责接收,两个类分别在不要的设备上运行。

    public class ReceiverPort : IDisposable
    {
        private readonly System.IO.Ports.SerialPort serialPort;

        public ReceiverPort()
        {
            serialPort = new System.IO.Ports.SerialPort("COM1", 4800,

System.IO.Ports.Parity.None, 8, System.IO.Ports.StopBits.One);
            serialPort.Handshake = System.IO.Ports.Handshake.None;

            try
            {
                serialPort.DataReceived += new

System.IO.Ports.SerialDataReceivedEventHandler(this.serialPort_DataReceived);
                serialPort.Open();
                if (serialPort.IsOpen)
                {
                    Console.WriteLine("Open the serial port successful");
                }
                else
                {
                    Console.WriteLine("Fail to open the serial port");
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }

        public void Dispose()
        {
            if (serialPort.IsOpen)
            {
                serialPort.Close();
            }
            serialPort.Dispose();
        }

        private void serialPort_DataReceived(object sender,

System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            Console.WriteLine("RECEIVED:" + serialPort.ReadLine());
        }
    }

    public class SenderPort : IDisposable
    {
        private readonly System.IO.Ports.SerialPort serialPort;

        public SenderPort()
        {
            serialPort = new System.IO.Ports.SerialPort("COM1", 4800,

System.IO.Ports.Parity.None, 8,
                                                         System.IO.Ports.StopBits.One);
            serialPort.Handshake = System.IO.Ports.Handshake.None;

            try
            {
                serialPort.Open();
                if (serialPort.IsOpen)
                {
                    Console.WriteLine("Open the serial port successful");
                }
                else
                {
                    Console.WriteLine("Fail to open the serial port");
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }

        public void Dispose()
        {
            if (serialPort.IsOpen)
            {
                serialPort.Close();
            }
            serialPort.Dispose();
        }

        public bool Send(string str)
        {
            try
            {
                if (serialPort.IsOpen)
                {
                    Console.WriteLine("SENT:" + str);
                    serialPort.WriteLine(str + "\r");
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return false;
            }
        }
    }

时间: 2025-01-15 13:41:59

.NET Compact Framework下的串口通信的相关文章

.NET Compact Framework下的进程间通信之MSMQ开发

上篇讲到WinCe下的MSMQ安装 ,这篇讲述一下MSMQ在.NET Compact Framework 下的开发. 所谓MQ就是Message Queue,消息队列.消息队列可以作为不同应用程序之间 ,甚至不同机器之间通信的渠道.在消息队列下进行通信的内容称为消息 (Message),在C#程序下Message就是对象. MSMQ就是Microsoft公司提供的MQ服务程序.MQ服务程序负责管理消息队列, 保证消息在消息队列这一渠道下能无误的发送到对端,MQ支持离线交易,有时候 消息会缓存在M

.NET Compact Framework下的进程间通信之Windows Message

在Wince和Windows Moblie 下的进程间通信可以由以下几种技术实现. 1. Windows Message 2. Point-to-Point Message Queues 3. MSMQ 下面使用讲述.NET Compact Framework下使用Windows Message进行进程间的 通信. 引用库 在CF.net下进行Windows Message的开发需要引用Microsoft.WindowsCE.Forms ,该DLL一般存放于C:\Program Files\Mi

.NET Compact Framework下的3G应用

在.NET Compact Framework下开发3G应用可以有两个options,1:AT command, 2:RAS.其实RAS最终也是通过AT command来管理3G设备,RAS屏蔽了技术细节,很方便地建 立TCP/IP based 的网络连接,所以推荐使用RAS,WinCE本身提供了native API可以直接操作RAS,管理3G设备及其连接.与此同时RAS也支持有线电话拨号,GPRS等应用. RAS简介 RAS的详细介绍见 Overview of RAS 由于.NET Compa

.NET Compact Framework下SQL CE的使用

在Wince和Windows Mobile下最常用的数据库为SQL CE,SQL CE也曾经叫做SQL Server for Windows CE和SQL Server Mobile Edition,最新版本命名为SQL Server Compact 3.5 SP1. SQL Server Compact不仅仅能运 行于Wince和Windows Mobile,而且能运行于Windows的PC上,是Access的有效替代品,如果不使用存储 过程,在SQL Server Compact下开发的程序

.NET Compact Framework下的单元测试

在 Wince和Windows Mobile下native C++的单元测试里讲述了在Wince和Windows Mobile下native C++ 进行单元测试的方法,这篇将会讲述.NET Compact Framework下的单元测试.在.NET Compact Framework 下可以使用NUintLite进行单元测试. NUintLite是简化版的NUnit,可以应用于.NET Compact Framework,Mono等平台. 生成NUnitLite库 NUintLite已经从co

串口通讯-Linux下多线程串口通信问题

问题描述 Linux下多线程串口通信问题 我做的一个项目,把串口读写采用了一个独立的线程,进行数据的读写,在调试时,发现只要启动另外一个计算量比较大的线程,串口通信就出错了,而只要不启动这个线程,可以启动其他线程,串口工作没有任何问题,求原因? 解决方案 在C#中使用SerialPort类实现串口通信,多线程问题在C#中使用SerialPort类实现串口通信 遇到多线程问题在C#中使用SerialPort类实现串口通信 遇到多线程问题 解决方案二: 这两个线程有耦合吧?认真分析一下之间的联系.可

.NET Compact Framework下Win32 API P/Invoke的使用

由于CF是一个精简(Compact)的.NET Framework,因此在开发CF应用时有一部分功能MS并没有在CF中实现,需要直接调用Win32的API来实现.由于Win32的API是面向native代码的,一般会提供一个DLL库以及相应header文件.使用C++是十分容易和简单调用这些API,但是使用C# .NET就没那么幸运了.C#调用Win32的API往往要借助于P/Invoke的帮助,下面讲述一下P/Invoke 的使用. API的引入 调用Win32的API需要引入相应的DLL,W

.NET Compact Framework下HttpWebRequest开发

当Windows Mobile程序需要使用Web Server的信息,一开始自然会想到使用WebService.可是有些Web Server不提供WebService,只是提供Http浏览功能,如果需要从Http网页中得到信息,可以使用HttpWebRequest和HttpWebResponse来完成,下面通过一个例子来讲述. 例如有一个使用ASP.net开发的燃料价格查询网站. 图1 输入燃料类型(Fuel Type)和邮政编码(Postcode)后可以查询出燃料价格,如下图. 图2 在Win

.NET Compact Framework下的GPS NMEA data数据分析(上)

提供GPS功能的Wince和Windows Mobile都需要一个GPS接收器(GPS Receiver ).GPS receiver就像一个收音机,他从太空中各个GPS卫星(Satellites)接 收信号,通过自身的算法(一般在Firmware里面)计算出位置等信息,然后以 NMEA data的格式输出.GPS receiver就是接收卫星信号转换成NMEA data的设备 . 进行GPS的开发需要从GPS receiver取出NMEA data,分析出关心的数 据.关心的数据包括经度(Lo