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; } } }
//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); }