public static void WriteMsg(string msg) { try { if (m_CSP != null && m_CSP.IsOpen) { //string sendMsg = $"{SelectedComPort} send msg:{msgIndex:d4}\t{DateTime.Now:yyyy/MM/dd HH:mm:ss.fff}\r\n"; byte[] bytes = null; if (msg.Contains(" ")) { string[] arr = msg.Split(' '); bytes = HexToBytes(msg); } else { bytes = Encoding.ASCII.GetBytes(msg); } m_CSP.Write(bytes); } } catch (Exception err) { } }
private static void SendTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { if (csp != null && csp.IsOpen) { msgIndex++; string sendMsg = $"{selectedComPort} send msg:{msgIndex:d4}\t{DateTime.Now:yyyy/MM/dd HH:mm:ss.fff}\r\n"; csp.Write(sendMsg); } #if RunIsService if (servicePorts.Count > 0) { msgIndex++; } foreach (var sps in servicePorts.Values) { if (sps.IsOpen) { string sendMsg = $"{sps.PortName} send msg:{msgIndex:d4}\t{DateTime.Now:yyyy/MM/dd HH:mm:ss.fff}\r\n"; sps.Write(sendMsg); } } #endif }
static public void DealWithLocks(int code, CustomSerialPort serial) { serial.Write(UnlockCmd(code)); }
static void Main(string[] args) { #region Fileds AsyncTcpServer server = null; int totalNum = 0, rownum = 0, columnum = 0, usedcabinet = 0; string rangeRule = ""; string serverip = ""; int serverport = 0; #endregion #region Initial #region 读取箱体配置文件 try { ConfigLoad conip = new ConfigLoad(configPath); totalNum = conip.GetIntValue("totalNum"); rangeRule = conip.GetStringValue("rangeRule"); rownum = conip.GetIntValue("rowNum"); columnum = conip.GetIntValue("colunNum"); usedcabinet = conip.GetIntValue("usedNum"); serverip = conip.GetStringValue("ServerIP"); serverport = conip.GetIntValue("ServerPort"); } catch (Exception ex) { Logger.Custom("log/", $"load config failed with error:{ex}"); } strsend = totalNum.ToString("000") + "-" + rangeRule + "-" + rownum.ToString("000") + "-" + columnum.ToString("000") + "-" + usedcabinet.ToString("000"); Console.WriteLine(strsend); #endregion #region 启动服务器 try { Console.WriteLine("sever is starting....."); Logger.Custom("log/", "sever is starting....."); server = new AsyncTcpServer(IPAddress.Parse("192.168.2.20"), 10001); //server = new AsyncTcpServer(IPAddress.Parse("127.0.0.1"), 10001); server.ClientConnected += new EventHandler <TcpClientConnectedEventArgs>(Server_ClientConnected); server.ClientDisconnected += new EventHandler <TcpClientDisconnectedEventArgs>(Server_ClientDisconnected); server.PlaintextReceived += new EventHandler <TcpDatagramReceivedEventArgs <string> >(Server_PlaintextReceived); server.Start(); Console.WriteLine($"server is started"); Logger.Custom("log/", "server is started"); } catch (Exception ex) { Console.WriteLine(ex.Message); Logger.Custom("log/", $"server starting excetpiton:{ex.Message}"); } #endregion #region 建立客户端 IPEndPoint iPEndPoint = new IPEndPoint(IPAddress.Parse(serverip), serverport); AsyncTcpClient = new AsyncTcpClient(iPEndPoint); //AsyncTcpClient.DatagramReceived += AsyncTcpClient_DatagramReceived; try { AsyncTcpClient.Connect(); } catch (Exception ex) { Console.WriteLine(ex.Message); Logger.Custom("log/", $"建立服务器连接出错:{ex.Message}"); } #endregion #region 启动串口 string[] names = CustomSerialPort.GetPortNames(); foreach (var item in names) { Console.WriteLine(item); } try { mySer = new CustomSerialPort("/dev/COM1", 9600); //mySer = new CustomSerialPort("COM1", 9600); Console.WriteLine($"PortName:{mySer.PortName}"); if (mySer != null) { mySer.ReceivedEvent += MySer_DataReceived; if (mySer.Open()) { Console.WriteLine("Serial Open Success!"); Logger.Custom("log/", $"Serial Open Success!"); } } } catch (Exception ex) { Console.WriteLine(ex.Message); Logger.Custom("log/", $"Serial Opening exception:{ex.Message}"); } #endregion #region 初始化逻辑 //1是开,2关 logicals.Clear(); logicals.Add(new Logical("N-O-D-R", 1, "2", "1", 2)); logicals.Add(new Logical("A-O-D-R", 1, "2", "1", 2)); logicals.Add(new Logical("A-R-D-R", 1, "2", "1", -1)); logicals.Add(new Logical("C-R-D-R", -1, "-1", "1", -1)); #endregion #region 检查柜门状态 lock (objPortLock) { mySer.Write(readOneall); Thread.Sleep(500); mySer.Write(readsecondAll); Thread.Sleep(500); } for (int i = 0; i < 60; i++) { if (CheckLockState(i + 1) == 2) { isNormalClose[i] = true; } if (i < 3) { Console.WriteLine($"D{i.ToString("000")} is normalClosed:{isNormalClose[i].ToString()}"); } } #endregion Console.WriteLine($"状态数组当前的大小时:{sourcebyte.Length}"); foreach (var item in sourcebyte) { Console.WriteLine(item.ToString("X")); } #endregion while (true) { lock (objPortLock) { try { mySer.Write(readOneall); Thread.Sleep(500); mySer.Write(readsecondAll); Thread.Sleep(500); } catch (Exception ex) { Console.WriteLine(ex.Message); Logger.Custom("log/", $"主程序出错:{ex.Message}"); } } for (int i = 0; i < 60; i++) { #region 检查非法开门 if (isNormalClose[i] && CheckLockState(i + 1) == 1 && !isSendError[i]) { if (!AsyncTcpClient.Connected) { try { Console.WriteLine("client disconnect!"); AsyncTcpClient = new AsyncTcpClient(iPEndPoint); AsyncTcpClient.Connect(); if (AsyncTcpClient.Connected) { AsyncTcpClient.Send(Encoding.Default.GetBytes($"D{(i + 1).ToString("000")} is opened Illegally!")); isSendError[i] = true; Console.WriteLine($"D{i + 1}非法开门了!"); } } catch (Exception ex) { Console.WriteLine(ex.Message); Logger.Custom("log/", $"建立服务器连接出错:{ex.Message}"); } } else { AsyncTcpClient.Send(Encoding.Default.GetBytes($"D{(i+1).ToString("000")} is opened Illegally!")); isSendError[i] = true; Console.WriteLine($"D{i + 1}非法开门了!"); } } #endregion #region 等待非法开门关门 if (isSendError[i] && CheckLockState(i + 1) == 2) { if (!AsyncTcpClient.Connected) { try { Console.WriteLine("client disconnect!"); AsyncTcpClient = new AsyncTcpClient(iPEndPoint); AsyncTcpClient.Connect(); if (AsyncTcpClient.Connected) { AsyncTcpClient.Send(Encoding.Default.GetBytes($"D{(i + 1).ToString("000")} is Closed!")); isSendError[i] = false; } } catch (Exception ex) { Console.WriteLine(ex.Message); Logger.Custom("log/", $"建立服务器连接出错:{ex.Message}"); } } else { AsyncTcpClient.Send(Encoding.Default.GetBytes($"D{(i+1).ToString("000")} is closed!")); isSendError[i] = false; } } #endregion } //delete threedays ago logger if (DateTime.Now.Hour == 0 && DateTime.Now.Minute == 0 && DateTime.Now.Second < 10) { //删除文件 for (int i = 0; i < Directory.GetFiles("log").ToList().Count; i++) { try { string filestr = Directory.GetFiles("log")[i]; string date = filestr.Substring(4, filestr.Length - 8); DateTime recoderdate = Convert.ToDateTime(date); TimeSpan timespan = DateTime.Now - recoderdate; if (timespan > new TimeSpan(72, 0, 0)) { File.Delete(Directory.GetFiles("log")[i]); } } catch (Exception ex) { Console.WriteLine(ex.Message); } } } } }