From e4b7f440634eab142fea29c99024894dec32f43b Mon Sep 17 00:00:00 2001 From: liuwf Date: Mon, 1 Jul 2024 14:41:32 +0800 Subject: [PATCH] =?UTF-8?q?add-=E6=B7=BB=E5=8A=A0=E5=85=89=E6=BA=90?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SlnMesnac.Common/GunHelper.cs | 3 - SlnMesnac.Common/LightHelper.cs | 135 ++++++++++++++ SlnMesnac.Common/WaringLightUtil.cs | 273 ++++++++++++++++++++++++++++ SlnMesnac.Config/DebugConfig.cs | 12 +- 4 files changed, 419 insertions(+), 4 deletions(-) create mode 100644 SlnMesnac.Common/LightHelper.cs create mode 100644 SlnMesnac.Common/WaringLightUtil.cs diff --git a/SlnMesnac.Common/GunHelper.cs b/SlnMesnac.Common/GunHelper.cs index c0c4dc2..1ac1b58 100644 --- a/SlnMesnac.Common/GunHelper.cs +++ b/SlnMesnac.Common/GunHelper.cs @@ -46,9 +46,6 @@ namespace SlnMesnac.Common { try { - string port = System.IO.Ports.SerialPort.GetPortNames().FirstOrDefault(); - //实例化串行端口 - //端口名 注:因为使用的是USB转RS232 所以去设备管理器中查看一下虚拟com口的名字 serialPort.PortName = config.Port;// portName; //波特率 霍尼威尔扫码枪115200,普通9600 diff --git a/SlnMesnac.Common/LightHelper.cs b/SlnMesnac.Common/LightHelper.cs new file mode 100644 index 0000000..1d6116b --- /dev/null +++ b/SlnMesnac.Common/LightHelper.cs @@ -0,0 +1,135 @@ +using Microsoft.Extensions.DependencyInjection; +using SlnMesnac.Config; +using System; +using System.Collections.Generic; +using System.IO.Ports; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace SlnMesnac.Common +{ + /// + /// 光源控制类 + /// + public sealed class LightHelper + { + + #region 单例实现 + private static readonly LightHelper lazy = new LightHelper(); + public static LightHelper Instance + { + get + { + return lazy; + } + } + #endregion + + #region 变量定义 + private static SerialPort serialPort = new SerialPort(); + + #endregion + + private DebugConfig config = DebugConfig.Instance; + + //初始化串口并启动接收数据 + public void InstanceSerialPort() + { + try + { + + + serialPort.PortName = config.LightPort;// portName; + + serialPort.BaudRate = 115200; + //奇偶校验 + serialPort.Parity = Parity.None; + //停止位 + serialPort.StopBits = StopBits.One; + //数据位 + serialPort.DataBits = 0x8; + //忽略null字节 + serialPort.DiscardNull = true; + + //接收事件 + serialPort.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(serialPort1_DataReceived); + + //开启串口 + serialPort.Open(); + + + } + catch (Exception ex) + { + Console.WriteLine(ex.Message.ToString()); + } + } + + + + /// + /// 接收数据 + /// + /// + /// + private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) + { + + string result = ""; + int bytesToRead = serialPort.BytesToRead; + byte[] buf = new byte[bytesToRead]; + serialPort.Read(buf, 0x0, bytesToRead); + + for (int i = 0x0; i < buf.Length; i++) + { + int num = (int)buf[i]; + result =result+num.ToString("X2"); + } + Console.WriteLine(result); + } + + /// + /// 发送数据方法 + /// OK-校验成功关闭灯光,NG-校验失败闪烁红灯 + /// + /// + public void SendData(string data) + { + try + { + if (serialPort.IsOpen) + { + + if (data == "OPEN") + { + // 第1通道亮度200 + serialPort.WriteLine("$310C86E"); + + // 第2通道亮度200 + serialPort.WriteLine("$320C86E"); + } + else if (data == "CLOSE") + { + // 第2通道亮度0 + serialPort.WriteLine("$3100004"); + // 第2通道亮度0 + serialPort.WriteLine("$3200005"); + } + } + else + { + Console.WriteLine("串口未打开,请先初始化串口并打开连接。"); + } + } + catch (Exception ex) + { + Console.WriteLine($"发送数据时发生错误:{ex.Message}"); + } + + } + + + } +} diff --git a/SlnMesnac.Common/WaringLightUtil.cs b/SlnMesnac.Common/WaringLightUtil.cs new file mode 100644 index 0000000..acf9b8b --- /dev/null +++ b/SlnMesnac.Common/WaringLightUtil.cs @@ -0,0 +1,273 @@ +//using BarcodeScan; +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using System.Text; +//using System.Threading; +//using System.Threading.Tasks; + +//namespace Sys.Utilities +//{ +// /// +// /// 报警灯工具类 +// /// +// public class WaringLightUtil +// { + +// private static ScanProvider _scanner; +// private static string _portName; +// private static int _baudRate; +// private static Thread thread; + + + + +// #region 打开 + +// /// +// /// 打开串口 portName 端口 baudRate 波特率 +// /// +// /// 端口 +// /// 波特率 +// /// +// public static bool Open(string portName, int baudRate) +// { +// _portName = portName; +// _baudRate = baudRate; +// return InitScanner(); +// } + +// private static bool InitScanner() +// { +// bool connFlag = false; +// try +// { +// // 打开串口 +// _scanner = new ScanProvider(_portName, _baudRate); +// // 打开串口 +// if (_scanner.Open()) +// { +// connFlag = true; +// } +// else +// { +// connFlag = false; +// } +// } +// catch (Exception ex) +// { +// connFlag = false; +// } +// return connFlag; +// } + +// #endregion + +// /// +// /// 开启或关闭报警灯,status:1开启、2关闭,autoClosed:是否自动关闭 +// /// +// /// 1开启,2关闭 +// /// 是否自动关闭 +// //public static void AlarmLamp(int status, bool autoClosed = true) +// //{ +// // try +// // { +// // if (status == 1) +// // { +// // WaringLightUtil.WriteData(1, 2); +// // Thread.Sleep(100); +// // WaringLightUtil.WriteData(3, 1); +// // Thread.Sleep(100); +// // WaringLightUtil.WriteData(4, 1); + +// // if (autoClosed == true) +// // { +// // thread = new Thread(CloseAlarmLampThree) +// // { +// // IsBackground = true +// // }; +// // thread.Start(); +// // } +// // } +// // else +// // { +// // WaringLightUtil.WriteData(1, 1); +// // Thread.Sleep(100); +// // WaringLightUtil.WriteData(3, 2); +// // Thread.Sleep(100); +// // WaringLightUtil.WriteData(4, 2); +// // } +// // } +// // catch (Exception) +// // { + +// // } +// //} + +// //private static void CloseAlarmLampThree() +// //{ +// // try +// // { +// // Thread.Sleep(5000); + +// // WaringLightUtil.WriteData(1, 1); +// // Thread.Sleep(100); +// // WaringLightUtil.WriteData(3, 2); +// // Thread.Sleep(100); +// // WaringLightUtil.WriteData(4, 2); +// // } +// // catch(Exception) +// // { + +// // } +// //} + +// public static void TriggerReleaseOne() +// { +// try +// { +// WaringLightUtil.WriteData(1, 1); +// Thread.Sleep(1000); +// WaringLightUtil.WriteData(1, 2); +// } +// catch (Exception) +// { + +// } +// } + +// #region 发送数据 +// /// +// /// 数据发送 层数layer 1绿 2黄 3红 4锋鸣 状态lampStatus 打开 1 关闭2 +// /// +// /// 层数 1 2 3 4 +// /// 状态 打开 1 关闭2 +// public static void WriteData(int layer, int lampStatus) +// { +// byte[] NormalDataBuff = new byte[8]; +// NormalDataBuff[0] = 0x01; +// NormalDataBuff[1] = 0x05; +// NormalDataBuff[2] = 0x00; +// if (layer == 1) { +// NormalDataBuff[3] = 0X00; +// } +// if (layer == 2) +// { +// NormalDataBuff[3] = 0X01; +// } +// if (layer == 3) +// { +// NormalDataBuff[3] = 0X02; +// } +// if (layer == 4) +// { +// NormalDataBuff[3] = 0X03; +// } + +// if (lampStatus == 1) +// { +// NormalDataBuff[4] = 0xFF; +// } +// else { +// NormalDataBuff[4] = 0x00; +// } + + + + +// NormalDataBuff[5] = 0x00; +// int CRCBuff = CRC16(NormalDataBuff, 0, 5); +// string bb = Convert.ToString(CRCBuff, 16).ToUpper().PadLeft(4, '0'); +// NormalDataBuff[6] = Convert.ToByte(bb.Substring(0, 2), 16);//CRC 校验低位 +// NormalDataBuff[7] = Convert.ToByte(bb.Substring(2, 2), 16);//CRC 校验低位 +// _scanner.Write(NormalDataBuff, 0, 8); +// } + +// #endregion + + + + + + +// #region CRC +// private static readonly byte[] _auchCRCHi = new byte[]//crc高位表 +// { +// 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, +// 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, +// 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, +// 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, +// 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, +// 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, +// 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, +// 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, +// 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, +// 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, +// 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, +// 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, +// 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, +// 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, +// 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, +// 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, +// 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, +// 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, +// 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, +// 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, +// 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, +// 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, +// 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, +// 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, +// 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, +// 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40 +// }; +// private static readonly byte[] _auchCRCLo = new byte[]//crc低位表 +// { +// 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, +// 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, +// 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, +// 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, +// 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, +// 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, +// 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, +// 0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, +// 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, +// 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, +// 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, +// 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, +// 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, +// 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, +// 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, +// 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, +// 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, +// 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, +// 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, +// 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, +// 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, +// 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, +// 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, +// 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, +// 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, +// 0x43, 0x83, 0x41, 0x81, 0x80, 0x40 +// }; + +// public static ushort CRC16(Byte[] buffer, int Sset, int Eset) +// { +// byte crcHi = 0xff; // 高位初始化 + +// byte crcLo = 0xff; // 低位初始化 + +// for (int i = Sset; i <= Eset; i++) +// { +// int crcIndex = crcHi ^ buffer[i]; //查找crc表值 + +// crcHi = (byte)(crcLo ^ _auchCRCHi[crcIndex]); +// crcLo = _auchCRCLo[crcIndex]; +// } +// return (ushort)(crcHi << 8 | crcLo); +// } +// } +// #endregion + + + +//} diff --git a/SlnMesnac.Config/DebugConfig.cs b/SlnMesnac.Config/DebugConfig.cs index 894fd86..f5d18de 100644 --- a/SlnMesnac.Config/DebugConfig.cs +++ b/SlnMesnac.Config/DebugConfig.cs @@ -72,12 +72,22 @@ namespace SlnMesnac.Config } /// - /// Com口 + /// 报警灯COM口 /// public string Port { get { return iniHelper.IniReadValue("system", "ComPort"); } set { iniHelper.IniWriteValue("system", "ComPort", value); } } + + + /// + /// 灯光控制COM口 + /// + public string LightPort + { + get { return iniHelper.IniReadValue("system", "LightPort"); } + set { iniHelper.IniWriteValue("system", "LightPort", value); } + } } }