public void UpdataStatus(DateTime sendTime, DateTime receTime, bool isSuccess, RtuRecePackage recePackage) { bool[] status = new bool[10]; if (isSuccess) { int result = (recePackage.ReceBytes[3] << 8) + recePackage.ReceBytes[4]; for (int i = 0; i < 10; i++) { int temp = ((1 << i) & result); if (temp != 0) { status[i] = true; } else { status[i] = false; } } } ParkingLotStatusEventArgs info = new ParkingLotStatusEventArgs(isSuccess, descriptor.IpAddress, descriptor.Port, status, sendTime, receTime); SelectedInfoEventMethod(info); }
/// <summary> /// 发送数据包 /// </summary> void SendModBusPackage() { while (!isExit) { if (fastQueue.Count + sendQueue.Count == 0) { lock (sendLock) { Monitor.Wait(sendLock); } } else { RtuRegistPackage sendPackage = null; int waitTime = 100; lock (sendLock) { if (fastQueue.Count > 0) { sendPackage = fastQueue.Dequeue(); } else { if (sendQueue.Count > 0) { sendPackage = sendQueue.Dequeue(); } } } if (sendPackage != null) { sendPackage.SendTime = DateTime.Now; Console.WriteLine(sendPackage.ToString()); //不是查询指令 if (sendPackage.FunctionCode != 0x03) { //不是还原指令 if (sendPackage.LengthOrValue != 0) { waitTime = 2000; } } RtuRecePackage recePackage = Write(sendPackage); if (recePackage != null) { if (sendPackage.FunctionCode == 0x03) { UpdataStatus(sendPackage.CreateTime, DateTime.Now, true, recePackage); } } Console.WriteLine("发送指令成功"); } else { if (sendPackage.FunctionCode == 0x03) { UpdataStatus(sendPackage.CreateTime, DateTime.Now, false, null); } Console.WriteLine("发送指令,返回超时!"); } Thread.Sleep(waitTime); } } }