PlcHelper.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace WCS.Data
  6. {
  7. public class PlcHelper
  8. {
  9. /// <summary>
  10. /// Byte转二进制
  11. /// </summary>
  12. /// <param name="dbItem"></param>
  13. /// <returns></returns>
  14. public static string ByteToBinary(byte dbItem)
  15. {
  16. char[] cs = Convert.ToString(dbItem, 2).PadLeft(8, '0').ToCharArray();
  17. Array.Reverse(cs);
  18. string res = new string(cs);
  19. return res;
  20. //return Convert.ToString(dbItem, 2).PadLeft(8,'0');
  21. }
  22. /// <summary>
  23. /// Bytes转二进制
  24. /// </summary>
  25. public static string BytesToBinary(byte[] dbItems)
  26. {
  27. string result = string.Empty;
  28. foreach (byte item in dbItems)
  29. {
  30. result = result + ByteToBinary(item);
  31. }
  32. return result;
  33. }
  34. private static string ReadAlaramCode(string alarm)
  35. {
  36. string errorResult = string.Empty;
  37. StringBuilder sb = new StringBuilder();
  38. for (int i = 0; i < alarm.Length; i++)
  39. {
  40. int index = i + 1;
  41. if (Convert.ToInt16(alarm.Substring(i, 1)) == 1)
  42. {
  43. sb.Append(string.Format("{0},", index));
  44. }
  45. }
  46. if (sb.Length > 0)
  47. {
  48. errorResult = sb.ToString().TrimEnd(',');
  49. }
  50. return errorResult;
  51. }
  52. /// <summary>
  53. /// 查询报警信息
  54. /// </summary>
  55. /// <param name="dbItems"></param>
  56. /// <returns></returns>
  57. public static string ReadAlaramCodeByBytes(byte[] dbItems)
  58. {
  59. if (dbItems == null || dbItems.Count() <= 0)
  60. return string.Empty;
  61. else
  62. return ReadAlaramCode(BytesToBinary(dbItems));
  63. }
  64. /// <summary>
  65. /// Byte转换成二进制并取指定位置数字
  66. /// </summary>
  67. /// <param name="Db521Index">db模块</param>
  68. /// <param name="startIndex">二进制截取的起始位置</param>
  69. /// <returns></returns>
  70. public static bool ByteToBool(byte dbItem, int startIndex)
  71. {
  72. int startPos = 0;
  73. switch (startIndex)
  74. {
  75. case 0:
  76. startPos = 7;
  77. break;
  78. case 1:
  79. startPos = 6;
  80. break;
  81. case 2:
  82. startPos = 5;
  83. break;
  84. case 3:
  85. startPos = 4;
  86. break;
  87. case 4:
  88. startPos = 3;
  89. break;
  90. case 5:
  91. startPos = 2;
  92. break;
  93. case 6:
  94. startPos = 1;
  95. break;
  96. case 7:
  97. startPos = 0;
  98. break;
  99. default:
  100. startPos = -1;
  101. break;
  102. }
  103. return Convert.ToString(dbItem, 2)//转换成二进制
  104. .PadLeft(8, '0')//字符串长度为8位,不够左边补零
  105. .Substring(startPos, 1) == "0" ? false : true;
  106. }
  107. }
  108. }