예제 #1
0
        private void RunLoopInventroy()
        {
            if (false)
            {
                //RunLoopInventoryUnsafe InvokeRunLoopInventory = new RunLoopInventoryUnsafe(RunLoopInventroy);
                //this.Invoke(InvokeRunLoopInventory, new object[] { });
            }
            else
            {
                //校验盘存是否所有天线均完成
                if (m_curInventoryBuffer.nIndexAntenna < m_curInventoryBuffer.lAntenna.Count - 1 || m_curInventoryBuffer.nCommond == 0)
                {
                    if (m_curInventoryBuffer.nCommond == 0)
                    {
                        m_curInventoryBuffer.nCommond = 1;

                        if (m_curInventoryBuffer.bLoopInventoryReal)
                        {
                            //m_bLockTab = true;
                            //btnInventory.Enabled = false;
                            if (m_curInventoryBuffer.bLoopCustomizedSession)//自定义Session和Inventoried Flag
                            {
                                reader.CustomizedInventory(m_curSetting.btReadId, m_curInventoryBuffer.btSession, m_curInventoryBuffer.btTarget, m_curInventoryBuffer.btRepeat);
                            }
                            else //实时盘存
                            {
                                reader.InventoryReal(m_curSetting.btReadId, m_curInventoryBuffer.btRepeat);
                            }
                        }
                        else
                        {
                            if (m_curInventoryBuffer.bLoopInventory)
                            {
                                reader.Inventory(m_curSetting.btReadId, m_curInventoryBuffer.btRepeat);
                            }
                        }
                    }
                    else
                    {
                        m_curInventoryBuffer.nCommond = 0;
                        m_curInventoryBuffer.nIndexAntenna++;

                        byte btWorkAntenna = m_curInventoryBuffer.lAntenna[m_curInventoryBuffer.nIndexAntenna];
                        reader.SetWorkAntenna(m_curSetting.btReadId, btWorkAntenna);
                        m_curSetting.btWorkAntenna = btWorkAntenna;
                    }
                }
                //校验是否循环盘存
                else if (m_curInventoryBuffer.bLoopInventory)
                {
                    m_curInventoryBuffer.nIndexAntenna = 0;
                    m_curInventoryBuffer.nCommond      = 0;

                    byte btWorkAntenna = m_curInventoryBuffer.lAntenna[m_curInventoryBuffer.nIndexAntenna];
                    reader.SetWorkAntenna(m_curSetting.btReadId, btWorkAntenna);
                    m_curSetting.btWorkAntenna = btWorkAntenna;
                }
            }
        }
예제 #2
0
        //Función de etiqueta de inventario en tiempo real
        // ----------- Parámetros de entrada --------------
        // btReaderId: dirección del lector, 0xff es la dirección pública
        // btRepeat: repite el número de inventario por comando, 0xff es el modo rápido.
        // btTimeOut: control de tiempo de espera, en segundos, si el lector no responde o el comando no se ejecuta dentro de este tiempo, se devuelve el tiempo de espera.
        // ---------------------------------
        // ----------- Parámetros de salida --------------
        // 0: inventario exitoso pero no inventario para etiquetar
        // 1: inventario exitoso e inventario a la etiqueta
        // -1: se produjo un error durante el proceso de inventario
        // -2: Tiempo de espera de inventario
        // ---------------------------------
        // Nota: No actualice la interfaz en esta función y la función que llama, porque el hilo de la interfaz está esperando que esta función regrese.
        private int realTimeInventory(byte btReaderId, byte btRepeat, byte btTimeOut)
        {
            DateTime startTime;
            TimeSpan timeOutControl;

            //这里使用等待数据的方法,数据全部接收完毕后再进行处理
            m_curSetting.btRealInventoryFlag = 0;
            RealTimeTagDataList.Clear();  //清空标签信息表
            reader.InventoryReal(255, 1); // 先发送实时盘存命令,用0xFF公共地址,每条命令重复盘存一次

            startTime = DateTime.Now;

            while (m_curSetting.btRealInventoryFlag == 0) //等待读写器返回数据完成,若超时,返回超时标志
            {
                timeOutControl = DateTime.Now - startTime;
                if (timeOutControl.TotalMilliseconds > btTimeOut * 1000)//超时返回
                {
                    return(-2);
                }
            }

            if (m_curSetting.btRealInventoryFlag == 1) //命令执行成功
            {
                if (RealTimeTagDataList.Count > 0)
                {
                    return(1);
                }
                else
                {
                    return(0);
                }
            }
            if (m_curSetting.btRealInventoryFlag == 100) //命令执行失败
            {
                return(-1);
            }
            return(0);
        }
        //Note: In the function call in this function and do not update interface, because the UI thread is waiting for this function returns.
        private int realTimeInventory(byte btReaderId, byte btRepeat, byte btTimeOut)
        {
            DateTime startTime;
            TimeSpan timeOutControl;

            //The method used here waiting for data, after all the data has been received for processing
            m_curSetting.btRealInventoryFlag = 0;
            RealTimeTagDataList.Clear();  //Empty tag information table
            reader.InventoryReal(255, 1); // To send real-time inventory command, with 0xFF public address, each command is repeated once inventory
            startTime = DateTime.Now;

            while (m_curSetting.btRealInventoryFlag == 0) //Wait for the reader to return data is completed, if timeout, returning timeout flag
            {
                timeOutControl = DateTime.Now - startTime;
                if (timeOutControl.TotalMilliseconds > btTimeOut * 1000)//Timeout Returns
                {
                    return(-2);
                }
            }

            if (m_curSetting.btRealInventoryFlag == 1) //The command completed successfully
            {
                if (RealTimeTagDataList.Count > 0)
                {
                    return(1);
                }
                else
                {
                    return(0);
                }
            }
            if (m_curSetting.btRealInventoryFlag == 100) //Command fails
            {
                return(-1);
            }
            return(0);
        }