Exemple #1
0
 private static void RunService()
 {
     Console.WriteLine("\r\nRun Mode:Service");
     if (serailports.Length > 0)
     {
         foreach (var name in serailports)
         {
             if (name.Contains("0"))
             {
                 continue;
             }
             CustomSerialPort csp = new CustomSerialPort(name, baudRate);
             csp.ReceivedEvent += Csp_ReceivedEvent;// Csp_DataReceived;
             try
             {
                 csp.Open();
                 servicePorts.Add(name, csp);
                 Console.WriteLine($"Service Open Uart [{name}] Succful!");
             }
             catch (Exception ex)
             {
                 Console.WriteLine($"RunService Open Uart [{name}] Exception:{ex}");
             }
         }
         OpenUartTestTimer();
     }
 }
 public void drivertest()
 {
     try
     {
         CustomSerialPort sbus = new CustomSerialPort("COM3", 100000, Parity.Even, 8, StopBits.Two);
         sbus.ReceiveTimeoutEnable = false;
         //sbus.ReceiveTimeout = 1;
         sbus.ReceivedEvent += Sbus_ReceivedEvent;
         sbus.Open();
     }
     catch (Exception eeee0)
     {
     }
 }
Exemple #3
0
 private static void OpenUart(string portName)
 {
     CloseUart();
     try
     {
         csp                = new CustomSerialPort(portName);
         csp.BaudRate       = baudRate;
         csp.ReceivedEvent += Csp_ReceivedEvent;
         csp.Open();
         OpenUartTestTimer();
         Console.WriteLine($"open serial port:{portName} succful!baudRate:{baudRate}");
     }
     catch (Exception ex)
     {
         Console.WriteLine($"Open Uart Exception:{ex}");
     }
 }
Exemple #4
0
 public static bool OpenUart(string portName)
 {
     CloseUart();
     try
     {
         m_CSP                = new CustomSerialPort(portName);
         m_CSP.BaudRate       = baudRate;
         m_CSP.ReceivedEvent += Csp_ReceivedEvent;
         m_CSP.Open();
         //OpenUartTestTimer();
         Console.WriteLine($"打开串口:{portName} 成功!波特率:{baudRate}");
         SelectedComPort = portName;
         return(true);
     }
     catch (Exception ex)
     {
         SelectedComPort = null;
         m_CSP           = null;
         Console.WriteLine($"打开串口失败:{ex}");
     }
     return(false);
 }
Exemple #5
0
        /// <summary>
        /// 测试串口是否成功
        /// </summary>
        /// <param name="portName"></param>
        public static void TestUart(string portName)
        {
            CustomSerialPort sp;

            try
            {
                sp = new CustomSerialPort(portName, baudRate);
                sp.Open();
                string msg;
                msg = "Hello Uart";
                sp.WriteLine(msg);
                Console.WriteLine(msg);
                msg = "Byebye Uart";
                sp.WriteLine(msg);
                sp.Close();
                sp.Dispose();
                sp = null;
                Console.WriteLine(msg);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Open Uart Exception:{ex}");
            }
        }
        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);
                        }
                    }
                }
            }
        }
        private static void Server_PlaintextReceived(object sender, TcpDatagramReceivedEventArgs <string> e)
        {
            Console.WriteLine($"recv from { e.TcpClient.Client.RemoteEndPoint.ToString()}: {e.Datagram}");
            Logger.Custom("log/", $"recv from { e.TcpClient.Client.RemoteEndPoint.ToString()}: {e.Datagram}");

            #region 指令正确时
            if (e.Datagram.Length == 10)
            {
                #region【1】定义变量
                int index;
                #endregion

                #region【2】数据处理
                try
                {
                    int.TryParse(e.Datagram.Substring(5, 3), out index);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    Logger.Custom("log/", $"Data Received from { e.TcpClient.Client.RemoteEndPoint.ToString()} exception:{ex.Message}");
                    byte[] msg = Encoding.Default.GetBytes("ErrorRequest!");
                    e.TcpClient.GetStream().Write(msg, 0, msg.Length); // return confirmation
                    return;
                }

                string cmd = e.Datagram.Remove(5, 3);
                #endregion

                #region【3】 处理逻辑
                if (mySer != null && mySer.IsOpen)
                {
                    DealwithCmd(cmd, index, e.TcpClient);
                }
                #endregion

                #region 串口未打开时的异常处理
                else
                {
                    try
                    {
                        mySer.Open();
                        // if (mySer.ReceivedEvent
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                        Logger.Custom("log/", $"Serial Opening exception:{ex.Message}");
                    }

                    byte[] msg = Encoding.Default.GetBytes("SerialComunicationError!");
                    e.TcpClient.GetStream().Write(msg, 0, msg.Length); // return confirmation
                }
                #endregion
            }
            #endregion

            #region 指令异常时
            else
            {
                byte[] msg = Encoding.Default.GetBytes("ErrorRequest!-CMDLengthError");

                e.TcpClient.GetStream().Write(msg, 0, msg.Length); // return confirmation
            }
            #endregion
        }
Exemple #8
0
 public void OpenSerialPort(string portName, int baudRate)
 {
     serialPort.Open(portName, baudRate);
 }