예제 #1
0
 public void Disconnect()
 {
     if (iComm != null)
     {
         if (iComm.isConnected && DisconnectMessage != null && !(CommPort is UdpPort))
         {
             iComm.isConnected = false;
             IHostMessage disconnectMessage = DisconnectMessage;
             Send(disconnectMessage, 500);
             Thread.Sleep(50);
         }
         iComm.isConnected = false;
     }
     if (iComm != null)
     {
         iComm.Close();
         iComm.OnMsgReceived  -= iConn_OnMsgReceived;
         iComm.OnBuffReceived -= iConn_OnBuffReceived;
     }
     if (iComm != null && iComm.threadProcess != null && iComm.threadProcess.ThreadState != ThreadState.Stopped)
     {
         try
         {
             iComm.threadProcess.Abort();
         }
         catch
         {
         }
     }
     iComm = null;
 }
예제 #2
0
 public ReceivedInfo(byte[] buff)
     : base(buff)
 {
     if (buff.Length >= 6)
     {
         tParam                  = new GpiTriggerParameter();
         tParam.PortNO           = buff[1];
         tParam.TriggerCondition = (GpiTriggerCondition)buff[2];
         tParam.StopCondition    = (GpiStopCondition)buff[3];
         tParam.DelayTime        = (ushort)((buff[4] << 8) + buff[5]);
         if (buff.Length == 8 && buff[6] == 0 && buff[7] == 0)
         {
             tParam.TriggerMsg = null;
         }
         if (buff.Length >= 10)
         {
             IHostMessage hostMessage = null;
             ushort       key         = (ushort)((buff[8] << 8) + buff[9]);
             if (MessageType.msgType.ContainsKey(key))
             {
                 Type type = Type.GetType("NetAPI.Protocol.VRP." + MessageType.msgType[key], throwOnError: true);
                 hostMessage = (IHostMessage)Activator.CreateInstance(type, null);
                 int num = buff.Length - 10;
                 msgbody = new byte[num];
                 Array.Copy(buff, 10, msgbody, 0, num);
                 ((MessageFrame)hostMessage).msgBody = msgbody;
             }
             tParam.TriggerMsg = hostMessage;
         }
     }
 }
예제 #3
0
 public bool Send(IHostMessage msg)
 {
     if (msg == null)
     {
         return(false);
     }
     ((MessageFrame)msg).isRS485 = true;
     ((MessageFrame)msg).address = address;
     return(pReader.Send(msg));
 }
예제 #4
0
 public override bool Send(IHostMessage msg)
 {
     if (msg == null)
     {
         return(false);
     }
     if (isStart_AutoPowerConfig && !isPause_AutoPowerConfig)
     {
         if (msg is MsgTagInventory && !((MsgTagInventory)msg).isAutoPowerConft)
         {
             isPause_AutoPowerConfig = true;
             for (int i = 0; i < 200; i++)
             {
                 Thread.Sleep(10);
                 if (!isStart_AutoPowerConfig)
                 {
                     break;
                 }
             }
         }
         if (msg is MsgTagRead && !msg.IsReturn)
         {
             isPause_AutoPowerConfig = true;
             for (int j = 0; j < 200; j++)
             {
                 Thread.Sleep(10);
                 if (!isStart_AutoPowerConfig)
                 {
                     break;
                 }
             }
         }
     }
     else if (!isStart_AutoPowerConfig && isPause_AutoPowerConfig && msg is MsgPowerOff)
     {
         isPause_AutoPowerConfig = false;
     }
     return(base.Send(msg));
 }
예제 #5
0
        public virtual bool Send(IHostMessage msg)
        {
            if (msg == null)
            {
                return(false);
            }
            try
            {
                msg.TrigerOnExecuting(this);
            }
            catch (Exception ex)
            {
                Log.Debug(ReaderName + ":" + ex.Message);
                return(false);
            }
            if (iComm == null)
            {
                return(false);
            }
            bool result = iComm.Send(msg, msg.Timeout);

            msg.TrigerOnExecuted(this);
            return(result);
        }
예제 #6
0
        internal bool Send(IHostMessage msg, int timeout)
        {
            if (msg == null)
            {
                Log.Debug("ICommunication:" + ErrInfoList.ErrDictionary["FF05"]);
                return(false);
            }
            bool flag = false;

            if (msg.IsReturn)
            {
                lock (lockEvent)
                {
                    lock (lockinfo)
                    {
                        info     = new messageInfo();
                        info.msg = msg;
                        info.ev  = new AutoResetEvent(initialState: false);
                    }
                    byte[] transmitterData = msg.TransmitterData;
                    try
                    {
                        Console.WriteLine("[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "]发送数据:" + Util.ConvertbyteArrayToHexWordstring(transmitterData));
                    }
                    catch (Exception ex)
                    {
                        Log.Error(ex.Message);
                    }
                    Log.Debug("TXD:[" + Util.ConvertbyteArrayToHexstring(transmitterData) + "]");
                    int num = Send(transmitterData);
                    if (num > 0 && num == transmitterData.Length)
                    {
                        flag = info.ev.WaitOne(timeout, exitContext: true);
                        if (flag)
                        {
                            if (msg.Status != 0)
                            {
                                flag = false;
                            }
                        }
                        else if (!isReturnReadTag)
                        {
                            msg.Status = MsgStatus.Timeout;
                        }
                    }
                    lock (lockinfo)
                    {
                        info = null;
                    }
                }
            }
            else
            {
                byte[] transmitterData2 = msg.TransmitterData;
                Console.WriteLine("[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "]发送数据:" + Util.ConvertbyteArrayToHexWordstring(transmitterData2));
                Log.Debug("TXD:[" + Util.ConvertbyteArrayToHexstring(transmitterData2) + "]");
                int num2 = Send(transmitterData2);
                if (num2 > 0 && num2 == transmitterData2.Length)
                {
                    flag = true;
                }
            }
            if (isReturnReadTag)
            {
                isReturnReadTag = false;
            }
            if (isGetOneTag)
            {
                isGetOneTag = false;
            }
            return(flag);
        }
예제 #7
0
 public bool Send(IHostMessage msg, int timeout)
 {
     msg.Timeout = timeout;
     return(Send(msg));
 }
예제 #8
0
 protected bool Connect(out ErrInfo err)
 {
     err = new ErrInfo("FF01", "");
     if (iComm == null)
     {
         try
         {
             string text = CommPort.Port.ToString();
             if (text == "RS232" || text == "RS485")
             {
                 //text = "COM";
                 iComm = new COM();
             }
             else
             {
                 iComm = new NetAPI.Communication.TcpClient();
             }
             //Type type = Type.GetType("NetAPI.Communication." + text, throwOnError: true);
             //iComm = (ICommunication)Activator.CreateInstance(type);
             iComm.readerName = ReaderName;
         }
         catch (Exception ex)
         {
             err = new ErrInfo("FF01", ex.Message);
             Log.Fatal(CommPort.Port.ToString() + ":" + ex.Message);
             return(false);
         }
     }
     if (iComm != null)
     {
         //Assembly assembly = Assembly.LoadFrom(APIPath.folderName + "\\API.dll");
         //Type type2 = assembly.GetType("NetAPI.Protocol.VRP.Decode", throwOnError: true);
         //iComm.iProcess = (IProcess)Activator.CreateInstance(type2);
         iComm.iProcess = new Decode();
         try
         {
             if (iComm.Open(CommPort.ConnStr))
             {
                 iComm.OnMsgReceived  += iConn_OnMsgReceived;
                 iComm.OnBuffReceived += iConn_OnBuffReceived;
                 iComm.threadProcess   = new Thread(iComm.process);
                 iComm.threadProcess.Start();
                 if (ConnectMessage != null && !(CommPort is UdpPort))
                 {
                     bool flag = false;
                     for (int i = 0; i < 2; i++)
                     {
                         IHostMessage connectMessage = ConnectMessage;
                         bool         flag2          = Send(connectMessage);
                         if (connectMessage.Status != MsgStatus.Timeout)
                         {
                             flag = true;
                             break;
                         }
                     }
                     if (!flag)
                     {
                         err = new ErrInfo("FF01", "协议消息测试失败");
                         Disconnect();
                         return(false);
                     }
                 }
                 return(true);
             }
         }
         catch (Exception ex2)
         {
             err = new ErrInfo("FF01", ex2.Message);
             Log.Error("iComm:" + ex2.Message);
             return(false);
         }
     }
     return(false);
 }