/// <summary> /// 创建一个读取报文任务 /// </summary> /// <param name="identity">标识符</param> /// <param name="enableBit">占用位</param> /// <param name="filter">筛选器</param> /// <param name="context">要传递的上下文</param> public void Read(string identity, int enableBit, IReadFilter filter, object context = null) { Job4Agent job = new Job4Agent(identity, enableBit , new AgentTask(null, filter, Action_Read, context)); Scheduler.AddJob(job); }
public AgentTask(byte[] sendPacket, IReadFilter readFilter, string action, object context) { this.SendPacket = sendPacket; this.ReadFilter = readFilter; this.Action = action; this.Context = context; }
public virtual byte[] Read(IReadFilter filter, int readTimeOut, byte cmd) { long timeFlag = stopwatch.ElapsedMilliseconds; do { if (Port.BytesToRead > 0) { System.Threading.Thread.Sleep(35);//V2.8修改 byte[] readBytes = new byte[Port.BytesToRead]; Port.Read(readBytes, 0, readBytes.Length); if (!filter.Filter(readBytes)) { break; } } if (readTimeOut > 0 && stopwatch.ElapsedMilliseconds - timeFlag > readTimeOut) // break;//读取不到时修改 { if (cmd == 0x39 || cmd == 0xA9 || cmd == 0x90) { break; } throw new TimeoutException("读取超时"); } } while (true); var packet = filter.GetReadCode(); System.Diagnostics.Debug.Write("Read: "); DEBUG_WirtePacket(packet); System.Diagnostics.Debug.WriteLine(""); return(packet); }
public virtual byte[] Read(IReadFilter filter, byte cmd) { if (filter.Timeout.HasValue) { return(Read(filter, filter.Timeout.Value, cmd)); } else { return(Read(filter, Port.ReadTimeout, cmd)); } }
public virtual byte[] SendAndRead(byte[] packet, IReadFilter filter) { if (Port.BytesToRead > 0) { byte[] buffer = new byte[Port.BytesToRead]; Port.Read(buffer, 0, buffer.Length); } Send(packet); if (packet[2] == 0xF9) { return(Read(filter, 50, packet[2])); } else { return(Read(filter, packet[2])); } }
public AgentTask(byte[] sendPacket, IReadFilter readFilter, string action) : this(sendPacket, readFilter, action, null) { }