/// <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); }
/// <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); } }
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; } }
/// <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; } }
/// <summary> /// 开始扫描 /// </summary> public void Start() { Sp.GetInstance().Send("BB 00 27 00 03 22 FF FF 4A 7E"); }
/// <summary> /// 停止扫描 /// </summary> public void Stop() { Sp.GetInstance().Send("BB 00 28 00 00 28 7E"); }
/// <summary> /// 关闭 /// </summary> public void CloseD() { Sp.GetInstance().Close(); }
public bool IsOpen() { return(Sp.GetInstance().IsOpen()); }
/// <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; } } } }
/// <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可以关闭串口了。 } }
/// <summary> /// 暂停扫描 /// </summary> public void StopConntion() { Sp.GetInstance().Send(Commands.BuildStopReadFrame()); }