// using Mesnac.DoUtils.enumInfo;
// using System;
// using System.Collections.Generic;
// using System.IO.Ports;
// using System.Linq;
// using System.Text;
// using System.Threading;
// using System.Threading.Tasks;
// using System.Xml.Linq;
//
// namespace Mesnac.DoUtils
// {
//     /// <summary>
//     /// 报警灯控制类
//     /// </summary>
//     public sealed class DoControl
//     {
//         public SerialPort serialPort = new SerialPort("COM5");
//         private static readonly Lazy<DoControl> lazy = new Lazy<DoControl>(() => new DoControl());
//         public static DoControl Instance => lazy.Value;
//         public bool AlarmState { get; private set; } = false;
//         private DoControl()
//         {
//             serialPort.BaudRate = 115200;
//             serialPort.DataBits = 8;
//             serialPort.StopBits = StopBits.One;
//             serialPort.Parity = Parity.None;
//         }
//
//         /// <summary>
//         /// 串口启动
//         /// </summary>
//         public void ComOn()
//         {
//             try
//             {
//                 if (!serialPort.IsOpen)
//                 {
//                     serialPort.Open();
//                     ICSharpCode.Core.LoggingService<DoControl>.Debug($"打开报警器串口成功,串口:{serialPort.PortName};波特率:{serialPort.BaudRate}");
//                 }
//             }catch (Exception ex)
//             {
//                 ICSharpCode.Core.LoggingService<DoControl>.Error($"报警器串口打开异常,串口:{serialPort.PortName};波特率:{serialPort.BaudRate};异常信息:{ex.Message}");
//             }
//         }
//         /// <summary>
//         /// 串口关闭 
//         /// </summary>
//         public void ComOff()
//         {
//             if (serialPort.IsOpen)
//             {
//                 serialPort.Close();
//             }
//         }
//
//         /// <summary>
//         /// DO1设备启动(红灯)
//         /// </summary>
//         public void redLightOn()
//         {
//             DOControl(DOName.Red, DOOnOff.On);
//         }
//
//         /// <summary>
//         /// DO2设备启动(绿灯)
//         /// </summary>
//         public void greenLightOn()
//         {
//             DOControl(DOName.Green, DOOnOff.On);
//         }
//
//         /// <summary>
//         /// DO3设备启动(蜂鸣器)
//         /// </summary>
//         public void buzzerOn()
//         {
//             DOControl(DOName.Buzzer, DOOnOff.On);
//         }
//
//         /// <summary>
//         /// DO1设备关闭(红灯)
//         /// </summary>
//         public void redLightOff()
//         {
//             DOControl(DOName.Red, DOOnOff.Off);
//         }
//
//         /// <summary>
//         /// DO2设备关闭(绿灯)
//         /// </summary>
//         public void greenLightOff()
//         {
//             DOControl(DOName.Green, DOOnOff.Off);
//         }
//
//         /// <summary>
//         /// DO3设备关闭(蜂鸣器)
//         /// </summary>
//         public void buzzerOff()
//         {
//             DOControl(DOName.Buzzer, DOOnOff.On);
//         }
//
//         /// <summary>
//         /// 重置串口和DO状态
//         /// </summary>
//         public void Reset()
//         {
//             SetOff();
//             ComOff();
//         }
//
//         /// <summary>
//         /// 重置DO状态
//         /// </summary>
//         public void SetOff()
//         {
//             foreach (DOName dOName in Enum.GetValues(typeof(DOName)))
//             {
//                 DOControl(dOName, DOOnOff.Off);
//             }
//         }
//
//         /// <summary>
//         /// DO启停控制
//         /// 如果收到红灯亮的信号,AlarmState会变为True; 收到红灯灭的信号,AlarmState设置为false
//         /// </summary>
//         /// <param name="dOName">DegitalOut接口名称</param>
//         /// <param name="dOOnOff">启停状态</param>
//         public void DOControl(DOName dOName, DOOnOff dOOnOff)
//         {
//             if(dOName.Equals(DOName.Red) && dOOnOff.Equals(DOOnOff.On))
//             {
//                 AlarmState = true;
//             }
//             if(dOName.Equals(DOName.Red) && dOOnOff.Equals(DOOnOff.Off))
//             {
//                 AlarmState = false;
//             }
//             if (serialPort.IsOpen)
//             {
//                 serialPort.Write(new byte[] { 0xE3, 0x01, 0x09, (byte)dOName, (byte)dOOnOff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, 0, 12);
//             }
//             else
//             {
//                 ComOn();
//                 serialPort.Write(new byte[] { 0xE3, 0x01, 0x09, (byte)dOName, (byte)dOOnOff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, 0, 12);
//             }
//         }
//
//         /// <summary>
//         /// 文本框传输数据控制COM5串口
//         /// </summary>
//         public void DOTestSend(string str)
//         {
//             //ComOn();
//             string[] strArray = str.Split(' ');
//             byte[] bytes = new byte[strArray.Length];
//             for (int i = 0; i < bytes.Length; i++)
//             {
//                 bytes[i] = Convert.ToByte(strArray[i], 16);
//             }
//             serialPort.Write(bytes, 0, bytes.Length);
//         }
//     }
// }