Test.java 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package com.mes.util;
  2. import com.github.s7connector.api.DaveArea;
  3. import com.github.xingshuangs.iot.protocol.s7.enums.EPlcType;
  4. import com.github.xingshuangs.iot.protocol.s7.service.S7PLC;
  5. import com.mes.ui.MesClient;
  6. import com.mes.ui.S7Util;
  7. import java.math.BigInteger;
  8. import java.util.HashMap;
  9. import java.util.Map;
  10. public class Test {
  11. public static S7PLC s7PLC = new S7PLC(EPlcType.SINUMERIK_828D, "192.168.88.99");
  12. public static void main(String[] args) {
  13. // Integer switchEnable = getSwitchEnable();
  14. // System.out.println(switchEnable);
  15. // Map<String, Boolean> stringBooleanMap = readBits();
  16. // System.out.println(stringBooleanMap);
  17. // writeBit(9015, 0, 1, true);
  18. // writeBit(9015, 0, 0, false);
  19. // writeBit(9015, 0, 1, false);
  20. // writeBit(9000, 3, 2, false);
  21. // Map<String, Boolean> stringBooleanMap2 = readBits();
  22. // System.out.println(stringBooleanMap2);
  23. // System.out.println("读取主轴转速:"+S7Util.readActSpindleSpeed(s7PLC));
  24. // System.out.println("读取进给速度:"+S7Util.readFeedRate(s7PLC));
  25. // System.out.println("读取X位移:"+S7Util.readXPosition(s7PLC));
  26. // System.out.println("读取y位移:"+S7Util.readYPosition(s7PLC));
  27. }
  28. public static Map<String, Boolean> readBits() {
  29. Map<String, Boolean> result = new HashMap<>();
  30. try {
  31. MesClient.initS7();
  32. // 读取 DB9015.DBB0(1字节,包含 DBX0.0~DBX0.7)
  33. byte[] data9015 = MesClient.s7Connector.read(DaveArea.DB, 9015, 1, 0);
  34. byte b9015 = data9015[0];
  35. result.put("DB9015.DBX0.0", (b9015 & (1 << 0)) != 0);
  36. result.put("DB9015.DBX0.1", (b9015 & (1 << 1)) != 0);
  37. result.put("DB9015.DBX0.2", (b9015 & (1 << 2)) != 0);
  38. // 读取 DB9000.DBB3(1字节,包含 DBX3.0~DBX3.7)
  39. // byte[] data9000 = MesClient.s7Connector.read(DaveArea.DB, 9000, 1, 3);
  40. // byte b9000 = data9000[0];
  41. //
  42. // result.put("DB9000.DBX3.2", (b9000 & (1 << 2)) != 0);
  43. } catch (Exception e) {
  44. e.printStackTrace();
  45. }
  46. return result;
  47. }
  48. public static boolean writeBit(int dbNumber, int byteIndex, int bitIndex, boolean value) {
  49. try {
  50. MesClient.initS7();
  51. // 先读出对应字节
  52. byte[] data = MesClient.s7Connector.read(DaveArea.DB, dbNumber, 1, byteIndex);
  53. byte b = data[0];
  54. // 修改指定位
  55. if (value) {
  56. b = (byte)(b | (1 << bitIndex)); // 置1
  57. } else {
  58. b = (byte)(b & ~(1 << bitIndex)); // 清0
  59. }
  60. // 写回去
  61. byte[] toWrite = new byte[]{b};
  62. MesClient.s7Connector.write(DaveArea.DB, dbNumber, byteIndex, toWrite);
  63. return true;
  64. } catch (Exception e) {
  65. e.printStackTrace();
  66. return false;
  67. }
  68. }
  69. public static Integer getSwitchEnable(){
  70. try{
  71. MesClient.initS7();
  72. //DB9052.DBB0
  73. Integer ss = new BigInteger(xtob(MesClient.s7Connector.read(DaveArea.DB, 9015, 1, 0))).intValue();
  74. return ss;
  75. }catch (Exception e){
  76. e.printStackTrace();
  77. return 0;
  78. }
  79. }
  80. private static byte[] xtob( byte[] bytes){
  81. // 创建新的byte数组并复制原始数据
  82. byte[] reversedBytes = new byte[bytes.length];
  83. System.arraycopy(bytes, 0, reversedBytes, 0, bytes.length);
  84. // 反转byte数组元素的位置
  85. for (int i = 0; i < bytes.length / 2; i++) {
  86. byte temp = reversedBytes[i];
  87. reversedBytes[i] = reversedBytes[reversedBytes.length - 1 - i];
  88. reversedBytes[reversedBytes.length - 1 - i] = temp;
  89. }
  90. return reversedBytes;
  91. }
  92. }