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

📄 form1.designer.cs

📁 该程序为PC机与单片机通过RS-232串行口通信的PC端程序
💻 CS
📖 第 1 页 / 共 2 页
字号:
/*用VS2005建立Goex.SerialCom项目Windows应用程序,
 * 注释掉Program.cs中Main入口点
 */

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Runtime.InteropServices;

namespace PCSerialCom
{

    /// <summary>
    /// 串行通信PC端
    /// </summary>
    public class PCSerialCom
    {
        public PCSerialCom()
        {
            // 
            // TODO: 在此处添加构造函数逻辑
            //
        }
        public int PortNum; //串口1, 2, 3, 4
        public int BaudRate; //波特率1200, 2400, 4800, 9600
        public byte ByteSize; //数据位8 bits
        public byte Parity; // 奇偶校验0~4 = no(无校验), odd(奇校验), even(偶校验), mark(校验位总为0), space(校验位总为1) 
        public byte StopBits; // 停止位0, 1, 2 = 1,  1.5,  2 (“1”电平宽度所保持单位时间长,该单位时间为波特率倒数)
        public int ReadTimeout; //当读操作没有完成时的停止时间,单位毫秒,10


        //以下定义了Win32中串口操作涉及的基本变量
        // Win32中的串口文件句柄,被用来存取的串口对象句柄
        private int hComm = -1;

        //串口是否已经打开,设置Opened属性为false,默认串口关闭。
        public bool Opened = false;

        //win32 API常量
        //访问模式读写属性标志
        private const uint GENERIC_READ = 0x80000000;
        private const uint GENERIC_WRITE = 0x40000000;
        //设置串口创建方式,打开已存在
        private const int OPEN_EXISTING = 3;
        //无效句柄
        private const int INVALID_HANDLE_VALUE = -1;
        //定义以下各结构
        //定义指定串口设备的当前配置填充设备控制块(DCB)结构信息
        [StructLayout(LayoutKind.Sequential)] //指定属性,声明程序中所用到的API函数,已将声明信息与C#代码相关联,即可在运行时使用反射查询属性。
        private struct DCB
        {
            //taken from c struct in platform sdk 
            public int DCBlength;      // DCB结构长度,单位字节
            public int BaudRate;       // 当前波特率 
            public int fBinary;        // 二进制模式, 无EOF校验,Win下恒为真
            public int fParity;          // 打开奇偶校验检查,为真 
            public int fOutxCtsFlow;      // 输出控制流监视Clear-To-Send信号,为真。
            public int fOutxDsrFlow;      // 输出控制流监视Data-Set-Ready信号,为真。
            public int fDtrControl;       // Data-Terminal-Ready流控制类型 
            public int fDsrSensitivity;   // 串行通信设备对DSR信号敏感 
            public int fTXContinueOnXoff; // 输入缓冲器满XoffLim字节后仍继续传输,为真 
            public int fOutX;          // 在发送中用于指示XON/XOFF 控制流,当收到XoffChar个字符后停止发送,且当收到XonChar个字符后开始传输,为真。
            public int fInX;           //在接收中用于指示XON/XOFF 控制流。 
            public int fErrorChar;     // 允许该字符替代带有奇偶校验误差的字符,为真。 
            public int fNull;          //不丢弃任何所接收的字节数,为真。 
            public int fRtsControl;     // Request-To-Send流控制类型 
            public int fAbortOnError;   // 有错误发生时 
            public int fDummy2;        // 暂未使用的保留位 
            public ushort wReserved;          //暂未使用的保留位,恒为0
            public ushort XonLim;             // 指定在XON字符发送之前接收缓冲区中可允许的最小字节数
            public ushort XoffLim;            //指定在XOFF字符发送之前接收缓冲区中可允许的最小字节数
            public byte ByteSize;           // 所收发字节的位数, 4-8 
            public byte Parity;       // 奇偶校验0-4=无,奇,偶,校验位总为0, 校验位总为1
            public byte StopBits;           // 停止位0,1,2 = 1, 1.5, 2 
            public char XonChar;            //指定用于发送和接收字符XON的值
            public char XoffChar;           //指定用于发送和接收字符XOFF值
            public char ErrorChar;          //本字符用来代替接收到的奇偶校验发生错误时的值
            public char EofChar;            //当没有使用二进制模式时,本字符可用来指示数据的结束
            public char EvtChar;            //当接收到此字符时,会产生一个事件
            public ushort wReserved1;         // 保留,未使用
        }

        ///<summary>
        ///串口超时时间结构体类型
        ///</summary>
        [StructLayout(LayoutKind.Sequential)]
        private struct COMMTIMEOUTS
        {
            public int ReadIntervalTimeout;
            public int ReadTotalTimeoutMultiplier;
            public int ReadTotalTimeoutConstant;
            public int WriteTotalTimeoutMultiplier;
            public int WriteTotalTimeoutConstant;
        }

        ///<summary>
        ///溢出缓冲区结构体类型
        ///</summary>
        [StructLayout(LayoutKind.Sequential)]
        private struct OVERLAPPED
        {
            public int Internal;
            public int InternalHigh;
            public int Offset;
            public int OffsetHigh;
            public int hEvent;
        }

        ///<summary>
        ///打开串口
        ///</summary>
        ///<param name="lpFileName">要打开的串口名称</param>
        ///<param name="dwDesiredAccess">指定串口的访问方式,一般设置为可读可写方式</param>
        ///<param name="dwShareMode">指定串口的共享模式,串口不能共享,所以设置为0</param>
        ///<param name="lpSecurityAttributes">设置串口的安全属性,WIN9X下不支持,应设为NULL</param>
        ///<param name="dwCreationDisposition">对于串口通信,创建方式只能为OPEN_EXISTING</param>
        ///<param name="dwFlagsAndAttributes">指定串口属性与标志,设置为FILE_FLAG_OVERLAPPED(重叠I/O操作),指定串口以异步方式通信</param>
        ///<param name="hTemplateFile">对于串口通信必须设置为NULL</param>

        [DllImport("kernel32.dll")]
        private static extern int CreateFile(
         string lpFileName,                         // file name
         uint dwDesiredAccess,                      // access mode
         int dwShareMode,                          // share mode
         int lpSecurityAttributes, // SD
         int dwCreationDisposition,                // how to create
         int dwFlagsAndAttributes,                 // file attributes
         int hTemplateFile                        // handle to template file
         );

        ///<summary>
        ///得到串口状态
        ///</summary>
        ///<param name="hFile">通信设备句柄</param>
        ///<param name="lpDCB">设备控制块DCB</param>
        [DllImport("kernel32.dll")]
        private static extern bool GetCommState(
         int hFile,  // handle to communications device
         ref DCB lpDCB    // device-control block
         );

        ///<summary>
        ///建立串口设备控制块(嵌入版没有)
        ///</summary>
        ///<param name="lpDef">设备控制字符串</param>
        ///<param name="lpDCB">设备控制块</param>
        [DllImport("kernel32.dll")]
        private static extern bool BuildCommDCB(
         string lpDef,  // device-control string
         ref DCB lpDCB     // device-control block
         );

        ///<summary>
        ///设置串口状态
        ///</summary>
        ///<param name="hFile">通信设备句柄</param>
        ///<param name="lpDCB">设备控制块</param>
        [DllImport("kernel32.dll")]
        private static extern bool SetCommState(
         int hFile,  // handle to communications device
         ref DCB lpDCB    // device-control block
         );

        ///<summary>
        ///读取串口超时时间
        ///</summary>
        ///<param name="hFile">通信设备句柄</param>
        ///<param name="lpCommTimeouts">超时时间</param>
        [DllImport("kernel32.dll")]
        private static extern bool GetCommTimeouts(
         int hFile,                  // handle to comm device
         ref COMMTIMEOUTS lpCommTimeouts  // time-out values
         );

        ///<summary>
        ///设置串口超时时间
        ///</summary>
        ///<param name="hFile">通信设备句柄</param>
        ///<param name="lpCommTimeouts">超时时间</param>
        [DllImport("kernel32.dll")]
        private static extern bool SetCommTimeouts(
         int hFile,                  // handle to comm device
         ref COMMTIMEOUTS lpCommTimeouts  // time-out values

⌨️ 快捷键说明

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