ModbusUtil.java 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. package com.mes.ui;
  2. import com.github.xingshuangs.iot.protocol.modbus.service.ModbusTcp;
  3. import com.mes.util.JdbcUtils;
  4. import java.nio.charset.Charset;
  5. public class ModbusUtil {
  6. public static void getDataA(ModbusTcp plc){
  7. // 说明
  8. //预设数量有变化不能修改
  9. // 打钉数应按实际监听数算
  10. // 41065=F-out 41066=S-out
  11. // 41069=F-min 41071=S-min 41070=F-max 41072=S-max
  12. // 预设数量=41129 完成数=41137
  13. Short cur = plc.readInt16(1136);
  14. // System.out.println("F-out:"+plc.readInt16(1064));
  15. // System.out.println("S-out:"+plc.readInt16(1065));
  16. // System.out.println("F-min:"+plc.readInt16(1068));
  17. // System.out.println("S-min:"+plc.readInt16(1070));
  18. // System.out.println("F-max:"+plc.readInt16(1069));
  19. // System.out.println("S-max:"+plc.readInt16(1071));
  20. // System.out.println("预设数量:"+plc.readInt16(1128));
  21. //System.out.println("当前数量:"+cur);
  22. if(MesClient.aMax <= 0){
  23. MesClient.aMax = plc.readInt16(1128); // 任务数量
  24. MesClient.param1.setText(String.valueOf(MesClient.aMax));
  25. }
  26. if(MesClient.sortA == cur - 1){
  27. MesClient.sortA = cur;
  28. MesClient.aFinish = plc.readInt16(1138);
  29. String fout = plc.readInt16(1064)+"";
  30. String sout = (float)plc.readInt16(1065)/1000+"";
  31. String fmin = plc.readInt16(1068)+"";
  32. String smin = (float)plc.readInt16(1070)/1000+"";
  33. String fmax = plc.readInt16(1069)+"";
  34. String smax = (float)plc.readInt16(1071)/1000+"";
  35. MesClient.param2.setText(cur+"");
  36. System.out.println("cur:"+cur);
  37. if(!MesClient.product_sn.getText().isEmpty()){
  38. JdbcUtils.insertProdData(MesClient.mes_gw, MesClient.mes_line_sn, MesClient.product_sn.getText(),"A",fout,sout,fmin,smin,fmax,smax,"1",cur+"", MesClient.user_menu.getText());
  39. }
  40. }
  41. upResult();
  42. }
  43. public static void getDataB(ModbusTcp plc){
  44. // 41065=F-out 41066=S-out
  45. // 41069=F-min 41071=S-min 41070=F-max 41072=S-max
  46. // 预设数量=41129 完成数=41137
  47. Short cur = plc.readInt16(1136);
  48. // System.out.println("F-out:"+plc.readInt16(1064));
  49. // System.out.println("S-out:"+plc.readInt16(1065));
  50. // System.out.println("F-min:"+plc.readInt16(1068));
  51. // System.out.println("S-min:"+plc.readInt16(1070));
  52. // System.out.println("F-max:"+plc.readInt16(1069));
  53. // System.out.println("S-max:"+plc.readInt16(1071));
  54. // System.out.println("set:"+plc.readInt16(1128));
  55. // System.out.println("cur:"+cur);
  56. // System.out.println("cur2:"+MesClient.sortB);
  57. if(MesClient.bMax <= 0){
  58. MesClient.bMax = plc.readInt16(1128);
  59. MesClient.param3.setText(String.valueOf(MesClient.bMax));
  60. }
  61. if(MesClient.sortB == cur - 1){
  62. MesClient.sortB = cur;
  63. String fout = plc.readInt16(1064)+"";
  64. String sout = (float)plc.readInt16(1065)/1000+"";
  65. String fmin = plc.readInt16(1068)+"";
  66. String smin = (float)plc.readInt16(1070)/1000+"";
  67. String fmax = plc.readInt16(1069)+"";
  68. String smax = (float)plc.readInt16(1071)/1000+"";
  69. MesClient.param4.setText(cur+"");
  70. System.out.println("cur:"+cur);
  71. if(!MesClient.product_sn.getText().isEmpty()){
  72. JdbcUtils.insertProdData(MesClient.mes_gw, MesClient.mes_line_sn, MesClient.product_sn.getText(),"B",fout,sout,fmin,smin,fmax,smax,"1",cur+"", MesClient.user_menu.getText());
  73. }
  74. }
  75. upResult();
  76. }
  77. // 上传总结果
  78. public static void upResult(){
  79. if(!MesClient.curSn.isEmpty() && MesClient.aMax > 0 && MesClient.aMax == MesClient.sortA && MesClient.bMax > 0 && MesClient.bMax == MesClient.sortB){
  80. MesClient.finish_ok_bt.setEnabled(true);
  81. MesClient.finish_ng_bt.setEnabled(true);
  82. if(MesClient.tjStatus == 0 && MesClient.check_quality_result){
  83. MesClient.tjStatus = 1;
  84. MesClient.getUser();
  85. String retf = "OK";
  86. if(MesClient.aFinish != MesClient.aMax){
  87. retf = "NG";
  88. }
  89. Boolean ret = DataUtil.sendQuality(MesClient.nettyClient, MesClient.product_sn.getText(),retf, MesClient.user20);
  90. if(!ret){
  91. MesClient.setMenuStatus(MesClient.tjFlagTextErr,-1);
  92. }
  93. }
  94. }
  95. }
  96. // 获取控制模式
  97. public static short getControlModel(ModbusTcp plc){
  98. short control = 0;
  99. try{
  100. control = plc.readInt16(1090);
  101. }catch (Exception e){
  102. e.printStackTrace();
  103. }
  104. return control;
  105. }
  106. // 获取二维码
  107. public static String getSn(ModbusTcp plc){
  108. String sn = "";
  109. try{
  110. sn = plc.readString(1216,40, Charset.forName("UTF8"));
  111. }catch (Exception e){
  112. e.printStackTrace();
  113. }
  114. return splitIntoChunks(sn,2);
  115. }
  116. // 每两个字符分割,并反转
  117. private static String splitIntoChunks(String str, int chunkSize) {
  118. if (str == null || str.isEmpty() || chunkSize <= 0) {
  119. return "";
  120. }
  121. int length = str.length();
  122. int arraySize = (length + chunkSize - 1) / chunkSize;
  123. String[] result = new String[arraySize];
  124. for (int i = 0, j = 0; i < length; i += chunkSize, j++) {
  125. int endIndex = Math.min(i + chunkSize, length);
  126. String sttr = str.substring(i, endIndex);
  127. StringBuilder sb = new StringBuilder(sttr);
  128. String reversedStr = sb.reverse().toString(); // 字符串反转
  129. result[j] = reversedStr;
  130. }
  131. return String.join("",result);
  132. }
  133. // 远程开机
  134. public static Boolean setPowerOn(ModbusTcp plc){
  135. Boolean ret = false;
  136. try{
  137. plc.writeCoil(3128,true);
  138. // plc.writeCoil(3079,false);
  139. // plc.writeCoil(3328,true); // 必须选关掉关机,开机才起左右
  140. ret = true;
  141. }catch (Exception e){
  142. e.printStackTrace();
  143. ret = false;
  144. }
  145. return ret;
  146. }
  147. // 远程关机
  148. public static Boolean setPowerOff(ModbusTcp plc){
  149. Boolean ret = false;
  150. try{
  151. plc.writeCoil(3128,false);
  152. // plc.writeCoil(3328,false);
  153. // plc.writeCoil(3079,true); // 关机
  154. // 必须选关掉关机,开机才起左右
  155. ret = true;
  156. }catch (Exception e){
  157. e.printStackTrace();
  158. ret = false;
  159. }
  160. return ret;
  161. }
  162. // 重置任务
  163. public static void setTask(ModbusTcp plc,Short setNum){
  164. try{
  165. // 设置模式 1=标记铆接模式
  166. plc.writeInt16(1092,(short) 1);
  167. // 设置任务
  168. plc.writeInt16(1128,setNum);
  169. plc.writeInt16(1136,(short) 0);
  170. plc.writeInt16(1138,(short) 0);
  171. }catch (Exception e){
  172. e.printStackTrace();
  173. }
  174. }
  175. // A枪说明 192.168.1.7
  176. // plc.writeCoil(3079,false);
  177. // plc.writeCoil(3328,true); // 必须选关掉关机,开机才起左右
  178. //// plc.writeCoil(3128,false);
  179. // System.out.println("控制模式:"+plc.readInt16(1090)); // 1091 控制模式
  180. // System.out.println("系统运行中:"+plc.readCoil(3128,1)); // 3129 系统运行中
  181. // System.out.println("结束暂停:"+plc.readCoil(3132,1)); // 3133 系统运行中
  182. // System.out.println("远程开机:"+plc.readCoil(3328,1)); // 3329 远程开机
  183. // System.out.println("远程关机:"+plc.readCoil(3079,1)); // 3080 远程关机
  184. // System.out.println("作业模式:"+plc.readInt16(1092)); // 1093 作业模式
  185. // System.out.println("最大拉力:"+plc.readInt16(1064)); // 1065 最大拉力
  186. // System.out.println("对应位移:"+plc.readInt16(1065)); // 1066 对应位移
  187. // System.out.println("任务数量:"+plc.readInt16(1128)); // 1129 任务数量
  188. // System.out.println("合格数量:"+plc.readInt16(1138)); // 1139 合格数量
  189. // System.out.println("质量状态:"+plc.readInt16(1072)); // 1073 质量状态
  190. // System.out.println("F-out:"+plc.readInt16(1064));
  191. // System.out.println("S-out:"+plc.readInt16(1065));
  192. // System.out.println("F-min:"+plc.readInt16(1068));
  193. // System.out.println("S-min:"+plc.readInt16(1070));
  194. // System.out.println("F-max:"+plc.readInt16(1069));
  195. // System.out.println("S-max:"+plc.readInt16(1071));
  196. }