操作串口通信类(IO.Ports)-SerialPort

串口的使用:

  1,串口控件位于 工具箱—组件—SerialPort, 拖动到窗体上,设置属性(Name),命名。


操作串口通信类(IO.Ports)-SerialPort_第1张图片

 

  

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  可在属性处进行设置,也可以在后台代码页进行手动写:

        /// 
        /// 串行端口资源 端口名称 波特率 奇偶校验位 数据位 停止位
        /// 
        public SerialPort port = new SerialPort("COM1", 115200, Parity.None, 8, StopBits.One);

  

  设置好串行端口等属性之后,便可以操作串口进行通信了,如要对设备进行全部开启操作。

        /// 
        /// //设备全开、关
        /// 
        protected void AllOpenOrClose()
        {
            try
            {
                //打开串口
                port.Open();
                //判断是否选中开
                if (chb_CheckAll.Checked == true)
                {
                    //用字节的形式发送数据  全开 解释:order1 是控制命令,后面是2个byte的校验(高8位与低8位),0x00可以不写,直接写成(byte)((order1)>>8)
                    byte[] b = { order1, (byte)((order1 + 0x00) >> 8), (byte)(order1 + 0x00) };
            //把b数组中的数据以字节的形式写入串行端口
                    port.Write(b, 0, b.Length);
            //提示信息!
                    lab_Message.Text = "设备已经全部打开!";
                }
                else
                {
                    //用字节的形式发送数据  全关
                    byte[] b = { order2, (byte)((order2 + 0x00) >> 8), (byte)(order2 + 0x00) };
                    v.port.Write(b, 0, b.Length);
                    lab_Message.Text = "设备已经全部关闭!";
                }

                //关闭串口  记得开启端口之后一定要关闭,和ADO.NET的Connection对象一样,用过之后必须关闭。
                port.Close();
            }
            catch (Exception ex)
            {
         //捕获的异常信息
                MessageBox.Show(ex.Message, "提示");

            }
        }

 

  2,如果要对设备的状态进行实时监听,有一个很好的事件,在SerialPort类中有DataReceived事件,当串口的读缓存有数据到达时则触发DataReceived事件,其中 SerialPort.ReceivedBytesThreshold属性决定了当串口读缓存中数据多少个时才触发DataReceived事件,默认为 1。

  我们把串口的属性定义在InitializeComponent()方法下面,(不会连这个方法都不知道把?!!)。在页面命名空间下的第一个方法,是Visual Studio设计器自动生成的方法。

        public SettingsTimePlay()
        {
            InitializeComponent();
            //串行端口号
            seriaSettingPlay.PortName = "COM1";
            //波特率
            seriaSettingPlay.BaudRate = 115200;
            //奇偶校验位
            seriaSettingPlay.Parity = Parity.None;
            //数据位
            seriaSettingPlay.DataBits = 8;
            //停止位
            seriaSettingPlay.StopBits = StopBits.One;
       textChanged += new UpdateTextEventHandler(ChangeText);
            try
            {
                //打开串口
                seriaSettingPlay.Open();
            }
            catch (Exception ex) 
            {
                //捕获的异常信息,没检查到串口或串口设置不正确。
                MessageBox.Show("请检查是否已经连接串口!\n" + ex.Message, "提示");
            }
        }

  

  属性定义完成之后,需要,

 

        //定义委托
        private delegate void GetText(string text);
        //定义事件
        private event GetText textChanged;
        //事件处理方法
        private void ChangeText(string text)
        {
              //这里为处理接收到的值,赋值到控件上。
              ...........
        }

  

  现在就是DataReceived事件进行实时监听了,

  

 
   
//定义接收的字节
private byte[] Data = new byte[8];
private void seriaSettingPlay_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
  //读取来自监听到的字节
   seriaSettingPlay.Read(be,0,be.Length);
  //把第一个命名赋值到text变量
  text=be[0].Tostring();
  seriaSettingPlay.DiscardInBuffer();
  this.Invoke(textChanged, new string[] { text});
}

  最后,记得在Load事件里去读取。还有取出来的数据最好也进行校验,因为不校验容易受到干扰。

你可能感兴趣的:((.net进程&线程))