PlcUtil.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. package com.mes.ui;
  2. import com.alibaba.fastjson2.JSON;
  3. import com.github.xingshuangs.iot.protocol.modbus.service.ModbusTcp;
  4. import com.github.xingshuangs.iot.protocol.s7.service.S7PLC;
  5. import com.mes.component.MyDialog;
  6. import com.mes.util.DateLocalUtils;
  7. import com.mes.util.JdbcUtils;
  8. import javax.swing.*;
  9. import java.awt.*;
  10. import java.util.ArrayList;
  11. import java.util.Arrays;
  12. public class PlcUtil {
  13. public static void getParamDyDl(S7PLC s7PLC){
  14. Boolean starta = s7PLC.readBoolean("DB1.2.2"); //A启动中
  15. Boolean startb = s7PLC.readBoolean("DB1.2.3"); //B启动中
  16. String oprno = MesClient.mes_gw+"A";
  17. if(startb){
  18. oprno = MesClient.mes_gw+"B";
  19. }
  20. if(MesClient.mes_gwflag.equals("B")){
  21. if(oprno.equals(MesClient.mes_gw+"A")){
  22. oprno = MesClient.mes_gw+"C";
  23. }else{
  24. oprno = MesClient.mes_gw+"D";
  25. }
  26. }
  27. if(MesClient.tjFlaga == 2 || MesClient.tjFlagb == 2){ //运行中
  28. Float dya = s7PLC.readFloat32("DB1010.2");
  29. Float dla = s7PLC.readFloat32("DB1010.8");
  30. Float ssa = s7PLC.readFloat32("DB1010.14");
  31. Short cwa = s7PLC.readInt16("DB1010.18");
  32. Short joba = s7PLC.readInt16("DB1010.20");
  33. // MesClient.param1.setText(dya+"");
  34. // MesClient.param2.setText(dla+"");
  35. // MesClient.param3.setText(ssa+"");
  36. // MesClient.param4.setText(cwa+"");
  37. // MesClient.param5.setText(joba+"");
  38. Float dyb = s7PLC.readFloat32("DB1010.26");
  39. Float dlb = s7PLC.readFloat32("DB1010.34");
  40. Float ssb = s7PLC.readFloat32("DB1010.42");
  41. Short cwb = s7PLC.readInt16("DB1010.46");
  42. Short jobb = s7PLC.readInt16("DB1010.48");
  43. // MesClient.param21.setText(dyb+"");
  44. // MesClient.param22.setText(dlb+"");
  45. // MesClient.param23.setText(ssb+"");
  46. // MesClient.param24.setText(cwb+"");
  47. // MesClient.param25.setText(jobb+"");
  48. String record_time = DateLocalUtils.getCurrentTime();
  49. MesClient.hjparams.add(dya+"|"+dla+"|"+ssa+"|"+cwa+"|"+joba+"|"+dyb+"|"+dlb+"|"+ssb+"|"+cwb+"|"+jobb+"|"+record_time);
  50. if(MesClient.hjparams.size() == 60){
  51. try{
  52. if(MesClient.curFlag.equals("A")){
  53. JdbcUtils.insertCmtData(oprno,MesClient.mes_line_sn,MesClient.product_sn.getText(), JSON.toJSONString(MesClient.hjparams));
  54. }else{
  55. JdbcUtils.insertCmtData(oprno,MesClient.mes_line_sn,MesClient.product_sn2.getText(), JSON.toJSONString(MesClient.hjparams));
  56. }
  57. System.out.println("cmt:"+MesClient.curFlag);
  58. MesClient.hjparams = new ArrayList<>();
  59. }catch (Exception e){
  60. e.printStackTrace();
  61. }
  62. }
  63. }
  64. }
  65. public static void getStatusAOld(S7PLC s7PLC){
  66. String sna = "";
  67. if(MesClient.tjFlaga == 1){ // 待运行
  68. MesClient.checkA = 0;
  69. Boolean starta = s7PLC.readBoolean("DB1.2.2"); //A启动中
  70. if(starta){
  71. MesClient.curFlag = "A";
  72. MesClient.tjFlaga = 2;
  73. MesClient.pxstatus1.setText("A:设备运行中");
  74. PlcUtil.changeEnable(MesClient.s7PLC,false);
  75. }
  76. }else if(MesClient.tjFlaga == 2){ // 运行中
  77. MesClient.batch_scan_1.setEnabled(false);
  78. Boolean starta = s7PLC.readBoolean("DB1.2.5"); //A焊接完成
  79. Boolean startb = s7PLC.readBoolean("DB1.2.3"); //B启动中
  80. if(starta || startb){ // B启动中,A当做完成
  81. MesClient.tjFlaga = 3;
  82. MesClient.pxstatus1.setText("A:设备运行结束,提交结果中");
  83. MesClient.finish_ok_bt.setEnabled(true);
  84. Boolean sendret = DataUtil.sendQuality(MesClient.nettyClient,MesClient.product_sn.getText(),"OK",MesClient.user20,"A");
  85. if(!sendret){
  86. MesClient.pxstatus1.setText("A:结果上传MES失败");
  87. MesClient.tjStatusa = 1;
  88. }else{
  89. // MesClient.pxstatus1.setText("A:提交成功");
  90. // MesClient.status_menu.setText("A件提交成功");
  91. // MesClient.resetScanA();
  92. }
  93. }
  94. // Boolean sa = s7PLC.readBoolean("DB1.2.2"); //A启动中
  95. // if(!sa){
  96. // MesClient.pxstatus1.setText("A:设备运行停止");
  97. // MesClient.finish_ok_bt.setEnabled(true);
  98. // }
  99. }
  100. }
  101. public static void getStatusBOld(S7PLC s7PLC){
  102. String snb = "";
  103. if(MesClient.tjFlagb == 0){ // 未扫码
  104. snb = s7PLC.readString("DB8.100",50);
  105. System.out.println("snb:"+snb);
  106. if(!snb.isEmpty() && !MesClient.curSnb.equals(snb) && snb.length() == 33){
  107. MesClient.product_sn2.setText(snb);
  108. }else{
  109. snb = "";
  110. }
  111. if(!MesClient.mesQualityFlagB && !snb.isEmpty() && MesClient.curSnb.isEmpty()){ // 查询工件质量
  112. if(!MesClient.tcp_connect_flag) {
  113. MesClient.status_menu.setText("未连接MES服务器");
  114. }else{
  115. if(MesClient.checkB == 0) {
  116. MesClient.checkB = 1;
  117. MesClient.getUser();
  118. Boolean sendret = DataUtil.checkQuality(MesClient.nettyClient,snb,MesClient.user20,"B");
  119. if(!sendret){
  120. MesClient.pxstatus2.setText("B:查询质量失败");
  121. MesClient.checkB = 0;
  122. }
  123. }
  124. }
  125. }
  126. }else if(MesClient.tjFlagb == 1){ // 待运行
  127. MesClient.checkB = 0;
  128. Boolean startb = s7PLC.readBoolean("DB1.2.3"); //B启动中
  129. if(startb){
  130. MesClient.curFlag = "B";
  131. MesClient.tjFlagb = 2;
  132. MesClient.pxstatus2.setText("B:设备运行中");
  133. PlcUtil.changeEnable(MesClient.s7PLC,false);
  134. }
  135. }else if(MesClient.tjFlagb == 2){ // 运行中
  136. MesClient.batch_scan_2.setEnabled(false);
  137. Boolean starta = s7PLC.readBoolean("DB1.2.7"); //B焊接完成
  138. Boolean startb = s7PLC.readBoolean("DB1.2.2"); //A启动中
  139. if(starta || startb){
  140. MesClient.tjFlagb = 3;
  141. MesClient.pxstatus2.setText("B:设备运行结束,提交结果中");
  142. MesClient.finish_ng_bt.setEnabled(true);
  143. Boolean sendret = DataUtil.sendQuality(MesClient.nettyClient,MesClient.product_sn2.getText(),"OK",MesClient.user20,"B");
  144. if(!sendret){
  145. MesClient.pxstatus2.setText("B:结果上传MES失败");
  146. MesClient.tjStatusb = 1;
  147. }else{
  148. // MesClient.pxstatus2.setText("B:提交成功");
  149. // MesClient.status_menu.setText("B件提交成功");
  150. // MesClient.resetScanB();
  151. }
  152. }
  153. }
  154. }
  155. public static void getStatusA(S7PLC s7PLC){
  156. if(MesClient.tjFlaga == 1){ // 已扫码,设备未运行
  157. Boolean starta = getAStart(s7PLC); //A启动中
  158. if(starta){
  159. MesClient.curFlag = "A";
  160. MesClient.tjFlaga = 2;
  161. MesClient.pxstatus1.setText("A:设备运行中");
  162. // MesClient.formatScanType(1);
  163. // MesClient.batch_scan_1.setEnabled(false);
  164. PlcUtil.changeEnable(s7PLC,false);
  165. }
  166. }else if(MesClient.tjFlaga == 2){
  167. Boolean afinish = getAFinish(s7PLC); //A焊接完成
  168. if(afinish){ // B启动中,A当做完成
  169. MesClient.tjFlaga = 3;
  170. MesClient.pxstatus1.setText("A:设备运行结束,提交结果中");
  171. MesClient.finish_ok_bt.setEnabled(true);
  172. MesClient.finish_ng_bt.setEnabled(true);
  173. Boolean sendret = DataUtil.sendQuality(MesClient.nettyClient,MesClient.product_sn.getText(),"OK",MesClient.user20,"A");
  174. if(!sendret){
  175. MesClient.pxstatus1.setText("A:结果上传MES失败");
  176. MesClient.tjStatusa = 1;
  177. }
  178. }
  179. }
  180. }
  181. public static void getStatusB(S7PLC s7PLC){
  182. if(MesClient.tjFlagb == 1){ // 已扫码,设备未运行
  183. Boolean startb = getBStart(s7PLC); //B启动中
  184. if(startb){
  185. MesClient.curFlag = "B";
  186. MesClient.tjFlagb = 2;
  187. MesClient.pxstatus2.setText("B:设备运行中");
  188. MesClient.batch_scan_2.setEnabled(false);
  189. MesClient.formatScanType(1);
  190. PlcUtil.changeEnable(s7PLC,false);
  191. }
  192. }else if(MesClient.tjFlagb == 2){
  193. Boolean bfinish = getBFinish(s7PLC); //B焊接完成
  194. if(bfinish){
  195. MesClient.tjFlagb = 3;
  196. MesClient.pxstatus2.setText("B:设备运行结束,提交结果中");
  197. MesClient.finish_ng_bt2.setEnabled(true);
  198. MesClient.finish_ok_bt2.setEnabled(true);
  199. Boolean sendret = DataUtil.sendQuality(MesClient.nettyClient,MesClient.product_sn2.getText(),"OK",MesClient.user20,"B");
  200. if(!sendret){
  201. MesClient.pxstatus2.setText("B:结果上传MES失败");
  202. MesClient.tjStatusb = 1;
  203. }
  204. }
  205. }
  206. }
  207. // 获取A启动状态
  208. public static Boolean getAStart(S7PLC s7PLC){
  209. try{
  210. return s7PLC.readBoolean("DB1.2.2");
  211. }catch (Exception e){
  212. e.printStackTrace();
  213. return false;
  214. }
  215. }
  216. // 获取A的结束状态
  217. public static Boolean getAFinish(S7PLC s7PLC){
  218. try{
  219. boolean a = s7PLC.readBoolean("DB1.2.5");
  220. boolean b = s7PLC.readBoolean("DB1.2.6");
  221. return a || b;
  222. }catch (Exception e){
  223. e.printStackTrace();
  224. return false;
  225. }
  226. }
  227. // 获取B启动状态
  228. public static Boolean getBStart(S7PLC s7PLC){
  229. try{
  230. return s7PLC.readBoolean("DB1.2.6");
  231. }catch (Exception e){
  232. e.printStackTrace();
  233. return false;
  234. }
  235. }
  236. // 获取B的结束状态
  237. public static Boolean getBFinish(S7PLC s7PLC){
  238. try{
  239. boolean a = s7PLC.readBoolean("DB1.2.7");
  240. boolean b = s7PLC.readBoolean("DB1.2.4");
  241. return a || b;
  242. }catch (Exception e){
  243. e.printStackTrace();
  244. return false;
  245. }
  246. }
  247. // 修改设备的禁用开关
  248. // DB9.26.4 MES允许启动信号
  249. public static Boolean changeEnable(S7PLC s7PLC,Boolean result){
  250. try{
  251. //DB9.21.7 A//DB9.26.4 B
  252. s7PLC.writeBoolean("DB9.30.4",result);
  253. // s7PLC.writeBoolean("DB9.21.7",result);
  254. return true;
  255. }catch (Exception e){
  256. e.printStackTrace();
  257. return false;
  258. }
  259. }
  260. // 获取当前是A面还是B面
  261. public static String getCurAside(S7PLC s7PLC){
  262. String str = "A";
  263. try{
  264. Boolean ret = s7PLC.readBoolean("DB1.2.0"); // 当前A面
  265. if(!ret){
  266. str = "B";
  267. }
  268. }catch (Exception e){
  269. e.printStackTrace();
  270. }
  271. return str;
  272. }
  273. }