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 void ThreadSweepInfo() { try { while (blThreadFlag) { lock (obj) { Thread.Sleep(100); string strtmp = ""; if (serialPort1.BytesToRead > 0) { strtmp = serialPort1.ReadExisting(); } strtmp = strtmp.Split(new char[] { '\r' })[0]; if (strtmp != "") { if (CacleCls.rfidCarNo != strtmp) { CacleCls.rfidCarNo = strtmp; 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(); } } }