|
|
@@ -1,15 +1,11 @@
|
|
|
package com.mes.ui;
|
|
|
|
|
|
import com.alibaba.fastjson2.JSONObject;
|
|
|
-import com.github.xingshuangs.iot.protocol.s7.enums.EPlcType;
|
|
|
-import com.github.xingshuangs.iot.protocol.s7.service.S7PLC;
|
|
|
+import com.fazecast.jSerialComm.SerialPort;
|
|
|
import com.mes.component.MesRadio;
|
|
|
import com.mes.component.MesWebView;
|
|
|
-import com.mes.component.MyDialog;
|
|
|
import com.mes.netty.NettyClient;
|
|
|
-import com.mes.netty.TCPClient;
|
|
|
import com.mes.util.DateLocalUtils;
|
|
|
-import com.mes.util.HttpUtils;
|
|
|
import com.mes.util.JdbcUtils;
|
|
|
import javafx.embed.swing.JFXPanel;
|
|
|
|
|
|
@@ -26,15 +22,10 @@ import java.io.BufferedReader;
|
|
|
import java.io.IOException;
|
|
|
import java.io.InputStream;
|
|
|
import java.io.InputStreamReader;
|
|
|
-import java.time.LocalDateTime;
|
|
|
-import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Properties;
|
|
|
import java.util.Timer;
|
|
|
import java.util.TimerTask;
|
|
|
-import java.util.concurrent.Executors;
|
|
|
-import java.util.concurrent.ScheduledExecutorService;
|
|
|
-import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
public class MesClient extends JFrame {
|
|
|
|
|
|
@@ -48,8 +39,7 @@ public class MesClient extends JFrame {
|
|
|
public static int mes_heart_beat_cycle = 10; // 心跳周期
|
|
|
public static int mes_heart_icon_cycle = 1;
|
|
|
public static String mes_line_sn = ""; // 产线编号
|
|
|
- public static S7PLC s7PLC = new S7PLC(EPlcType.S200_SMART, "192.168.6.40"); //
|
|
|
- public static TCPClient tcpClient = new TCPClient("192.168.16.143",9004);//扫码枪
|
|
|
+
|
|
|
//TCP连接
|
|
|
public static NettyClient nettyClient;
|
|
|
//TCP连接状态
|
|
|
@@ -76,8 +66,6 @@ public class MesClient extends JFrame {
|
|
|
public static JButton user_menu;
|
|
|
|
|
|
public static int scan_type = 0;
|
|
|
- public static int scan_status = 0;//0未扫码 1已扫码
|
|
|
- public static int scan_mark = 1;//扫码标记 (上料一次智能扫一次码)
|
|
|
public static JButton finish_ok_bt;
|
|
|
public static JButton finish_ng_bt;
|
|
|
public static JTextField product_sn;
|
|
|
@@ -92,27 +80,15 @@ public class MesClient extends JFrame {
|
|
|
public static JPanel indexPanelC;
|
|
|
public static MesWebView jfxPanel2 = null;
|
|
|
public static MesRadio mesRadioHj;
|
|
|
- public static Timer cjTimer;//机器人交互
|
|
|
- public static Timer cjTimer2;//获取设备状态
|
|
|
- public static Boolean shangLiaoOStatus = false;
|
|
|
- public static Integer tjFlag = 0; // 0=未扫码 1=已扫码,设备未运行 2=设备运行中 3=设备运行结束,结果未提交到MES
|
|
|
- public static Integer tjStatus = 0; // 0=重置 1=提交失败
|
|
|
- public static String tcTitle = "提示";
|
|
|
- public static String tjFlagText2 = "设备运行中";
|
|
|
-
|
|
|
- public static String tjFlagText3 = "设备运行结束,提交结果中";
|
|
|
-
|
|
|
- public static String tjFlagText4 = "结果已上传MES,请扫下一件";
|
|
|
-
|
|
|
- public static String tjFlagText5 = "已扫码,等待设备运行";
|
|
|
|
|
|
- public static String tjFlagTextErr = "结果上传MES失败,请重试";
|
|
|
-
|
|
|
- // 添加绑定物料窗口
|
|
|
public static JTable table;
|
|
|
public static Object[] columnNames = { "物料名称", "绑定批次", "剩余次数", "操作" };
|
|
|
public static Object[][] rowData = null;
|
|
|
|
|
|
+ public static Boolean checkState = false; // 点检状态 false=未点检 true=已点检
|
|
|
+
|
|
|
+ public static SerialPort serialPort; // 串口对象
|
|
|
+
|
|
|
public static void main(String[] args) {
|
|
|
EventQueue.invokeLater(new Runnable() {
|
|
|
@Override
|
|
|
@@ -129,10 +105,13 @@ public class MesClient extends JFrame {
|
|
|
|
|
|
welcomeWin = new LoginFarme();
|
|
|
welcomeWin.setVisible(true);
|
|
|
+
|
|
|
getMaterailData();
|
|
|
|
|
|
- getPlcParam();
|
|
|
- getDeviceStaus();
|
|
|
+ serialPort = ModbusRtu.connect();
|
|
|
+
|
|
|
+ startJsTimer();
|
|
|
+
|
|
|
}catch (Exception e){
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
@@ -173,222 +152,91 @@ public class MesClient extends JFrame {
|
|
|
|
|
|
DataUtil.synrTcp(nettyClient,mes_gw);
|
|
|
}
|
|
|
-
|
|
|
} catch (Exception e) {
|
|
|
// TODO Auto-generated catch block
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public static void getPlcParam() {
|
|
|
- if(cjTimer!=null) {
|
|
|
- cjTimer.cancel();
|
|
|
+ //启动心跳包程序
|
|
|
+ public static java.util.Timer heartBeatTimer;
|
|
|
+ public static java.util.Timer heartBeatIconTimer;
|
|
|
+ public static boolean iconREDFlag = true;
|
|
|
+ public static void startHeartBeatTimer() {
|
|
|
+ if(heartBeatTimer!=null) {
|
|
|
+ heartBeatTimer.cancel();
|
|
|
}
|
|
|
- cjTimer = new Timer();
|
|
|
- cjTimer.schedule(new TimerTask() {
|
|
|
+ heartBeatTimer = new java.util.Timer();
|
|
|
+ heartBeatTimer.schedule(new TimerTask() {
|
|
|
public void run() {
|
|
|
+ if(nettyClient!=null&&tcp_connect_flag) {
|
|
|
+ //System.out.println("发送心跳报文");
|
|
|
+ DataUtil.heartBeat(nettyClient,mes_gw);
|
|
|
|
|
|
-
|
|
|
- try {
|
|
|
-
|
|
|
- if (tcp_connect_flag) {
|
|
|
- if (tcpClient.socket != null && tcpClient.socket.isConnected() && !tcpClient.socket.isClosed()) {
|
|
|
-
|
|
|
- if (!shangLiaoOStatus) {
|
|
|
- MesClient.setMenuStatus("MES等待上料信号", 0);
|
|
|
- shangLiaoOStatus = S7Util.getShangLiaoOk(s7PLC);
|
|
|
- if (shangLiaoOStatus) {
|
|
|
- MesClient.setMenuStatus("MES收到上料信号,等待扫码", 0);
|
|
|
- }
|
|
|
- }
|
|
|
- //上料成功并且未扫码进行扫码
|
|
|
- if (shangLiaoOStatus) {
|
|
|
- scan_type = 1;
|
|
|
- if (scan_status == 0 && scan_mark == 1) {
|
|
|
- MesClient.setMenuStatus("扫码枪正在扫码,请勿操作!", 0);
|
|
|
- //扫码中不让点击扫码避免重复扫码线程卡死
|
|
|
- MesClient.f_scan_data_bt_1.setEnabled(false);
|
|
|
- String scanBarcode = MesClient.tcpClient.receiveResponse();
|
|
|
- MesClient.f_scan_data_bt_1.setEnabled(true);
|
|
|
-
|
|
|
- scan_mark = 0;//无论扫码是否成功,代表已经扫过一次 扫码次数清零
|
|
|
-
|
|
|
- if (scanBarcode == null || scanBarcode.equals("")) {
|
|
|
- S7Util.sendStartMessage(MesClient.s7PLC, false);
|
|
|
- } else {
|
|
|
- if (!product_sn.getText().equals(scanBarcode)) {
|
|
|
- scan_status = 1;
|
|
|
- System.out.println(scanBarcode);
|
|
|
- //补充到工件码输入框,发送mes进行质量检测
|
|
|
- productSnSetValue(scanBarcode);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- //设备检测合格之后---》提交结果到MES
|
|
|
- checkToMes();
|
|
|
-
|
|
|
- } else {
|
|
|
- tcpClient.connect();
|
|
|
- }
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
+ heart_beat_menu.setText(DateLocalUtils.getCurrentTime());
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
- }, 2000,2000);
|
|
|
- }
|
|
|
-
|
|
|
- //获取到扫码枪工件码,则输入框赋值工件码
|
|
|
- public static void productSnSetValue(String scanBarcode) {
|
|
|
- try {
|
|
|
- if (scanBarcode != null && !scanBarcode.equals("")) {
|
|
|
- //获取用户
|
|
|
- getUser();
|
|
|
- //获取扫码内容36位
|
|
|
- String barcode36 = getBarcode(scanBarcode);//处理36为码
|
|
|
- //工位号
|
|
|
- String gw = "";
|
|
|
- switch (scan_type) {
|
|
|
- case 1:
|
|
|
- product_sn.setText(scanBarcode);
|
|
|
- break;
|
|
|
- }
|
|
|
- //刷新界面
|
|
|
- mesClientFrame.repaint();
|
|
|
-
|
|
|
- if (!tcp_connect_flag) {
|
|
|
- MesClient.setMenuStatus("设备未连接Mes服务器",1);
|
|
|
-// JOptionPane.showMessageDialog(mesClientFrame, "设备未连接Mes服务器", "提示窗口", JOptionPane.INFORMATION_MESSAGE);
|
|
|
- return;
|
|
|
- }
|
|
|
+ }, 100,mes_heart_beat_cycle*1000);
|
|
|
|
|
|
- // 查询工件质量
|
|
|
- Boolean sendret = DataUtil.checkQuality(nettyClient, barcode36, user20);
|
|
|
- if (!sendret) {
|
|
|
- MesClient.setMenuStatus("消息发送失败,请重试",1);
|
|
|
-// JOptionPane.showMessageDialog(mesClientFrame, "消息发送失败,请重试", "提示窗口", JOptionPane.INFORMATION_MESSAGE);
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- MesClient.setMenuStatus("请扫工件码",1);
|
|
|
-// JOptionPane.showMessageDialog(mesClientFrame,"请扫工件码","提示窗口", JOptionPane.INFORMATION_MESSAGE);
|
|
|
- }
|
|
|
- } catch (HeadlessException e) {
|
|
|
- e.printStackTrace();
|
|
|
+ //心跳显示图标
|
|
|
+ if(heartBeatIconTimer!=null) {
|
|
|
+ heartBeatIconTimer.cancel();
|
|
|
}
|
|
|
- }
|
|
|
- public static void checkToMes() {
|
|
|
- try {
|
|
|
- if (work_status == 1) {
|
|
|
- if(!S7Util.getShangLiaoOk(s7PLC)){
|
|
|
- //重置上料mes反馈
|
|
|
- S7Util.sendStartMessage(MesClient.s7PLC,false);
|
|
|
- }
|
|
|
- if (tjFlag == 1) {//已扫码,设备未运行--检测设备启动指令
|
|
|
- boolean startMessage = S7Util.getstartMessage(s7PLC);
|
|
|
- if (startMessage) {//设备正常启动
|
|
|
-
|
|
|
- tjFlag = 2;
|
|
|
- MesClient.status_menu.setText(MesClient.tjFlagText2);
|
|
|
- }
|
|
|
- }
|
|
|
- if (tjFlag == 2) {//运行中 --检测设备停止指令
|
|
|
-
|
|
|
- boolean stopMessage = S7Util.getstopMessage(s7PLC);
|
|
|
- if (stopMessage) {//设备正常停止
|
|
|
-
|
|
|
- tjFlag = 3;
|
|
|
- MesClient.status_menu.setText(MesClient.tjFlagText3);
|
|
|
-
|
|
|
- MesClient.finish_ok_bt.setEnabled(true);
|
|
|
- MesClient.finish_ng_bt.setEnabled(true);
|
|
|
-
|
|
|
- S7Util.sendEndMessage(s7PLC,true);
|
|
|
-// if (tjStatus == 0) {
|
|
|
-// //提交结果到MES
|
|
|
-// Boolean ret = DataUtil.sendQuality(MesClient.nettyClient, MesClient.product_sn.getText(), "OK", MesClient.user20);
|
|
|
-// if (!ret) {
|
|
|
-// MesClient.tjStatus = 1; // 未提交成功
|
|
|
-// new MyDialog(MesClient.mesClientFrame, MesClient.tcTitle, MesClient.tjFlagTextErr);
|
|
|
-// }
|
|
|
-// }
|
|
|
- }
|
|
|
- }
|
|
|
- if (tjFlag == 3){
|
|
|
- boolean getstoped = S7Util.getstopMessage(s7PLC);
|
|
|
- if (!getstoped){
|
|
|
- S7Util.sendEndMessage(s7PLC,false);
|
|
|
- //提交结果值MES
|
|
|
- if (tjStatus == 0) {
|
|
|
- //提交结果到MES
|
|
|
- Boolean ret = DataUtil.sendQuality(MesClient.nettyClient, MesClient.product_sn.getText(), "OK", MesClient.user20);
|
|
|
- if (!ret) {
|
|
|
- MesClient.tjStatus = 1; // 未提交成功
|
|
|
- new MyDialog(MesClient.mesClientFrame, MesClient.tcTitle, MesClient.tjFlagTextErr);
|
|
|
- }
|
|
|
- }
|
|
|
+ heartBeatIconTimer = new Timer();
|
|
|
+ heartBeatIconTimer.schedule(new TimerTask() {
|
|
|
+ public void run() {
|
|
|
+ if(tcp_connect_flag) {
|
|
|
+ if(iconREDFlag) {
|
|
|
+ heart_beat_menu.setIcon(new ImageIcon(MesClient.class.getResource("/bg/grey_dot.png")));
|
|
|
+ iconREDFlag = false;
|
|
|
+ }else {
|
|
|
+ heart_beat_menu.setIcon(new ImageIcon(MesClient.class.getResource("/bg/green_dot.png")));
|
|
|
+ iconREDFlag = true;
|
|
|
}
|
|
|
- }
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- }
|
|
|
+ heart_beat_menu.setText(DateLocalUtils.getCurrentTime());
|
|
|
+ heart_beat_menu.repaint();
|
|
|
+ }else {
|
|
|
+ heart_beat_menu.setIcon(new ImageIcon(MesClient.class.getResource("/bg/grey_dot.png")));
|
|
|
+ heart_beat_menu.setText(DateLocalUtils.getCurrentTime());
|
|
|
+ heart_beat_menu.repaint();
|
|
|
|
|
|
+ //若未连接则尝试连接
|
|
|
+ if(nettyClient!=null&&!tcp_connect_flag){
|
|
|
+ System.out.println("TCP已断开");
|
|
|
+ //TCP重新同步连接
|
|
|
+ if(!connect_request_flag) {
|
|
|
+ //System.out.println("TCP重新同步连接");
|
|
|
+ //设置TCP请求状态,只重新同步连接一次
|
|
|
+ connect_request_flag = true;
|
|
|
|
|
|
- public static HashMap<String, String> hashMapParam = new HashMap<>();
|
|
|
- public static void getDeviceStaus() {
|
|
|
- if(cjTimer2!=null) {
|
|
|
- cjTimer2.cancel();
|
|
|
- }
|
|
|
- cjTimer2 = new Timer();
|
|
|
- cjTimer2.schedule(new TimerTask() {
|
|
|
- public void run() {
|
|
|
+ DataUtil.synrTcp(nettyClient,mes_gw);
|
|
|
+ }
|
|
|
|
|
|
- try {
|
|
|
- boolean status = S7Util.getStatus(s7PLC);
|
|
|
- hashMapParam.put("deviceSn", mes_line_sn + mes_gw);
|
|
|
- hashMapParam.put("sn", product_sn.getText());
|
|
|
- if (status) {//正常
|
|
|
- hashMapParam.put("state", "1");
|
|
|
- } else {//故障
|
|
|
- hashMapParam.put("state", "3");
|
|
|
}
|
|
|
- HttpUtils.sendPostRequestJson("http://" + MesClient.mes_server_ip + ":8980/js/a/mes/mesDeviceState/add", JSONObject.toJSONString(hashMapParam));
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- }finally {
|
|
|
- hashMapParam.clear();
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
- }, 10000,10000);
|
|
|
+ }, 100,mes_heart_icon_cycle*1000);
|
|
|
}
|
|
|
|
|
|
- //启动心跳包程序
|
|
|
- public static java.util.Timer heartBeatTimer;
|
|
|
- public static java.util.Timer heartBeatIconTimer;
|
|
|
- public static boolean iconREDFlag = true;
|
|
|
- public static void startHeartBeatTimer() {
|
|
|
- if(heartBeatTimer!=null) {
|
|
|
- heartBeatTimer.cancel();
|
|
|
+ public static java.util.Timer jsTimer;
|
|
|
+ public static Integer jsCount = 0;
|
|
|
+ public static Integer jsFlag = 0; // 0=未关闭 1=已关闭
|
|
|
+ public static void startJsTimer() { // 定时关闭继电器
|
|
|
+ if(jsTimer!=null) {
|
|
|
+ jsTimer.cancel();
|
|
|
}
|
|
|
- heartBeatTimer = new java.util.Timer();
|
|
|
- heartBeatTimer.schedule(new TimerTask() {
|
|
|
+ jsTimer = new java.util.Timer();
|
|
|
+ jsTimer.schedule(new TimerTask() {
|
|
|
public void run() {
|
|
|
- if(nettyClient!=null&&tcp_connect_flag) {
|
|
|
- //System.out.println("发送心跳报文");
|
|
|
- DataUtil.heartBeat(nettyClient,mes_gw);
|
|
|
-
|
|
|
- heart_beat_menu.setText(DateLocalUtils.getCurrentTime());
|
|
|
+ if(work_status == 1) {
|
|
|
+ jsCount++;
|
|
|
+ if(jsCount > 2*60 && jsFlag == 0){
|
|
|
+ ModbusRtu.closeDevice(serialPort);
|
|
|
+ jsFlag = 1;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- }, 100,mes_heart_beat_cycle*1000);
|
|
|
+ }, 100,1000);
|
|
|
|
|
|
//心跳显示图标
|
|
|
if(heartBeatIconTimer!=null) {
|
|
|
@@ -448,12 +296,7 @@ public class MesClient extends JFrame {
|
|
|
}
|
|
|
|
|
|
public static void resetScanA() {
|
|
|
- scan_mark=1;
|
|
|
- shangLiaoOStatus=false;
|
|
|
- scan_status=0;
|
|
|
work_status = 0;
|
|
|
- tjFlag = 0;
|
|
|
- tjStatus = 0; //恢复提交状态
|
|
|
check_quality_result = false;
|
|
|
// MesClient.start_work_bt.setVisible(false);
|
|
|
// MesClient.finish_ng_bt.setVisible(false);
|
|
|
@@ -464,43 +307,23 @@ public class MesClient extends JFrame {
|
|
|
|
|
|
MesClient.f_scan_data_bt_1.setEnabled(true);
|
|
|
// DataUtil.stopWork(sessionid);
|
|
|
- MesClient.setMenuStatus("MES等待上料信号",0);
|
|
|
-
|
|
|
- S7Util.sendStartMessage(s7PLC,false);
|
|
|
- S7Util.sendEndMessage(s7PLC,false);
|
|
|
+ MesClient.status_menu.setText("请扫工件码");
|
|
|
// product_result_text.setText("");
|
|
|
// work_status_text.setText("");
|
|
|
- shiftUserCheck();
|
|
|
+// MesClient.setMenuStatus("上件牙套数据个数不符合要求",-1);
|
|
|
+
|
|
|
+ MesClient.checkState = false;
|
|
|
+ MesClient.jsFlag = 0;
|
|
|
+ MesClient.jsCount = 0;
|
|
|
+// MesClient.formatDeviceState();
|
|
|
+ ModbusRtu.closeDevice(serialPort);
|
|
|
+ updateMaterailData();
|
|
|
}
|
|
|
|
|
|
- public static int userLoginHours;//用户登录所处小时
|
|
|
- //换班用户信息检查
|
|
|
- private static void shiftUserCheck() {
|
|
|
- LocalDateTime now = LocalDateTime.now();
|
|
|
- // 判断时间范围
|
|
|
- if (userLoginHours >= 8 && userLoginHours < 20) {
|
|
|
+ public static void resetScanB() {
|
|
|
|
|
|
- int hour = now.getHour();
|
|
|
- if (hour >= 20 || hour < 8) {
|
|
|
- logoff();
|
|
|
- }
|
|
|
- } else {
|
|
|
- int hour = now.getHour();
|
|
|
- if (hour >= 8 && hour < 20) {
|
|
|
- logoff();
|
|
|
- }
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- public static void setMenuStatus(String msg,int error){
|
|
|
- if(error == 0){
|
|
|
- MesClient.status_menu.setForeground(Color.GREEN);
|
|
|
- }else{
|
|
|
- MesClient.status_menu.setForeground(Color.RED);
|
|
|
- }
|
|
|
- MesClient.status_menu.setText(msg);
|
|
|
- }
|
|
|
//获取用户20位
|
|
|
public static void getUser() {
|
|
|
user20 = user_menu.getText().toString();
|
|
|
@@ -530,7 +353,6 @@ public class MesClient extends JFrame {
|
|
|
return barcodeRet;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
public static void scanBarcode() {
|
|
|
if(work_status == 1){
|
|
|
JOptionPane.showMessageDialog(mesClientFrame,"工作中,勿扫码","提示窗口", JOptionPane.INFORMATION_MESSAGE);
|
|
|
@@ -646,61 +468,11 @@ public class MesClient extends JFrame {
|
|
|
@Override
|
|
|
public void mousePressed(MouseEvent e) {
|
|
|
super.mouseClicked(e);
|
|
|
- cjTimer=null;
|
|
|
resetScanA();
|
|
|
}
|
|
|
});
|
|
|
settingMenu.add(resetTcpMenu_1);
|
|
|
|
|
|
- JMenuItem recoverMenu = new JMenuItem("恢复");
|
|
|
- recoverMenu.setIcon(new ImageIcon(MesClient.class.getResource("/bg/reset_logo.png")));
|
|
|
- recoverMenu.setFont(new Font("微软雅黑", Font.PLAIN, 20));
|
|
|
- recoverMenu.addMouseListener(new MouseAdapter() {
|
|
|
- @Override
|
|
|
- public void mousePressed(MouseEvent e) {
|
|
|
- super.mouseClicked(e);
|
|
|
- cjTimer.cancel();
|
|
|
-
|
|
|
- resetScanA();
|
|
|
- }
|
|
|
- });
|
|
|
- settingMenu.add(recoverMenu);
|
|
|
-
|
|
|
- JMenu robot = new JMenu("机器人");
|
|
|
- //settingMenu.setVisible(false);
|
|
|
- robot.setIcon(new ImageIcon(MesClient.class.getResource("/bg/menu_setting.png")));
|
|
|
- robot.setFont(new Font("微软雅黑", Font.PLAIN, 20));
|
|
|
- menuBar.add(robot);
|
|
|
-
|
|
|
- JMenuItem xiaLiaoBack = new JMenuItem("下料反馈");
|
|
|
- xiaLiaoBack.setIcon(new ImageIcon(MesClient.class.getResource("/bg/reset_logo.png")));
|
|
|
- xiaLiaoBack.setFont(new Font("微软雅黑", Font.PLAIN, 20));
|
|
|
- xiaLiaoBack.addMouseListener(new MouseAdapter() {
|
|
|
- @Override
|
|
|
- public void mousePressed(MouseEvent e) {
|
|
|
- //下料反馈-true
|
|
|
- S7Util.sendEndMessage(s7PLC,true);
|
|
|
- boolean result = S7Util.readEndMessage(s7PLC);
|
|
|
- if (result){
|
|
|
- JOptionPane.showMessageDialog(mesClientFrame,"发送下料反馈成功","提示窗口", JOptionPane.INFORMATION_MESSAGE);
|
|
|
-
|
|
|
- }else{
|
|
|
- JOptionPane.showMessageDialog(mesClientFrame,"发送下料反馈失败","提示窗口", JOptionPane.INFORMATION_MESSAGE);
|
|
|
- }
|
|
|
- ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
|
|
|
-
|
|
|
- // 安排一个延时任务执行并在执行后关闭调度器
|
|
|
- scheduler.schedule(() -> {
|
|
|
- try {
|
|
|
- resetScanA();
|
|
|
- } finally {
|
|
|
- scheduler.shutdown();
|
|
|
- }
|
|
|
- }, 5, TimeUnit.SECONDS);
|
|
|
- }
|
|
|
- });
|
|
|
- robot.add(xiaLiaoBack);
|
|
|
-
|
|
|
contentPane = new JPanel();
|
|
|
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
|
|
|
setContentPane(contentPane);
|
|
|
@@ -793,11 +565,8 @@ public class MesClient extends JFrame {
|
|
|
f_scan_data_bt_1 = new JButton("扫码");
|
|
|
f_scan_data_bt_1.addActionListener(new ActionListener() {
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
- scan_mark = 1;
|
|
|
-// testStaus=true;
|
|
|
-// scan_type = 1;
|
|
|
-// product_sn.setText("");
|
|
|
- // scanBarcode();
|
|
|
+ scan_type = 1;
|
|
|
+ scanBarcode();
|
|
|
}
|
|
|
});
|
|
|
f_scan_data_bt_1.setIcon(new ImageIcon(MesClient.class.getResource("/bg/scan_barcode.png")));
|
|
|
@@ -824,8 +593,7 @@ public class MesClient extends JFrame {
|
|
|
String qret = "OK";
|
|
|
Boolean sendret = DataUtil.sendQuality(nettyClient,sn,qret,user20);
|
|
|
if(!sendret){
|
|
|
- MesClient.setMenuStatus("消息发送失败,请重试",1);
|
|
|
-// JOptionPane.showMessageDialog(mesClientFrame,"消息发送失败,请重试","提示窗口", JOptionPane.INFORMATION_MESSAGE);
|
|
|
+ JOptionPane.showMessageDialog(mesClientFrame,"消息发送失败,请重试","提示窗口", JOptionPane.INFORMATION_MESSAGE);
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
@@ -848,8 +616,7 @@ public class MesClient extends JFrame {
|
|
|
String qret = "NG";
|
|
|
Boolean sendret = DataUtil.sendQuality(nettyClient,sn,qret,user20);
|
|
|
if(!sendret){
|
|
|
- MesClient.setMenuStatus("消息发送失败,请重试",1);
|
|
|
-// JOptionPane.showMessageDialog(mesClientFrame,"消息发送失败,请重试","提示窗口", JOptionPane.INFORMATION_MESSAGE);
|
|
|
+ JOptionPane.showMessageDialog(mesClientFrame,"消息发送失败,请重试","提示窗口", JOptionPane.INFORMATION_MESSAGE);
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
@@ -887,39 +654,58 @@ public class MesClient extends JFrame {
|
|
|
int selectedIndex = tabbedPane.getSelectedIndex();
|
|
|
System.out.println("selectedIndex:"+selectedIndex);
|
|
|
|
|
|
- if(selectedIndex == 1){
|
|
|
+ if(selectedIndex == 0){
|
|
|
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- // 绑定物料批次码
|
|
|
- public static void scanBatchSn(BindMaterialResp bindMaterialResp) {
|
|
|
- //弹窗扫工件码
|
|
|
- String scanBarcodeTitle = "请扫物料:"+bindMaterialResp.getMaterialTitle();
|
|
|
- String scanBarcode = JOptionPane.showInputDialog(null, scanBarcodeTitle);
|
|
|
- if(scanBarcode!=null&&!scanBarcode.equalsIgnoreCase("")) {
|
|
|
+ public static void setMenuStatus(String msg,int error){
|
|
|
+ if(error == 0){
|
|
|
+ MesClient.status_menu.setForeground(Color.GREEN);
|
|
|
+ }else{
|
|
|
+ MesClient.status_menu.setForeground(Color.RED);
|
|
|
+ }
|
|
|
+ MesClient.status_menu.setText(msg);
|
|
|
+ }
|
|
|
|
|
|
- JSONObject retObj = DataUtil.saveBindMaterail(scanBarcode,bindMaterialResp.getCraft(),bindMaterialResp.getMaterialId(),bindMaterialResp.getType());
|
|
|
- if(retObj.get("result")!=null&&retObj.get("result").toString().equalsIgnoreCase("true")) {
|
|
|
- MesClient.setMenuStatus("扫物料:"+bindMaterialResp.getMaterialTitle()+"成功",0);
|
|
|
- updateMaterailData();
|
|
|
- }else{
|
|
|
- if(retObj.get("result")==null){
|
|
|
- MesClient.setMenuStatus("请求失败,请重试",-1);
|
|
|
+ // 格式化设备启动状态
|
|
|
+ public static void formatDeviceState(){
|
|
|
+ try{
|
|
|
+ if(MesClient.checkState){ // 检查物料是否已绑定
|
|
|
+ if(rowData == null){
|
|
|
+ ModbusRtu.openDevice(serialPort);
|
|
|
}else{
|
|
|
- if(retObj.get("result").toString().equalsIgnoreCase("false")){
|
|
|
- MesClient.setMenuStatus(retObj.getString("message"),-1);
|
|
|
+ // 判断物料是否可启动
|
|
|
+ int flag = 0;
|
|
|
+ int i = 0;
|
|
|
+ for (Object object:rowData){
|
|
|
+ Integer times = Integer.valueOf(String.valueOf(rowData[i][2]));
|
|
|
+ if(times < 1){
|
|
|
+ flag = 1;
|
|
|
+ }
|
|
|
+ i++;
|
|
|
+ }
|
|
|
+ if(flag == 1){ // 不能启动
|
|
|
+ ModbusRtu.closeDevice(serialPort);
|
|
|
+ }else{
|
|
|
+ // 可启动
|
|
|
+ ModbusRtu.openDevice(serialPort);
|
|
|
}
|
|
|
}
|
|
|
+ }else{
|
|
|
+ //不能启动
|
|
|
+ ModbusRtu.closeDevice(serialPort);
|
|
|
}
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public static void getMaterailData(){
|
|
|
JSONObject retObj = DataUtil.getBindMaterail();
|
|
|
- if(retObj.get("result")!=null && retObj.get("result").toString().equalsIgnoreCase("true")) {
|
|
|
+ if(retObj.get("result")!=null&&retObj.get("result").toString().equalsIgnoreCase("true")) {
|
|
|
java.util.List<BindMaterialResp> arrs = retObj.getList("data",BindMaterialResp.class);
|
|
|
int i = 0;
|
|
|
rowData = new Object[arrs.size()][7];
|
|
|
@@ -937,6 +723,51 @@ public class MesClient extends JFrame {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public static void updateMaterailData(){
|
|
|
+ JSONObject retObj = DataUtil.getBindMaterail();
|
|
|
+ if(retObj.get("result")!=null&&retObj.get("result").toString().equalsIgnoreCase("true")) {
|
|
|
+ List<BindMaterialResp> arrs = retObj.getList("data",BindMaterialResp.class);
|
|
|
+
|
|
|
+ int i = 0;
|
|
|
+ for (BindMaterialResp bindMaterialResp:arrs){
|
|
|
+ rowData[i][0] = bindMaterialResp.getMaterialTitle();
|
|
|
+ rowData[i][1] = bindMaterialResp.getBatchSn();
|
|
|
+ rowData[i][2] = bindMaterialResp.getLastTimes();
|
|
|
+ rowData[i][3] = "";
|
|
|
+ rowData[i][4] = bindMaterialResp.getCraft();
|
|
|
+ rowData[i][5] = bindMaterialResp.getMaterialId();
|
|
|
+ rowData[i][6] = bindMaterialResp.getType();
|
|
|
+ i++;
|
|
|
+ }
|
|
|
+
|
|
|
+ MesClient.table.repaint();
|
|
|
+ MesClient.formatDeviceState();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 绑定物料批次码
|
|
|
+ public static void scanBatchSn(BindMaterialResp bindMaterialResp) {
|
|
|
+ //弹窗扫工件码
|
|
|
+ String scanBarcodeTitle = "请扫物料:"+bindMaterialResp.getMaterialTitle();
|
|
|
+ String scanBarcode = JOptionPane.showInputDialog(null, scanBarcodeTitle);
|
|
|
+ if(scanBarcode!=null&&!scanBarcode.equalsIgnoreCase("")) {
|
|
|
+
|
|
|
+ JSONObject retObj = DataUtil.saveBindMaterail(scanBarcode,bindMaterialResp.getCraft(),bindMaterialResp.getMaterialId(),bindMaterialResp.getType());
|
|
|
+ if(retObj.get("result")!=null&&retObj.get("result").toString().equalsIgnoreCase("true")) {
|
|
|
+ MesClient.setMenuStatus("扫物料:"+bindMaterialResp.getMaterialTitle()+"成功",0);
|
|
|
+ updateMaterailData();
|
|
|
+ }else{
|
|
|
+ if(retObj.get("result")==null){
|
|
|
+ MesClient.setMenuStatus("请求失败,请重试",-1);
|
|
|
+ }else{
|
|
|
+ if(retObj.get("result").toString().equalsIgnoreCase("false")){
|
|
|
+ MesClient.setMenuStatus(retObj.getString("message"),-1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
public static void bindBatchPanel(){
|
|
|
JPanel indexPanelBB = new JPanel();
|
|
|
JPanel panel = new JPanel();
|
|
|
@@ -969,24 +800,4 @@ public class MesClient extends JFrame {
|
|
|
tabbedPane.addTab("绑定物料", new ImageIcon(MesClient.class.getResource("/bg/menu_data_preprocess.png")), indexScrollPaneB, null);
|
|
|
}
|
|
|
|
|
|
- public static void updateMaterailData(){
|
|
|
- JSONObject retObj = DataUtil.getBindMaterail();
|
|
|
- if(retObj.get("result")!=null&&retObj.get("result").toString().equalsIgnoreCase("true")) {
|
|
|
- List<BindMaterialResp> arrs = retObj.getList("data",BindMaterialResp.class);
|
|
|
-
|
|
|
- int i = 0;
|
|
|
- for (BindMaterialResp bindMaterialResp:arrs){
|
|
|
- rowData[i][0] = bindMaterialResp.getMaterialTitle();
|
|
|
- rowData[i][1] = bindMaterialResp.getBatchSn();
|
|
|
- rowData[i][2] = bindMaterialResp.getLastTimes();
|
|
|
- rowData[i][3] = "";
|
|
|
- rowData[i][4] = bindMaterialResp.getCraft();
|
|
|
- rowData[i][5] = bindMaterialResp.getMaterialId();
|
|
|
- rowData[i][6] = bindMaterialResp.getType();
|
|
|
- i++;
|
|
|
- }
|
|
|
-
|
|
|
- MesClient.table.repaint();
|
|
|
- }
|
|
|
- }
|
|
|
}
|