Пример #1
0
        /// <summary>
        /// 扫描内容切换
        /// </summary>
        public void ChangeVistsRegion()
        {
            string result = Commands.BuildSetSelectFrame(0, 0, 1, 32, 96, 0, TempData);

            Sp.GetInstance().Send(result);
            Thread.Sleep(3);
            string send = string.Empty;

            switch (region)
            {
            case VisitRegion.User:
                send = Commands.BuildReadDataFrame("00000000", 3, 0, 8);
                break;

            case VisitRegion.TID:
                send = Commands.BuildReadDataFrame("00000000", 2, 0, 8);
                break;
            }
            Sp.GetInstance().Send(send);
        }
Пример #2
0
        /// <summary>
        /// 获取连接状态
        /// </summary>
        public void GetConnState()
        {
            string[] ports = Sp.GetInstance().GetPortNames();
            Sp.GetInstance().Config(ports[1], Int32.Parse("115200"), 0, 8, System.IO.Ports.StopBits.One);
            ConnState = Sp.GetInstance().Open();
            if (ConnState)
            {
                string send = string.Empty;
                switch (action)
                {
                case Action.oneTime:
                    send = Commands.BuildReadSingleFrame();
                    break;

                default:
                    send = Commands.BuildReadMultiFrame(Int32.Parse("65535"));
                    break;
                }
                Sp.GetInstance().Send(send);
                receiveParser = new ReceiveParser();
                Sp.GetInstance().ComDevice.DataReceived += new SerialDataReceivedEventHandler(receiveParser.DataReceived);
                receiveParser.PacketReceived += new EventHandler <StrArrEventArgs>(rp_PaketReceived);
            }
        }
Пример #3
0
        public void DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            int i = 10;

            try
            {
                Sp.GetInstance().Listening = true;

                ServerIP       = IPAddress.Parse("192.168.31.200");
                serverFullAddr = new IPEndPoint(ServerIP, 2000);
                sock           = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                sock.Connect(serverFullAddr);
                byte[] DataCom = new byte[i];
                sock.Receive(DataCom);
                string[] DataRX = new string[DataCom.Length];

                for (int j = 0; j < DataCom.Length; j++)
                {
                    DataRX[j] = DataCom[j].ToString("X2").ToUpper();
                }
                if (i != 0)
                {
                    for (int k = 0; k < i; k++)
                    {
                        if (ReceiveParser.frameBeginFlag)
                        {
                            ReceiveParser.strBuff[(int)(checked ((IntPtr)ReceiveParser.strNum))] = DataRX[k];
                            if (ReceiveParser.strNum == 4L)
                            {
                                ReceiveParser.frameLength = (long)(256 * Convert.ToInt32(ReceiveParser.strBuff[3], 16) + Convert.ToInt32(ReceiveParser.strBuff[4], 16));
                                if (ReceiveParser.frameLength > 3072L)
                                {
                                    ReceiveParser.frameBeginFlag = false;
                                    goto IL_27C;
                                }
                            }
                            else if (ReceiveParser.strNum == ReceiveParser.frameLength + 6L && ReceiveParser.strBuff[(int)(checked ((IntPtr)ReceiveParser.strNum))] == "7E")
                            {
                                int checksum = 0;
                                int l        = 1;
                                while ((long)l < ReceiveParser.strNum - 1L)
                                {
                                    checksum += Convert.ToInt32(ReceiveParser.strBuff[l], 16);
                                    l++;
                                }
                                checksum %= 256;
                                if (checksum != Convert.ToInt32(ReceiveParser.strBuff[(int)(checked ((IntPtr)(unchecked (ReceiveParser.strNum - 1L))))], 16))
                                {
                                    MessageBox.Show("ERROR FRAME, checksum is not right!");
                                    ReceiveParser.frameBeginFlag = false;
                                    ReceiveParser.frameEndFlag   = true;
                                    goto IL_27C;
                                }
                                ReceiveParser.frameBeginFlag = false;
                                ReceiveParser.frameEndFlag   = true;
                                if (this.PacketReceived != null)
                                {
                                    string[] packet = new string[ReceiveParser.strNum + 1L];
                                    int      m      = 0;
                                    while ((long)m <= ReceiveParser.strNum)
                                    {
                                        packet[m] = ReceiveParser.strBuff[m];
                                        m++;
                                    }
                                    this.PacketReceived(this, new StrArrEventArgs(packet));
                                }
                            }
                            else if (ReceiveParser.strNum == ReceiveParser.frameLength + 6L && ReceiveParser.strBuff[(int)(checked ((IntPtr)ReceiveParser.strNum))] != "7E")
                            {
                                MessageBox.Show("ERROR FRAME, cannot get FRAME_END when extends frameLength");
                                ReceiveParser.frameBeginFlag = false;
                                ReceiveParser.frameEndFlag   = true;
                                goto IL_27C;
                            }
                            ReceiveParser.strNum += 1L;
                        }
                        else if (DataRX[k] == "BB" && !ReceiveParser.frameBeginFlag)
                        {
                            ReceiveParser.strNum = 0L;
                            ReceiveParser.strBuff[(int)(checked ((IntPtr)ReceiveParser.strNum))] = DataRX[k];
                            ReceiveParser.frameBeginFlag = true;
                            ReceiveParser.frameEndFlag   = false;
                            ReceiveParser.strNum         = 1L;
                        }
                        IL_27C :;
                    }
                }
            }
            finally
            {
                Sp.GetInstance().Listening = false;
            }
        }
Пример #4
0
        /// <summary>
        /// 获取连接状态
        /// </summary>
        public void GetConnState()
        {
            result = true;
            try
            {
                i = 0;
                string[] ports = Sp.GetInstance().GetPortNames();
                while (result)
                {
                    if (i > ports.Length - 1)
                    {
                        result = false;
                        ServerSetting.RfidConnState = false;
                        return;
                    }
                    Sp.GetInstance().Config(ports[i], Int32.Parse("115200"), 0, 8, System.IO.Ports.StopBits.One);
                    ConnState = Sp.GetInstance().Open();
                    if (ConnState)
                    {
                        string send = string.Empty;
                        switch (action)
                        {
                        case Ac.oneTime:
                            send = Commands.BuildReadSingleFrame();
                            break;

                        default:
                            send = Commands.BuildReadMultiFrame(Int32.Parse("65535"));
                            break;
                        }
                        Sp.GetInstance().Send(send);
                        Sp.GetInstance().Send(Commands.BuildGetModuleInfoFrame(ConstCode.MODULE_HARDWARE_VERSION_FIELD));
                        receiveParser = new ReceiveParser();
                        Sp.GetInstance().ComDevice.DataReceived += new SerialDataReceivedEventHandler(receiveParser.DataReceived);
                        receiveParser.PacketReceived += new EventHandler <StrArrEventArgs>(rp_PaketReceived);
                        Thread.Sleep(300);
                        if (result)
                        {
                            Sp.GetInstance().Send(Commands.BuildStopReadFrame());
                            Sp.GetInstance().Close();
                            i++;
                            ServerSetting.RfidConnState = false;
                        }
                        else
                        {
                            ///减少扫描范围
                            Sp.GetInstance().Send("BB 00 B6 00 02 04 E2 9E 7E ");
                            ServerSetting.RfidConnState = true;
                        }
                    }
                    else
                    {
                        i++;
                    }
                }
            }
            catch
            {
                ServerSetting.RfidConnState = false;
            }
        }
Пример #5
0
 /// <summary>
 /// 开始扫描
 /// </summary>
 public void Start()
 {
     Sp.GetInstance().Send("BB 00 27 00 03 22 FF FF 4A 7E");
 }
Пример #6
0
 /// <summary>
 /// 停止扫描
 /// </summary>
 public void Stop()
 {
     Sp.GetInstance().Send("BB 00 28 00 00 28 7E");
 }
Пример #7
0
 /// <summary>
 ///  关闭
 /// </summary>
 public void CloseD()
 {
     Sp.GetInstance().Close();
 }
Пример #8
0
 public bool IsOpen()
 {
     return(Sp.GetInstance().IsOpen());
 }
Пример #9
0
        /// <summary>
        /// 扫描信息
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void rp_PaketReceived(object sender, StrArrEventArgs e)
        {
            s++;
            if (s > 50000)
            {
                s = 0;
                Sp.GetInstance().Send(Commands.BuildReadMultiFrame(60000));
            }
            string[] packetRx  = e.Data;
            string   strPacket = string.Empty;

            for (int i = 0; i < packetRx.Length; i++)
            {
                strPacket += packetRx[i] + " ";
            }

            if (packetRx[1] == ConstCode.FRAME_TYPE_INFO && packetRx[2] == ConstCode.CMD_INVENTORY)
            {
                int    PCEPCLength = ((Convert.ToInt32((packetRx[6]), 16)) / 8 + 1) * 2;
                string pc          = packetRx[6] + " " + packetRx[7];
                string epc         = string.Empty;

                for (int i = 0; i < PCEPCLength - 2; i++)
                {
                    epc = epc + packetRx[8 + i];
                }
                epc = Commands.AutoAddSpace(epc);
                if (!epc.Contains("E2 00 68 0A 8A A8"))
                {
                    TempData = epc;

                    if (epc != null && ServerSetting.EPClist.Count == 0 && !ServerSetting.OldEPClist.Contains(epc))
                    {
                        ServerSetting.EPClist.Enqueue(epc);
                    }
                }
            }
            if (packetRx[2] == ConstCode.CMD_READ_DATA)
            {
                string strInvtReadData = "";
                int    dataLen         = Convert.ToInt32(packetRx[3], 16) * 256 + Convert.ToInt32(packetRx[4], 16);
                int    pcEpcLen        = Convert.ToInt32(packetRx[5], 16);

                for (int i = 0; i < dataLen - pcEpcLen - 1; i++)
                {
                    strInvtReadData = strInvtReadData + packetRx[i + pcEpcLen + 6];
                }
                ReturnUser = Commands.AutoAddSpace(strInvtReadData);
            }
            if (packetRx[2] == ConstCode.CMD_GET_MODULE_INFO)
            {
                string hardwareVersion = String.Empty;
                if (packetRx[5] == ConstCode.MODULE_HARDWARE_VERSION_FIELD)
                {
                    try
                    {
                        for (int i = 0; i < Convert.ToInt32(packetRx[4], 16) - 1; i++)
                        {
                            hardwareVersion += (char)Convert.ToInt32(packetRx[6 + i], 16);
                        }
                        result = false;
                        Sp.GetInstance().Send(Commands.BuildReadMultiFrame(60000));
                        // Stop();
                    }
                    catch
                    {
                        hardwareVersion = packetRx[6].Substring(1, 1) + "." + packetRx[7];
                        result          = true;
                    }
                }
            }
        }
Пример #10
0
        /// <summary>
        /// Try to Parse a Valid Packet from Serial Port Received Data
        /// It Will Send PacketReceived event When Got a Packet.
        /// </summary>
        /// <param name="sender">usually is a SerialPort.DataReceived</param>
        /// <param name="e">SerialDataReceivedEventArgs</param>
        public void DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if (Sp.GetInstance().Closing)
            {
                return;                          //如果正在关闭,忽略操作,直接返回,尽快的完成串口监听线程的一次循环
            }
            if (!Sp.GetInstance().IsOpen())
            {
                return;
            }
            int n = Sp.GetInstance().ComDevice.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致

            try
            {
                Sp.GetInstance().Listening = true;              //设置标记,说明我已经开始处理数据,一会儿要使用系统UI的。

                byte[] DataCom = new byte[n];                   //返回命令包
                Sp.GetInstance().ComDevice.Read(DataCom, 0, n); //读取数据
                string[] DataRX = new string[DataCom.Length];
                for (int i = 0; i < DataCom.Length; i++)
                {
                    DataRX[i] = DataCom[i].ToString("X2").ToUpper();
                }

                if (n != 0) //
                {
                    for (int j = 0; j < n; j++)
                    {
#if TRACE
                        //Console.Write(DataRX[j] + " ");
#endif
                        if (frameBeginFlag)
                        {
                            strBuff[strNum] = DataRX[j];
                            if (strNum == 4)
                            {
                                frameLength = 256 * Convert.ToInt32(strBuff[3], 16) + Convert.ToInt32(strBuff[4], 16);
                                if (frameLength > 3072)
                                {
#if TRACE
                                    Console.WriteLine("ERROR FRAME, frame Length too long!");
#endif
                                    frameBeginFlag = false;
                                    continue;
                                }
                            }
                            else if ((strNum == frameLength + 6) && (strBuff[strNum] == ConstCode.FRAME_END_HEX))
                            {
                                int checksum = 0;
                                for (int i = 1; i < strNum - 1; i++)
                                {
                                    checksum += Convert.ToInt32(strBuff[i], 16);
                                }
                                checksum = checksum % 256;
                                if (checksum != Convert.ToInt32(strBuff[strNum - 1], 16))
                                {
                                    Console.WriteLine("ERROR FRAME, checksum is not right!");
                                    frameBeginFlag = false;
                                    frameEndFlag   = true;
                                    continue;
                                }
                                frameBeginFlag = false;
                                frameEndFlag   = true;
                                if (PacketReceived != null)
                                {
                                    string[] packet = new string[strNum + 1];
                                    for (int i = 0; i <= strNum; i++)
                                    {
                                        packet[i] = strBuff[i];
                                    }
                                    PacketReceived(this, new StrArrEventArgs(packet));
                                }
                            }
                            else if ((strNum == frameLength + 6) && (strBuff[strNum] != ConstCode.FRAME_END_HEX))
                            {
                                Console.WriteLine("ERROR FRAME, cannot get FRAME_END when extends frameLength");
                                frameBeginFlag = false;
                                frameEndFlag   = true;
                                continue;
                            }
                            strNum++;
                        }
                        else if (DataRX[j] == ConstCode.FRAME_BEGIN_HEX && frameBeginFlag != true)
                        {
                            strNum          = 0;
                            strBuff[strNum] = DataRX[j];
                            frameBeginFlag  = true;
                            frameEndFlag    = false;
                            strNum          = 1;
                        }
                    }
                }
            }
            finally
            {
                Sp.GetInstance().Listening = false;//我用完了,ui可以关闭串口了。
            }
        }
Пример #11
0
 /// <summary>
 /// 暂停扫描
 /// </summary>
 public void StopConntion()
 {
     Sp.GetInstance().Send(Commands.BuildStopReadFrame());
 }