YgslClientHandler.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  1. package com.mes.ygsl;
  2. import com.mes.ui.DataUtil;
  3. import com.mes.ui.MesClient;
  4. import com.mes.util.JdbcUtils;
  5. import io.netty.buffer.ByteBuf;
  6. import io.netty.channel.Channel;
  7. import io.netty.channel.ChannelHandlerContext;
  8. import io.netty.channel.ChannelInboundHandlerAdapter;
  9. import org.slf4j.Logger;
  10. import org.slf4j.LoggerFactory;
  11. import java.awt.*;
  12. import java.nio.charset.StandardCharsets;
  13. import java.text.SimpleDateFormat;
  14. import java.util.Date;
  15. public class YgslClientHandler extends ChannelInboundHandlerAdapter {
  16. public static final Logger log = LoggerFactory.getLogger(MesClient.class);
  17. private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  18. public static byte[] responseByte;
  19. @Override
  20. public void channelActive(ChannelHandlerContext ctx) throws Exception {
  21. System.out.println("mes connecting:" + sdf.format(new Date()));
  22. }
  23. @Override
  24. public void handlerRemoved(ChannelHandlerContext ctx) throws Exception {
  25. Channel channel = ctx.channel();
  26. System.err.println("close ygsl tcp, ip:" + channel.remoteAddress());
  27. // 关闭通道
  28. channel.close();
  29. //初始化TCP连接
  30. MesClient.ygslClient = null;
  31. //TCP连接状态
  32. MesClient.ygsl_tcp_connect_flag = false;
  33. //设置TCP请求状态
  34. MesClient.ygsl_connect_request_flag = true;
  35. }
  36. @Override
  37. public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
  38. try {
  39. // System.out.println("msg1111111:"+msg);
  40. if (msg instanceof ByteBuf) {
  41. ByteBuf buf = (ByteBuf) msg;
  42. // 你的处理逻辑
  43. String content = buf.toString(StandardCharsets.UTF_8);
  44. // System.out.println("oldmsg:"+content);
  45. if (content.contains("02310061")){
  46. // 找到关键字的位置
  47. int index = content.indexOf("02310061");
  48. // 截取从关键字开始到末尾的内容
  49. content = content.substring(index);
  50. }
  51. //
  52. // System.out.println("msg:" + content);
  53. // System.out.println("msg-size:" + content.length());
  54. String mid = YgslParam.getMid(content);
  55. // System.out.println("MID:" + mid);
  56. switch (mid) {
  57. case "0002":
  58. YgslUtil.lastTighteningResultSubscribe(MesClient.ygslClient);
  59. // YgslUtil.pSet(MesClient.ygslClient);
  60. break;
  61. case "0011":
  62. YgslUtil.selectSet(MesClient.ygslClient);
  63. break;
  64. case "0031":
  65. YgslUtil.selectJob(MesClient.ygslClient);
  66. // YgslUtil.restartJob(MesClient.ygslClient);
  67. break;
  68. case "0004": // 错误信息
  69. // System.out.println("MID:" + YgslParam.getReplyMid(content) + ";ErrorCode:" + YgslParam.getErrCode(content));
  70. break;
  71. case "0005": // 命令被接受
  72. // System.out.println("命令被接受:" + YgslParam.getReplyMid(content));
  73. break;
  74. case "0061": // 拧紧数据
  75. if (MesClient.work_status == 1) {
  76. String tighteningStatus = YgslParam.getTighteningStatus(content);
  77. String torqueStatus = YgslParam.getTorqueStatus(content);
  78. String angleStatus = YgslParam.getAngleStatus(content);
  79. String torqueMin = YgslParam.getTorqueMinLimit(content);
  80. String torqueMax = YgslParam.getTorqueMaxLimit(content);
  81. String torqueFinal = YgslParam.getTorqueFinalTarget(content);
  82. String torque = YgslParam.getTorque(content);
  83. String angleMin = YgslParam.getAngleMin(content);
  84. String angleMax = YgslParam.getAngleMax(content);
  85. String angleFinal = YgslParam.getFinalAngleTarget(content);
  86. String angle = YgslParam.getAngle(content);
  87. String jobID = YgslParam.getJobID(content);
  88. String tighteningID = YgslParam.getTighteningID(content);
  89. if (!tighteningID.isEmpty() && !MesClient.atids.contains(tighteningID)) {
  90. MesClient.atids.add(tighteningID);
  91. String sn = MesClient.product_sn.getText().trim();
  92. //检查数据是否已存在
  93. Boolean checkRet = JdbcUtils.checkTighteningById(tighteningID, jobID,sn);
  94. // if (!checkRet) {
  95. if (true) {
  96. // if(tighteningStatus.equals("0")){ // NG
  97. // if(torqueStatus.equals("1")){
  98. // MesClient.torque.setForeground(Color.BLACK);
  99. // }else{
  100. // MesClient.torque.setForeground(Color.RED);
  101. // }
  102. // if(angleStatus.equals("1")){
  103. // MesClient.torque.setForeground(Color.BLACK);
  104. // }else{
  105. // MesClient.torque.setForeground(Color.RED);
  106. // }
  107. // }else{
  108. // MesClient.torque.setForeground(Color.BLACK);
  109. // if(tighteningStatus.equals("1")){
  110. // MesClient.cur++;
  111. // }
  112. //
  113. // }
  114. // String serialNumber = String.valueOf(MesClient.cur);
  115. // if(!tighteningStatus.equals("1")){
  116. // serialNumber = String.valueOf(MesClient.cur + 1);
  117. // }
  118. MesClient.torsionalValue.setText(torque+"N.m");
  119. MesClient.torsionalMaxValue.setText(torqueMin+"-"+torqueMax+"N.m");
  120. //扭力值在范围内数量+1
  121. if( MesClient.cur<MesClient.max&&Double.parseDouble(torque) >= Double.parseDouble(torqueMin) && Double.parseDouble(torque) <= Double.parseDouble(torqueMax)){
  122. MesClient.cur++;
  123. MesClient.torsionalValue.setForeground(Color.BLACK);
  124. // MesClient.monitoring_text.setText(MesClient.max + "/" + MesClient.cur);
  125. MesClient.monitoring_text.setText(MesClient.cur + "/" + MesClient.max);
  126. JdbcUtils.insertProdData(MesClient.mes_gw,MesClient.mes_line_sn,MesClient.product_sn.getText(),torque,"OK",MesClient.user_menu.getText(),tighteningID,jobID);
  127. // if (MesClient.cur==32){
  128. // MesClient.torsionalMaxValue.setText("6.5-7.5N.m");
  129. // }
  130. //只记录合格数据
  131. // JdbcUtils.insertTighteningData(
  132. // MesClient.mes_gw, MesClient.mes_line_sn, MesClient.product_sn.getText()
  133. // , torqueStatus, torqueMin, torqueMax, torqueFinal, torque,
  134. // tighteningID, jobID,String.valueOf(MesClient.cur),
  135. // MesClient.user_menu.getText()
  136. // );
  137. }else{
  138. MesClient.torsionalValue.setForeground(Color.RED);
  139. }
  140. //达到次数才能点击下一件
  141. if (MesClient.cur == MesClient.max){
  142. // MesClient.finish_ok_bt.setEnabled(true);
  143. if(MesClient.fininsh_flag){
  144. MesClient.setMenuStatus("结果已提交!",-1);
  145. return;
  146. }
  147. if(MesClient.connect_request_flag){
  148. MesClient.setMenuStatus("设备未连接Mes服务器!",-1);
  149. return;
  150. }
  151. if(MesClient.product_sn.getText().isEmpty()){
  152. MesClient.setMenuStatus("未扫工件码!",-1);
  153. return;
  154. }
  155. // if(MesClient.work_status == 1 && MesClient.check_quality_result){
  156. //
  157. // String sn1 = MesClient.getBarcode(MesClient.product_sn.getText());
  158. // MesClient.getUser();
  159. //
  160. // String qret = "OK";
  161. // if (MesClient.cur !=MesClient. max) {
  162. // qret = "NG";
  163. // }
  164. // Boolean result = DataUtil.sendQuality(sn1,qret,MesClient.user20);
  165. // if(result) {
  166. // MesClient.resetScanA();
  167. // MesClient.setMenuStatus("结果提交成功,请扫下一件", 0);
  168. // MesClient.scan_type = 1;
  169. //// MesClient.scanBarcode();
  170. // } else {
  171. // MesClient.setMenuStatus("结果提交失败,请重试",-1);
  172. // }
  173. // }
  174. // 扭力到数后不自动提交;由操作员点击“下一件”提交结果
  175. MesClient.finish_ok_bt.setEnabled(true);
  176. MesClient.setMenuStatus("扭力到数,请点“下一件”提交", 0);
  177. MesClient.result_text.setText("合格");
  178. }
  179. // if (MesClient.cur >= MesClient.max) {
  180. // YgslUtil.disableTool(MesClient.ygslClient);
  181. // }
  182. }
  183. }
  184. YgslUtil.lastTighteningResultDataAcknowledge(MesClient.ygslClient);
  185. // if(MesClient.ygslNum == 1){
  186. // if(MesClient.cura >= MesClient.maxa){ // 提交质量
  187. // MesClient.finish_ok_bt.setEnabled(true);
  188. // MesClient.finish_ng_bt.setEnabled(true);
  189. // if(MesClient.work_status == 1 && MesClient.check_quality_result){
  190. //
  191. // String sn = MesClient.product_sn.getText();
  192. // MesClient.getUser();
  193. //
  194. // String qret = "OK";
  195. // Boolean sendret = DataUtil.sendQuality(MesClient.nettyClient,sn,qret,MesClient.user20);
  196. // if(!sendret){
  197. // MesClient.setMenuStatus("结果上传MES失败,请重试",-1);
  198. // }
  199. // }
  200. // }
  201. // }else{
  202. // if(MesClient.cura >= MesClient.maxa && MesClient.curb >= MesClient.maxb){ // 提交质量
  203. // MesClient.finish_ok_bt.setEnabled(true);
  204. // MesClient.finish_ng_bt.setEnabled(true);
  205. // if(MesClient.work_status == 1 && MesClient.check_quality_result){
  206. // String sn = MesClient.product_sn.getText();
  207. // MesClient.getUser();
  208. //
  209. // String qret = "OK";
  210. // Boolean sendret = DataUtil.sendQuality(MesClient.nettyClient,sn,qret,MesClient.user20);
  211. // if(!sendret){
  212. // MesClient.setMenuStatus("结果上传MES失败,请重试",-1);
  213. // }
  214. // }
  215. // }
  216. // }
  217. } else {
  218. YgslUtil.lastTighteningResultDataAcknowledge(MesClient.ygslClient);
  219. }
  220. break;
  221. default:
  222. break;
  223. }
  224. } else {
  225. }
  226. // System.out.println("msg:"+msg);
  227. } catch (Exception e) {
  228. e.printStackTrace();
  229. }
  230. }
  231. @Override
  232. public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
  233. System.out.println("mes exceptionCaught:" + sdf.format(new Date()));
  234. ctx.close();
  235. MesClient.ygslClient = null;
  236. MesClient.initYgslTcpConnection();
  237. }
  238. // 16字符串转Ascii
  239. private String hexStringToAscii(String hexString) {
  240. StringBuilder sbuilder = new StringBuilder();
  241. for (int i = 0; i < hexString.length(); i += 2) {
  242. String hexByte = hexString.substring(i, i + 2);
  243. int byteValue = Integer.parseInt(hexByte, 16);
  244. char c = (char) byteValue;
  245. sbuilder.append(c);
  246. }
  247. return sbuilder.toString();
  248. }
  249. }