S7.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. package com.jeesite.modules;
  2. import com.github.s7connector.api.DaveArea;
  3. import com.github.s7connector.api.S7Connector;
  4. import com.github.s7connector.api.S7Serializer;
  5. import com.github.s7connector.api.factory.S7ConnectorFactory;
  6. import com.github.s7connector.api.factory.S7SerializerFactory;
  7. import com.github.xingshuangs.iot.protocol.s7.enums.EPlcType;
  8. import com.github.xingshuangs.iot.protocol.s7.service.S7PLC;
  9. import java.math.BigInteger;
  10. public class S7 {
  11. public static void main(String[] args) {
  12. // 192.168.0.200
  13. S7PLC s7PLC = new S7PLC(EPlcType.SINUMERIK_828D, "192.168.1.7");
  14. s7PLC.readStatus();
  15. int workMode = s7PLC.readWorkMode();
  16. // S7PLC s7PLC = new S7PLC(EPlcType.S1200, "192.168.0.200");
  17. // s7PLC.writeString("DB1.400","000020015308-0100101425042500137");
  18. // System.out.println("单枪-条码:"+s7PLC.readString("DB1.400.0",40));
  19. // System.out.println("单枪-产品:"+s7PLC.readInt16("DB1.440.0"));
  20. // System.out.println("单枪-拉力:"+s7PLC.readInt32("DB1.144.0"));
  21. // System.out.println("单枪-位移:"+s7PLC.readFloat32("DB1.148.0"));
  22. // System.out.println("单枪-结果:"+s7PLC.readString("DB1.450.0",2));
  23. // System.out.println("单枪-预设值:"+s7PLC.readInt32("DB1.38.0"));
  24. // System.out.println("单枪-实际值:"+s7PLC.readInt32("DB1.184.0"));
  25. // System.out.println("单枪-OK数:"+s7PLC.readInt32("DB1.176.0"));
  26. // System.out.println("单枪-NG数:"+s7PLC.readInt32("DB1.180.0"));
  27. // System.out.println("单枪-基准拉力:"+s7PLC.readInt16("DB1.442.0"));
  28. // System.out.println("单枪-基准位移:"+s7PLC.readInt32("DB1.444.0"));
  29. // System.out.println("单枪-拉力上限:"+s7PLC.readInt32("DB1.160.0"));
  30. // System.out.println("单枪-拉力下限:"+s7PLC.readInt32("DB1.164.0"));
  31. // System.out.println("单枪-位移上限:"+s7PLC.readInt32("DB1.168.0"));
  32. // System.out.println("单枪-位移下限:"+s7PLC.readInt32("DB1.172.0"));
  33. // System.out.println("单枪-拉铆完成信号:"+s7PLC.readBoolean("DB1.314.5"));
  34. // System.out.println("单枪-MES屏蔽:"+s7PLC.readBoolean("DB5.0.1"));
  35. // System.out.println("单枪-MES启用:"+s7PLC.readBoolean("DB5.0.0"));
  36. // s7PLC
  37. // s7PLC.writeBoolean("DB1.2.2",true);
  38. // s7PLC.writeBoolean("DB1.2.3",false);
  39. System.out.println("A枪-强制使用:"+s7PLC.readBoolean("DB1.2.3"));
  40. System.out.println("A枪-报警断气:"+s7PLC.readBoolean("DB1.1.0"));
  41. System.out.println("A枪-扫码功能:"+s7PLC.readBoolean("DB1.2.2"));
  42. System.out.println("A枪-授权运行:"+s7PLC.readBoolean("DB1.3.0"));
  43. System.out.println("A枪-SV(预设)数量:"+s7PLC.readInt32("DB1.38.0"));
  44. System.out.println("A枪-PV(实际)数量:"+s7PLC.readInt32("DB1.184.0"));
  45. System.out.println("A枪-OK数量:"+s7PLC.readInt32("DB1.176.0"));
  46. System.out.println("A枪-NG数量:"+s7PLC.readInt32("DB1.180.0"));
  47. System.out.println("A枪-产品选择:"+s7PLC.readInt16("DB1.54.0"));
  48. System.out.println("A枪-最大拉力:"+s7PLC.readInt32("DB1.144.0"));
  49. System.out.println("A枪-最大位移:"+s7PLC.readFloat32("DB1.148.0"));
  50. System.out.println("A枪-基准拉力:"+s7PLC.readInt32("DB1.152.0"));
  51. System.out.println("A枪-基准位移:"+s7PLC.readFloat32("DB1.156.0"));
  52. // System.out.println("A枪-拉力上限:"+s7PLC.readInt32("DB1.160.0"));
  53. // System.out.println("A枪-拉力下限:"+s7PLC.readInt32("DB1.164.0"));
  54. // System.out.println("A枪-位移上限:"+s7PLC.readFloat32("DB1.168.0"));
  55. // System.out.println("A枪-位移下限:"+s7PLC.readFloat32("DB1.172.0"));
  56. System.out.println("A枪-拉力上限:"+s7PLC.readInt32("DB1.22.0"));
  57. System.out.println("A枪-拉力下限:"+s7PLC.readInt32("DB1.26.0"));
  58. System.out.println("A枪-位移上限:"+s7PLC.readFloat32("DB1.30.0"));
  59. System.out.println("A枪-位移下限:"+s7PLC.readFloat32("DB1.34.0"));
  60. System.out.println("A枪-拉力OK:"+s7PLC.readBoolean("DB1.314.0"));
  61. System.out.println("A枪-拉力NG:"+s7PLC.readBoolean("DB1.314.1"));
  62. System.out.println("A枪-位移OK:"+s7PLC.readBoolean("DB1.314.2"));
  63. System.out.println("A枪-位移NG:"+s7PLC.readBoolean("DB1.314.3"));
  64. System.out.println("A枪-拉铆完成信号:"+s7PLC.readBoolean("DB1.314.5"));
  65. System.out.println("A枪-判断结果:"+s7PLC.readString("DB1.398.0",2));
  66. System.out.println("A枪-实时条码:"+s7PLC.readString("DB1.400.0",50));
  67. System.out.println("A枪-枪号:"+s7PLC.readInt16("DB1.450.0"));
  68. System.out.println("A枪-产品型号:"+s7PLC.readInt16("DB1.452.0"));
  69. System.out.println("A枪-基准拉力:"+s7PLC.readInt16("DB1.454.0"));
  70. System.out.println("A枪-基准位移:"+s7PLC.readInt16("DB1.456.0"));
  71. System.out.println("A枪-最大拉力:"+s7PLC.readInt16("DB1.458.0"));
  72. System.out.println("A枪-最大位移:"+s7PLC.readInt16("DB1.460.0"));
  73. System.out.println("A枪-结果判断:"+s7PLC.readString("DB1.462.0",2));
  74. System.out.println("A枪-当前数量:"+s7PLC.readInt16("DB1.464.4"));
  75. System.out.println("A枪-总铆接数:"+s7PLC.readString("DB1.466.0",10));
  76. System.out.println("A枪-条码信息:"+s7PLC.readString("DB1.476.0",50));
  77. System.out.println("B枪-扫码功能:"+s7PLC.readBoolean("DB1.532.2"));
  78. // System.out.println("B枪-授权运行:"+s7PLC.readBoolean("DB1.3.0"));
  79. System.out.println("B枪-SV(预设)数量:"+s7PLC.readInt32("DB1.568.0"));
  80. System.out.println("B枪-PV(实际)数量:"+s7PLC.readInt32("DB1.714.0"));
  81. System.out.println("B枪-OK数量:"+s7PLC.readInt32("DB1.706.0"));
  82. System.out.println("B枪-NG数量:"+s7PLC.readInt32("DB1.710.0"));
  83. System.out.println("B枪-产品选择:"+s7PLC.readInt16("DB1.584.0"));
  84. System.out.println("B枪-最大拉力:"+s7PLC.readInt32("DB1.674.0"));
  85. System.out.println("B枪-最大位移:"+s7PLC.readFloat32("DB1.678.0"));
  86. System.out.println("B枪-基准拉力:"+s7PLC.readInt32("DB1.682.0"));
  87. System.out.println("B枪-基准位移:"+s7PLC.readFloat32("DB1.686.0"));
  88. // System.out.println("B枪-拉力上限:"+s7PLC.readInt32("DB1.690.0"));
  89. // System.out.println("B枪-拉力下限:"+s7PLC.readInt32("DB1.694.0"));
  90. // System.out.println("B枪-位移上限:"+s7PLC.readFloat32("DB1.698.0"));
  91. // System.out.println("B枪-位移下限:"+s7PLC.readFloat32("DB1.702.0"));
  92. System.out.println("B枪-拉力上限:"+s7PLC.readInt32("DB1.552.0"));
  93. System.out.println("B枪-拉力下限:"+s7PLC.readInt32("DB1.556.0"));
  94. System.out.println("B枪-位移上限:"+s7PLC.readFloat32("DB1.560.0"));
  95. System.out.println("B枪-位移下限:"+s7PLC.readFloat32("DB1.564.0"));
  96. System.out.println("B枪-拉力OK:"+s7PLC.readBoolean("DB1.844.0"));
  97. System.out.println("B枪-拉力NG:"+s7PLC.readBoolean("DB1.844.1"));
  98. System.out.println("B枪-位移OK:"+s7PLC.readBoolean("DB1.844.2"));
  99. System.out.println("B枪-位移NG:"+s7PLC.readBoolean("DB1.844.3"));
  100. System.out.println("B枪-拉铆完成信号:"+s7PLC.readBoolean("DB1.844.5"));
  101. System.out.println("B枪-最大拉力:"+s7PLC.readInt32("DB1.846"));
  102. System.out.println("B枪-最大位移:"+s7PLC.readFloat32("DB1.850"));
  103. System.out.println("B枪-判断结果:"+s7PLC.readString("DB1.992.0",2));
  104. System.out.println("B枪-实时条码:"+s7PLC.readString("DB1.930.0",50));
  105. System.out.println("B枪-枪号:"+s7PLC.readInt16("DB1.980.0"));
  106. System.out.println("B枪-产品型号:"+s7PLC.readInt16("DB1.982.0"));
  107. System.out.println("B枪-基准拉力:"+s7PLC.readInt16("DB1.984.0"));
  108. System.out.println("B枪-基准位移:"+s7PLC.readInt16("DB1.986.0"));
  109. System.out.println("B枪-最大拉力:"+s7PLC.readInt16("DB1.988.0"));
  110. System.out.println("B枪-最大位移:"+s7PLC.readInt16("DB1.990.0"));
  111. System.out.println("B枪-结果判断:"+s7PLC.readString("DB1.992.0",2));
  112. System.out.println("B枪-当前数量:"+s7PLC.readInt16("DB1.994.4"));
  113. System.out.println("B枪-总铆接数:"+s7PLC.readString("DB1.996.0",10));
  114. System.out.println("B枪-条码信息:"+s7PLC.readString("DB1.1006.0",50));
  115. // String programName = s7PLC.readProgramName();;
  116. // System.out.println("programName:"+programName);
  117. ////// String programName = s7PLC.readProgramName();;
  118. // System.out.println("programName:"+s7PLC.readStatus());
  119. // // S7PLC s7PLC = new S7PLC(EPlcType.S1200, "192.168.0.41");
  120. // S7PLC s7PLC = new S7PLC(EPlcType.S1200, "192.168.7.100");
  121. // Short dya = s7PLC.readInt16("DB1010.20");
  122. // Short dla = s7PLC.readInt16("DB1.22");
  123. // Short ssa = s7PLC.readInt16("DB1.24");
  124. // Short cwa = s7PLC.readInt16("DB1.26");
  125. // Short joba = s7PLC.readInt16("DB1.28");
  126. // System.err.println(s7PLC.readFloat32("DB1010.2")+"");
  127. // System.err.println(s7PLC.readFloat32("DB1010.8")+"");
  128. // System.err.println(s7PLC.readFloat32("DB1010.14")+"");
  129. // System.err.println(s7PLC.readInt16("DB1010.18")+"");
  130. // System.err.println(s7PLC.readInt16("DB1010.20")+"");
  131. //
  132. // System.err.println(s7PLC.readFloat32("DB1010.26")+"");
  133. // System.err.println(s7PLC.readFloat32("DB1010.34")+"");
  134. // System.err.println(s7PLC.readFloat32("DB1010.42")+"");
  135. // System.err.println(s7PLC.readInt16("DB1010.46")+"");
  136. // System.err.println(s7PLC.readInt16("DB1010.48")+"");
  137. //
  138. // System.err.println(s7PLC.readFloat32("DB1010.54")+"");
  139. // System.err.println(s7PLC.readFloat32("DB1010.62")+"");
  140. // System.err.println(s7PLC.readFloat32("DB1010.70")+"");
  141. // System.err.println(s7PLC.readInt16("DB1010.74")+"");
  142. // System.err.println(s7PLC.readInt16("DB1010.76")+"");
  143. // Float dyb = s7PLC.readFloat32("DB2000.50");
  144. // Float dlb = s7PLC.readFloat32("DB2000.54");
  145. // Float ssb = s7PLC.readFloat32("DB2000.58");
  146. // Short cwb = s7PLC.readInt16("DB2000.62");
  147. // Short jobb = s7PLC.readInt16("DB2000.64");
  148. // Short dyb = s7PLC.readInt16("DB1.30");
  149. // Short dlb = s7PLC.readInt16("DB1.32");
  150. // Short ssb = s7PLC.readInt16("DB1.34");
  151. // Short cwb = s7PLC.readInt16("DB1.36");
  152. // Short jobb = s7PLC.readInt16("DB1.38");
  153. // System.err.println(dyb+"");
  154. // System.err.println(dlb+"");
  155. // System.err.println(ssb+"");
  156. // System.err.println(cwb+"");
  157. // System.err.println(jobb+"");
  158. // S7PLC s7PLC = new S7PLC(EPlcType.S200_SMART,"192.168.2.1");
  159. // s7PLC.writeBoolean("V800.1",true);
  160. //// s7PLC.writeBoolean("V801.0",true);
  161. //// s7PLC.writeBoolean("V800.0",true);
  162. //
  163. // System.out.println(s7PLC.readBoolean("V800.0"));
  164. // System.out.println(s7PLC.readBoolean("V801.0"));
  165. // System.out.println(s7PLC.readBoolean("V800.1"));
  166. // Float weight = Float.valueOf(" ");
  167. // System.out.println(Float.valueOf(" "));
  168. // S7PLC s7PLC = new S7PLC(EPlcType.SINUMERIK_828D, "192.168.0.7");
  169. //System.out.println(s7PLC.readFloat32("DB9050.12"));
  170. //System.out.println(s7PLC.readFloat32("DB9050.14"));
  171. // System.out.println(new BigInteger(s7PLC.readByte("DB9050",4)).floatValue());
  172. // S7Connector s7Connector = null;
  173. // try {
  174. // if (s7Connector == null) {
  175. //
  176. // //PLC地址
  177. // String ipAddress = "192.168.7.100";
  178. // //默认端口
  179. //// int port = 102;
  180. // int rack = 0;
  181. // int slot = 3;
  182. // int timeout = 10000;
  183. // s7Connector =
  184. // S7ConnectorFactory
  185. // .buildTCPConnector()
  186. // .withHost(ipAddress)
  187. //// .withPort(port) //optional
  188. //// .withRack(rack) //optional
  189. //// .withSlot(slot) //optional
  190. // .withTimeout(timeout) //连接超时时间
  191. // .build();
  192. // S7Serializer s7Serializer2L = S7SerializerFactory.buildSerializer(s7Connector);
  193. //
  194. //
  195. //
  196. //
  197. //// String binaryString = "00000001";
  198. //// int length1 = binaryString.length();
  199. //// byte[] byteArray = new byte[length1 / 8];
  200. //// for (int i = 0; i < byteArray.length; i++) {
  201. //// String byteString = binaryString.substring(i * 8, (i + 1) * 8);
  202. //// byteArray[i] = (byte) Integer.parseInt(byteString, 2);
  203. //// }
  204. //
  205. // byte[] bytes2 = new byte[1];
  206. // bytes2[0] = 0x01;
  207. // s7Connector.write(DaveArea.DB,9052,1,bytes2);
  208. ////
  209. //// System.out.println("DB9031.DBW60:"+new BigInteger(xtob(s7Connector.read(DaveArea.DB, 1010, 2, 0))).intValue());
  210. //
  211. //
  212. // System.out.println("DB9050.DBD0:"+new BigInteger(xtob(s7Connector.read(DaveArea.DB, 9050, 4, 0))).floatValue());
  213. // System.out.println("DB9050.DBD4:"+new BigInteger(xtob(s7Connector.read(DaveArea.DB, 9050, 4, 4))).intValue());
  214. // System.out.println("DB9050.DBD8:"+new BigInteger(xtob(s7Connector.read(DaveArea.DB, 9050, 4, 8))).intValue());
  215. // System.out.println("DB9050.DBD12:"+new BigInteger(xtob(s7Connector.read(DaveArea.DB, 9050, 4, 12))).intValue());
  216. // System.out.println("DB9050.DBD16:"+new BigInteger(xtob(s7Connector.read(DaveArea.DB, 9050, 4, 16))).intValue());
  217. //
  218. //
  219. // System.out.println("DB9052.DBB1:"+new BigInteger(xtob(s7Connector.read(DaveArea.DB, 9052, 1, 1))).intValue());
  220. //
  221. // byte[] bytes3 = s7Connector.read(DaveArea.DB, 9052, 1, 1);
  222. // System.out.println("DB9052.DBB1:"+byteToBinaryString(bytes3));
  223. //
  224. //
  225. // byte[] bytes = s7Connector.read(DaveArea.DB, 9052, 1, 0);
  226. // System.out.println("DB9052.DBX0:"+byteToBinaryString(bytes));
  227. //
  228. // System.out.println("DB9052.DBX0:"+getBit(bytes[0],0));
  229. // }
  230. // }catch (Exception e){
  231. // e.printStackTrace();
  232. // }
  233. }
  234. public static int getBit(byte b, int n) {
  235. // 将byte转换为二进制字符串
  236. String binaryString = Integer.toBinaryString(b & 0xFF);
  237. // 补足位数到8位
  238. binaryString = String.format("%8s", binaryString).replace(' ', '0');
  239. // 获取第n位的字符,然后转换为整数
  240. return binaryString.charAt(n) == '1' ? 1 : 0;
  241. }
  242. private static String byteToBinaryString(byte[] byteArray) {
  243. StringBuilder binaryString = new StringBuilder();
  244. for (byte b : byteArray) {
  245. binaryString.append(String.format("%8s", Integer.toBinaryString(b & 0xFF)).replace(' ', '0'));
  246. }
  247. return binaryString.toString();
  248. }
  249. private static byte[] xtob( byte[] bytes){
  250. // 创建新的byte数组并复制原始数据
  251. byte[] reversedBytes = new byte[bytes.length];
  252. System.arraycopy(bytes, 0, reversedBytes, 0, bytes.length);
  253. // 反转byte数组元素的位置
  254. for (int i = 0; i < bytes.length / 2; i++) {
  255. byte temp = reversedBytes[i];
  256. reversedBytes[i] = reversedBytes[reversedBytes.length - 1 - i];
  257. reversedBytes[reversedBytes.length - 1 - i] = temp;
  258. }
  259. return reversedBytes;
  260. }
  261. }