/// <summary>
        /// 设置本段机器的后段出料状态(等待出料  出料完成)
        /// </summary>
        /// <param name="sendor">本段机器名称</param>
        /// <param name="Other">前段机器名称</param>
        /// <param name="timeout"></param>
        /// <returns></returns>
        public MesCmdAnswer SetOutStateBackSeg(string sendor, MachineState machineState, int timeout, bool SkipCheckLoction = false)
        {
            if (m_TcpLink == null)
            {
                return(null);
            }
            if (autoResetEvent.WaitOne(timeout, true))
            {
                BagClear();
                SetOutStateBackSegCmd cmdobj = new SetOutStateBackSegCmd();
                cmdobj.sendor       = sendor;
                cmdobj.machineState = machineState;

                MesCmdAnswer answer = CheckCMD(cmdobj, machineState, SkipCheckLoction);
                if (answer != null)
                {
                    autoResetEvent.Set();
                    return(answer);
                }

                cmdobj.Send(m_TcpLink);
                MesCmdAnswer mesCmdAnswer = GetCmdAnswerFrowSever(timeout);
                if (mesCmdAnswer != null)
                {
                    WriteStateFlags.AddOrUpdate(cmdobj.GenCmdCode(), machineState, (key, value) => { return(value = machineState); });
                }
                autoResetEvent.Set();
                return(mesCmdAnswer);
            }
            return(null);
        }
        public MesCmdAnswer GetLineOutStateCmdExc(string machineName, String Other, int timeout)
        {
            if (m_TcpLink == null)
            {
                return(null);
            }
            if (autoResetEvent.WaitOne(timeout, true))
            {
                BagClear();
                GetLineOutStateCmd getLineStateCmd = new GetLineOutStateCmd();
                getLineStateCmd.sendor = machineName;
                getLineStateCmd.Other  = Other;

                //string strCmd = JsonConvert.SerializeObject(getLineStateCmd);
                //strCmd += MesCmd.LineEndChars;
                //byte[] bytes = Encoding.Default.GetBytes(strCmd);
                //m_TcpLink.WriteData(bytes, bytes.Length);

                getLineStateCmd.Send(m_TcpLink);
                MesCmdAnswer mesCmdAnswer = GetCmdAnswerFrowSever(timeout);
                autoResetEvent.Set();
                return(mesCmdAnswer);
            }
            return(null);
        }
        public MesCmdAnswer SetLineOutStateCmdExc(string machineName, MachineState machineState, int timeout, bool SkipCheckLoction = false)
        {
            if (m_TcpLink == null)
            {
                return(null);
            }
            if (autoResetEvent.WaitOne(timeout, true))
            {
                BagClear();
                SetLineOutStateCmd setLineStateCmd = new SetLineOutStateCmd();
                setLineStateCmd.sendor       = machineName;
                setLineStateCmd.machineState = machineState;
                //string strCmd = JsonConvert.SerializeObject(setLineStateCmd);
                //strCmd += MesCmd.LineEndChars;
                //byte[] bytes = Encoding.Default.GetBytes(strCmd);
                //m_TcpLink.WriteData(bytes, bytes.Length);
                MesCmdAnswer answer = CheckCMD(setLineStateCmd, machineState, SkipCheckLoction);
                if (answer != null)
                {
                    autoResetEvent.Set();
                    return(answer);
                }

                setLineStateCmd.Send(m_TcpLink);
                MesCmdAnswer mesCmdAnswer = GetCmdAnswerFrowSever(timeout);
                if (mesCmdAnswer != null)
                {
                    WriteStateFlags.AddOrUpdate(setLineStateCmd.GenCmdCode(), machineState, (key, value) => { return(value = machineState); });
                }
                autoResetEvent.Set();
                return(mesCmdAnswer);
            }
            return(null);
        }
        private MesCmdAnswer GetCmdAnswerFromMem(string strcmdcode)
        {
            MesCmdAnswer mesCmdAnswer = null;

            ReciveAllAnswer.TryGetValue(strcmdcode, out mesCmdAnswer);
            return(mesCmdAnswer == null ? null :mesCmdAnswer);
        }
        public bool Init(string MachineName, string ip, int port)
        {
            m_TcpLink?.Close();
            bool bRtn = true;

            m_TcpLink = new TcpLink(0, MachineName, ip, port, 10000, MesCmd.LineEndChars);
            if (!m_TcpLink.IsOpen())
            {
                bRtn &= m_TcpLink.Open();
            }
            if (!bRtn)
            {
                return(false);
            }

            m_TcpLink.RecvStringMessageEvent += (object sender, AsyTcpSocketEventArgs e) =>
            {
                try
                {
                    string       answer       = e.Message;
                    MesCmdAnswer mesCmdAnswer = JsonConvert.DeserializeObject <MesCmdAnswer>(answer);
                    if (mesCmdAnswer != null)
                    {
                        Type type = FindCmdType(mesCmdAnswer.CmdType);
                        if (type != null)
                        {
                            mesCmdAnswer = (MesCmdAnswer)JsonConvert.DeserializeObject(answer, type);
                            if (mesCmdAnswer == null)
                            {
                                string timestr = DateTime.Now.ToString("yyyy - MM - dd - hh - mm - ss");
                                string strMes  = $"[{ timestr}]" + $": 回应为空 ";
                                File.AppendAllLines("D:\\ErrSeverInfo.text", new string[] { strMes });
                            }
                            ts.Add(mesCmdAnswer);
                            //CmdAnswer cmdAnswer = new CmdAnswer()
                            //{
                            //    _bHaveSet = true,
                            //    _mesCmdAnswer = mesCmdAnswer,
                            //};

                            ReciveAllAnswer.AddOrUpdate(mesCmdAnswer.strCodeFromCmd, mesCmdAnswer, (key, value) => { return(value = mesCmdAnswer); });
                            return;
                        }
                    }
                }
                catch (Exception es)
                {
                    string timestr = DateTime.Now.ToString("yyyy - MM - dd - hh - mm - ss");
                    string strMes  = $"[{ timestr}]" + $": {es} ";
                    File.AppendAllLines("D:\\ErrSeverInfo.text", new string[] { strMes });
                    ts.Add(null);
                }
            };
            return(true);
        }
        public bool Init(TcpLink tcpLink, TcpLink tcpLinkHeart)
        {
            m_TcpLink = tcpLink;
            bool bRtn = true;

            if (tcpLink == null)
            {
                return(false);
            }
            tcpLink.RecvStringMessageEvent += (object sender, AsyTcpSocketEventArgs e) =>
            {
                string       answer       = e.Message;
                MesCmdAnswer mesCmdAnswer = JsonConvert.DeserializeObject <MesCmdAnswer>(answer);
                if (mesCmdAnswer != null)
                {
                    Type type = FindCmdType(mesCmdAnswer.CmdType);
                    if (type != null)
                    {
                        mesCmdAnswer = (MesCmdAnswer)JsonConvert.DeserializeObject(answer, type);
                        if (mesCmdAnswer == null)
                        {
                            string timestr = DateTime.Now.ToString("yyyy - MM - dd - hh - mm - ss");
                            string strMes  = $"[{ timestr}]" + $": 回应为空 ";
                            File.AppendAllLines("D:\\ErrSeverInfo.text", new string[] { strMes });
                        }
                        ts.Add(mesCmdAnswer);
                        //CmdAnswer cmdAnswer = new CmdAnswer() {
                        //    _bHaveSet = true,
                        //    _mesCmdAnswer = mesCmdAnswer,
                        //};
                        lock ( objLock)
                        {
                            ReciveAllAnswer.AddOrUpdate(mesCmdAnswer.strCodeFromCmd, mesCmdAnswer, (key, value) => { return(value = mesCmdAnswer); });
                        }

                        return;
                    }
                }
                ts.Add(null);
            };
            if (!tcpLink.IsOpen())
            {
                bRtn &= tcpLink.Open();
            }
            if (!bRtn)
            {
                return(false);
            }

            return(true);
        }
        /// <summary>
        /// 查询机器后段的出料状态 (后机返回 等待出料 出料完成)
        /// </summary>
        /// <param name="sendor">本段机器名称</param>
        /// <param name="Other">后段机器名称</param>
        /// <param name="timeout"></param>
        /// <returns></returns>
        public MesCmdAnswer QueryBackSegOutState(string sendor, String Other, int timeout)
        {
            if (m_TcpLink == null)
            {
                return(null);
            }
            if (autoResetEvent.WaitOne(timeout, true))
            {
                BagClear();
                GetOutStateBackSegCmd cmdobj = new GetOutStateBackSegCmd();
                cmdobj.sendor = sendor;
                cmdobj.Other  = Other;


                cmdobj.Send(m_TcpLink);
                MesCmdAnswer mesCmdAnswer = GetCmdAnswerFrowSever(timeout);
                autoResetEvent.Set();
                return(mesCmdAnswer);
            }
            return(null);
        }
        private MesCmdAnswer GetCmdAnswerFrowSever(int nTimeout)
        {
            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Restart();
            MesCmdAnswer mesCmdAnswer = ts.Take();

            while (mesCmdAnswer == null)
            {
                if (stopwatch.ElapsedMilliseconds > nTimeout)
                {
                    break;
                }
                mesCmdAnswer = ts.Take();
            }

            if (mesCmdAnswer == null)
            {
            }
            return(mesCmdAnswer);
        }