using System; using System.IO; using System.IO.Ports; using System.Threading; namespace RailLocalMeter { public class RfidRailWayNo { Log lg = Log.GetInstance(); SerialPort serialPort1; bool blThreadFlag = false; private object obj = new object(); private Thread mThread = null; /// /// comPara是配置文件中的comPara /// /// public void StartThreadSweep(out string msg) { #region 串口采集配置 Parity parity = Parity.None; switch (AppConfigCache.comParity) { case "ODD": parity = Parity.Odd; break; case "EVEN": parity = Parity.Even; break; default: break; } StopBits stopBits = StopBits.None; switch (AppConfigCache.comStopBits) { case "1": stopBits = StopBits.One; break; case "1.5": stopBits = StopBits.OnePointFive; break; case "2": stopBits = StopBits.Two; break; default: break; } serialPort1 = new SerialPort(AppConfigCache.comPort, AppConfigCache.comBaud, parity, AppConfigCache.comLength, stopBits); int icnt = 0; msg = ""; while (!serialPort1.IsOpen) { try { icnt++; serialPort1.Open(); } catch (Exception err) { lg.WriteLog(LogType.RfidLoc, $"打开串口失败,正重试{err.Message}"); } System.Threading.Thread.Sleep(500); if (icnt > 5) { msg = "串口打开失败,请检查串口是否存在,且是否被占用"; return; } } #endregion blThreadFlag = true; mThread = new Thread(new ThreadStart(ThreadSweepInfo)); mThread.Start(); } private byte[] ReadPort(byte[] sendData) { serialPort1.Write(sendData, 0, sendData.Length); DateTime dt = DateTime.Now; Thread.Sleep(50); byte[] recData = new byte[serialPort1.BytesToRead]; serialPort1.Read(recData, 0, recData.Length); return recData; } /// /// 扫码信息读取 /// /// private void ThreadSweepInfo() { try { while (blThreadFlag) { lock (obj) { byte[] bt = ReadPort(new byte[] { 0x11 }); string strtmp = System.Text.Encoding.UTF8.GetString(bt); if (!string.IsNullOrEmpty(strtmp)) { if ((strtmp.IndexOf("T") == 0 || strtmp.IndexOf("Q") == 0 || strtmp.IndexOf("G") == 0) && strtmp.Length > 14) { if (CacleCls.rfidCarNo != strtmp && strtmp.Trim() != "") { CacleCls.rfidCarNo = strtmp; lg.WriteLog(LogType.RfidLoc, $"获取并提供给界面的读卡器数据:{strtmp}"); } } else { lg.WriteLog(LogType.RfidLoc, $"读卡器读取的数据:{strtmp}"); } } } } } catch (Exception exp) { lg.WriteLog(LogType.RfidLoc, $"读卡器数据读取异常:{exp.Message}"); } } /// /// 关闭线程 /// /// public bool CloseThread() { try { blThreadFlag = false; Close(); return true; } catch { return false; } } /// /// 关闭扫描枪 /// private void Close() { lg.WriteLog(LogType.RfidLoc, $"读卡器关闭"); if (serialPort1 != null && serialPort1.IsOpen) serialPort1.Close(); } } }