wrs-ModbusUtils.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. // import {
  2. // getCRC
  3. // } from './CRCUtils.js'
  4. // var CRCUtils = require('./wrs-CRCUtils.js');
  5. import * as CRCUtils from './wrs-CRCUtils.js';
  6. import * as IntUtils from './wrs-IntUtils.js';
  7. /**
  8. * 读指令
  9. * @param address 设备地址, int
  10. * @param address 寄存器起始地址, int
  11. * @param count 寄存器个数, int
  12. * @return byte[]
  13. */
  14. export function getReadModbus(address, start, count) {
  15. return getReadModbusCRCLowFront(address, start, count, true);
  16. }
  17. export function getReadModbusCRCLowFront(address, start, count, crcLowFront) {
  18. var registerObj = IntUtils.intToHighLow(start)
  19. var registerLow = registerObj.low; // int
  20. var registerHigh = registerObj.high; // int
  21. var countLow = count & 0xFF; // int
  22. var countHigh = count >>> 8; // int
  23. var data = [registerHigh, registerLow, countHigh, countLow]; // int[]
  24. var sendData = getModbusDataCRCLowFront(address, 0x03, data, crcLowFront); // byte[]
  25. return sendData;
  26. }
  27. /**
  28. * 写指令
  29. * @param address 设备地址 int
  30. * @param start 寄存器起始地址 int
  31. * @param writeData 寄存器个数 int[]
  32. * @return byte[]
  33. */
  34. export function getWriteModbus(address, start, writeData) {
  35. return getWriteModbusCRCLowFront(address, start, writeData, true);
  36. }
  37. export function getWriteModbusCRCLowFront(address, start, writeData, crcLowFront) {
  38. var registerObj = IntUtils.intToHighLow(start)
  39. var registerLow = registerObj.low; // int
  40. var registerHigh = registerObj.high; // int
  41. var data = []; // int[]
  42. data.push(registerHigh);
  43. data.push(registerLow)
  44. for (var i = 0; i < writeData.length; i++) {
  45. data.push(writeData[i]);
  46. }
  47. var sendData = getModbusDataCRCLowFront(address, 0x06, data, crcLowFront);
  48. return sendData;
  49. }
  50. // public static List<Byte> isValidModbusResponseData(List<Byte> list) {
  51. // if (null != list && list.size() >= 4) {
  52. // int size = list.size();
  53. // int leng = ByteUtils.byteToInt(list.get(2));
  54. // int totalSize = leng + 5;
  55. // if (size < totalSize) {
  56. // return null;
  57. // }
  58. // List tempList = list.subList(0, totalSize - 2);
  59. // byte[] tempData = ArrayUtils.listTobyte(tempList);
  60. // int crc = CRCUtils.getCRC(tempData);
  61. // int low = crc & 0xFF;
  62. // int high = crc >>> 8;
  63. // byte lowData = list.get(totalSize - 2);
  64. // byte hightData = list.get(totalSize - 1);
  65. // if (low == ByteUtils.byteToInt(lowData) && high == ByteUtils.byteToInt(hightData)) {
  66. // return list.subList(0, totalSize);
  67. // } else {
  68. // return null;
  69. // }
  70. // } else {
  71. // return null;
  72. // }
  73. // }
  74. /**
  75. *
  76. * @param address 设备地址 int
  77. * @param fun 功能值 int
  78. * @param data 数据 int[]
  79. * @return byte[]
  80. */
  81. export function getModbusData(address, fun, data) {
  82. return getModbusDataCRCLowFront(address, fun, data, true);
  83. }
  84. /**
  85. *
  86. * @param address 设备地址 int
  87. * @param fun 功能值 int
  88. * @param data 数据 int[]
  89. * @param crcLowFront CRC是否低位在前
  90. * @return byte[]
  91. */
  92. export function getModbusDataCRCLowFront(address, fun, data,crcLowFront) {
  93. var leng = 2;
  94. if (data) {
  95. leng += data.length;
  96. }
  97. var tempData = []; // byte[]
  98. tempData.push(address);
  99. tempData.push(fun);
  100. if (data) {
  101. for (var i = 0; i < data.length; i++) {
  102. tempData.push(data[i]);
  103. }
  104. }
  105. var crc = CRCUtils.getCRC16_MODBUS(tempData); // int
  106. var crcObj = IntUtils.intToHighLow(crc)
  107. var low = crcObj.low; // int
  108. var high = crcObj.high; // int
  109. if(crcLowFront) {
  110. tempData.push(low);
  111. tempData.push(high);
  112. } else {
  113. tempData.push(high);
  114. tempData.push(low);
  115. }
  116. return tempData;
  117. }
  118. // module.exports = {
  119. // getReadModbus: getReadModbus,
  120. // getWriteModbus: getWriteModbus,
  121. // getModbusData: getModbusData
  122. // }