|
|
@@ -125,6 +125,14 @@ public class WorkJPanel70Xh extends JPanel {
|
|
|
|
|
|
public String cacheName = "";
|
|
|
|
|
|
+ public static final int SN_LENGTH = 16; // 工件码长度
|
|
|
+
|
|
|
+ // 手动输入(测试用,模拟扫码枪),由 设置->扫码手动输入 开关控制显示
|
|
|
+ public JLabel manualLabel;
|
|
|
+ public JTextField manualSnField;
|
|
|
+ public JButton manualSubmitBtn;
|
|
|
+ public volatile String pendingManualSn = ""; // 待使用的手动码,下次扫码请求时消费
|
|
|
+
|
|
|
public WorkJPanel70Xh(String position){
|
|
|
this("OP080", position); // 默认反面换型台(原OP070配置)
|
|
|
}
|
|
|
@@ -313,6 +321,29 @@ public class WorkJPanel70Xh extends JPanel {
|
|
|
transfertodevicelabel.setBounds(workWidth*2/3, 150, workWidth/3, 30);
|
|
|
this.add(transfertodevicelabel);
|
|
|
|
|
|
+ // 手动输入行(占用原加工行位置,该行在换型台未使用)
|
|
|
+ manualLabel = new JLabel("手动");
|
|
|
+ manualLabel.setHorizontalAlignment(SwingConstants.CENTER);
|
|
|
+ manualLabel.setForeground(Color.BLACK);
|
|
|
+ manualLabel.setFont(new Font("微软雅黑", Font.PLAIN, 20));
|
|
|
+ manualLabel.setBounds(0, 100, workWidth/5, 40);
|
|
|
+ this.add(manualLabel);
|
|
|
+
|
|
|
+ manualSnField = new JTextField("");
|
|
|
+ manualSnField.setHorizontalAlignment(SwingConstants.CENTER);
|
|
|
+ manualSnField.setForeground(Color.BLACK);
|
|
|
+ manualSnField.setFont(new Font("微软雅黑", Font.PLAIN, 16));
|
|
|
+ manualSnField.setBounds(workWidth/5, 100, workWidth*3/5, 40);
|
|
|
+ manualSnField.addActionListener(e -> submitManualSn()); // 回车提交
|
|
|
+ this.add(manualSnField);
|
|
|
+
|
|
|
+ manualSubmitBtn = new JButton("确认");
|
|
|
+ manualSubmitBtn.setFont(new Font("微软雅黑", Font.PLAIN, 22));
|
|
|
+ manualSubmitBtn.setBounds(workWidth*4/5 + 10, 100, workWidth/5 - 10, 40);
|
|
|
+ manualSubmitBtn.addActionListener(e -> submitManualSn());
|
|
|
+ this.add(manualSubmitBtn);
|
|
|
+
|
|
|
+ setManualMode(MesClient.manualScanEnabled);
|
|
|
|
|
|
formatElementUI();
|
|
|
startOprnoTimer();
|
|
|
@@ -450,13 +481,47 @@ public class WorkJPanel70Xh extends JPanel {
|
|
|
}, 100,1500);
|
|
|
}
|
|
|
|
|
|
+ // 显示/隐藏手动输入行;关闭时丢弃未使用的手动码
|
|
|
+ public void setManualMode(boolean enabled){
|
|
|
+ manualLabel.setVisible(enabled);
|
|
|
+ manualSnField.setVisible(enabled);
|
|
|
+ manualSubmitBtn.setVisible(enabled);
|
|
|
+ if(enabled){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ manualSnField.setText("");
|
|
|
+ if(!pendingManualSn.isEmpty()){
|
|
|
+ pendingManualSn = "";
|
|
|
+ setMenuStatus("已关闭手动输入,未使用的手动码已丢弃", 0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 提交手动码:校验长度后挂起,等下一次扫码请求时当作扫码结果
|
|
|
+ public void submitManualSn(){
|
|
|
+ String sn = manualSnField.getText().trim();
|
|
|
+ if(sn.length() != SN_LENGTH){
|
|
|
+ setMenuStatus("手动码需为"+SN_LENGTH+"位,当前"+sn.length()+"位", -1);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ pendingManualSn = sn;
|
|
|
+ manualSnField.setText("");
|
|
|
+ log.info(oprno+pos+"手动输入工件码:"+sn+",操作人:"+MesClient.user_menu.getText());
|
|
|
+ setMenuStatus("手动码已就绪,等待扫码请求:"+sn, 0);
|
|
|
+ }
|
|
|
+
|
|
|
public void barCode2(){
|
|
|
- String sn = readQrcode();
|
|
|
- log.info("真扫码执行:"+sn);
|
|
|
+ // 有手动码时优先使用并跳过本次扫码枪,用完即清;无手动码时扫码枪照常工作
|
|
|
+ String manualSn = pendingManualSn;
|
|
|
+ boolean isManual = !manualSn.isEmpty();
|
|
|
+ if(isManual){
|
|
|
+ pendingManualSn = "";
|
|
|
+ }
|
|
|
+ String sn = isManual ? manualSn : readQrcode();
|
|
|
+ log.info((isManual ? "手动码执行:" : "真扫码执行:")+sn);
|
|
|
MesClient.preSn = sn.trim(); //存为全局码
|
|
|
log.info("全局码结果:"+MesClient.preSn);
|
|
|
MesClient.setMenuStatus("工件码:"+sn, 0);
|
|
|
- if(sn.length() != 19){
|
|
|
+ if(sn.length() != SN_LENGTH){
|
|
|
//TODO 无扫码结果
|
|
|
// MesClient.setMenuStatus("无扫码结果", -1);
|
|
|
}else{
|