Пример #1
0
        /// <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);
        }
Пример #2
0
 public AgentTask(byte[] sendPacket, IReadFilter readFilter, string action, object context)
 {
     this.SendPacket = sendPacket;
     this.ReadFilter = readFilter;
     this.Action     = action;
     this.Context    = context;
 }
Пример #3
0
        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);
        }
Пример #4
0
 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));
     }
 }
Пример #5
0
 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]));
     }
 }
Пример #6
0
 public AgentTask(byte[] sendPacket, IReadFilter readFilter, string action) : this(sendPacket, readFilter, action, null)
 {
 }