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; }
/// <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); }
/// <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); }