示例#1
0
 public override void Init(Dictionary <string, string> initParm)
 {
     this.initParm = initParm;
     if (InitParm.ContainsKey("Text"))
     {
         this.Text = InitParm["Text"];
     }
     if (initParm.ContainsKey("TimeOut"))
     {
         this.TimeOut = All.Class.Num.ToInt(initParm["TimeOut"]);
     }
     if (initParm.ContainsKey("ErrorCount"))
     {
         this.ErrorCount = All.Class.Num.ToInt(initParm["ErrorCount"]);
     }
     if (!InitParm.ContainsKey("Address"))
     {
         All.Class.Error.Add("RFID初始化参数中没有地址", Environment.StackTrace);
     }
     else
     {
         address = All.Class.Num.ToByte(InitParm["Address"]);
     }
     MostLog = false;
 }
示例#2
0
        /// <summary>
        /// 直接将指定数据写入到缓冲区
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="sendBuff"></param>
        /// <returns></returns>
        protected bool Write <T>(T sendBuff)
        {
            bool result = true;

            try
            {
                if (this.Parent == null)
                {
                    All.Class.Error.Add("当前设备没有指定的通讯类", Environment.StackTrace);
                    result = false;
                    return(result);
                }
                if ((this.Parent is Communite.Udp || this.Parent is Communite.TcpClient) &&
                    InitParm.ContainsKey("RemotHost") && InitParm.ContainsKey("RemotPort"))
                {
                    this.Parent.Send <T>(sendBuff, InitParm);
                }
                else
                {
                    this.Parent.Send <T>(sendBuff);
                }
            }
            catch (Exception e)
            {
                result = false;
                All.Class.Error.Add(e);
            }
            return(result);
        }
示例#3
0
        /// <summary>
        /// 写入数据,并延时等待数据返回
        /// </summary>
        /// <typeparam name="T">写入数据类型</typeparam>
        /// <typeparam name="U">读取数据类型</typeparam>
        /// <param name="sendBuff">写入数据</param>
        /// <param name="returnCount">等待返回数据长度</param>
        /// <param name="readBuff">读取数据</param>
        /// <returns></returns>
        protected bool Write <T, U>(T sendBuff, int returnCount, out U readBuff)
        {
            bool result = true;

            readBuff = default(U);
            try
            {
                if (this.Parent == null)
                {
                    All.Class.Error.Add("当前设备没有指定的通讯类", Environment.StackTrace);
                    result = false;
                    return(result);
                }
                if (!this.Parent.IsOpen)
                {
                    this.Parent.Open();
                }
                if ((this.Parent is Communite.Udp || this.Parent is Communite.TcpClient) &&
                    InitParm.ContainsKey("RemotHost") && InitParm.ContainsKey("RemotPort"))
                {
                    this.Parent.Send <T>(sendBuff, InitParm);
                }
                else
                {
                    this.Parent.Send <T>(sendBuff);
                }
                int  startTime = Environment.TickCount;
                bool timeOut   = false;
                bool getData   = false;
                do
                {
                    if ((Environment.TickCount - startTime) > TimeOut)
                    {
                        timeOut = true;
                    }
                    if (this.Parent.DataRecive >= returnCount)
                    {
                        getData = true;
                    }
                    System.Threading.Thread.Sleep(50);
                }while (!timeOut && !getData);
                if (timeOut && !getData)
                {
                    result = false;
                    if (mostLog)
                    {
                        if (this.Parent.DataRecive > 0)
                        {
                            byte[] readTmpBuff;
                            this.Parent.Read <byte[]>(out readTmpBuff);
                            All.Class.Log.Add(All.Class.Num.Hex2Str(readTmpBuff));
                        }
                        All.Class.Log.Add(string.Format("{0}读取数据超时,要求长度:{1},实际长度:{2}", Text, returnCount, this.Parent.DataRecive));
                    }
                }
                else
                {
                    byte[] readTmpBuff;
                    this.Parent.Read <byte[]>(out readTmpBuff);
                    if (readTmpBuff.Length < returnCount)
                    {
                        if (mostLog)
                        {
                            All.Class.Log.Add(string.Format("{0}实际读取的参数和要求参数长度不一致,要求长度:{1},实际长度:{2}", Text, returnCount, readTmpBuff.Length));
                        }
                        result = false;
                    }
                    else
                    {
                        switch (All.Class.TypeUse.GetType <U>())
                        {
                        case All.Class.TypeUse.TypeList.String:
                            readBuff = (U)(object)Encoding.UTF8.GetString(readTmpBuff);
                            break;

                        case All.Class.TypeUse.TypeList.Bytes:
                            readBuff = (U)(object)readTmpBuff;
                            break;

                        default:
                            All.Class.Error.Add(string.Format("读取的参数类型不正确,只能读取Byte[]或者String,当前读取类型为:{0}", typeof(U).ToString()));
                            result = false;
                            break;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                result = false;
                All.Class.Error.Add(e);
            }
            if (result)
            {
                Conn          = true;
                tmpErrorCount = 0;
            }
            else
            {
                tmpErrorCount++;
                if (errorCount < tmpErrorCount)
                {
                    Conn          = false;
                    tmpErrorCount = errorCount;
                }
            }
            return(result);
        }