Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

58 rader
1.6 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Windows;
  7. using ModbusDemo.ErrorCode;
  8. namespace ModbusDemo.Uitls
  9. {
  10. public static class CheckData
  11. {
  12. /// <summary>
  13. /// 检测返回的数据格式是否正确
  14. /// </summary>
  15. /// <param name="response"></param>
  16. /// <returns></returns>
  17. public static bool CheckResponse(byte[] response)
  18. {
  19. if (response == null || response.Length == 0)
  20. {
  21. MessageBox.Show("返回数据为空", "error", MessageBoxButton.OK, MessageBoxImage.Error);
  22. return false;
  23. }
  24. // 检查数组长度是否足够
  25. if (response.Length > 3)
  26. {
  27. byte secondByte = response[1]; // 获取第二个字节(索引为1)
  28. // 使用掩码0xF0获取高4位,并右移4位
  29. int highNibble = (secondByte & 0xF0) >> 4;
  30. // 判断高4位是否等于8
  31. if (highNibble == 8)
  32. {
  33. var error = ErrorCode.ErrorCode.FromByte(response[2]);
  34. MessageBox.Show(error.ToString());
  35. return false;
  36. }
  37. }
  38. else
  39. {
  40. return false;
  41. }
  42. if (!CRCUitl.ValidateCRC(response))
  43. {
  44. MessageBox.Show(ErrorCode.ErrorCode.CrcCheckError.ToString());
  45. return false;
  46. }
  47. return true;
  48. }
  49. }
  50. }