From 4cf2aee8ad78c9803e4681105394438df622c2e3 Mon Sep 17 00:00:00 2001 From: "USER-20220102CG\\noblelift" <546428999@qq.com> Date: Thu, 26 May 2022 08:43:05 +0800 Subject: [PATCH] 1 --- .../HaiLiangFeedingTrunkDefination.java | 18 ++++++-- .../HaiLiangFeedingTrunkDeviceDriver.java | 21 +++++++++ .../hailiang_feeding_trunk/ItemProtocol.java | 42 +++++++++++++----- .../rest/ProduceshiftorderController.java | 22 ++++++--- .../service/ProduceshiftorderService.java | 14 +++--- .../org/nl/acs/order/service/wql/order.xls | Bin 191488 -> 191488 bytes 6 files changed, 91 insertions(+), 26 deletions(-) diff --git a/nladmin-system/src/main/java/org/nl/acs/device_driver/hailiang/hailiang_feeding_trunk/HaiLiangFeedingTrunkDefination.java b/nladmin-system/src/main/java/org/nl/acs/device_driver/hailiang/hailiang_feeding_trunk/HaiLiangFeedingTrunkDefination.java index 9e7fadd..abdaaf3 100644 --- a/nladmin-system/src/main/java/org/nl/acs/device_driver/hailiang/hailiang_feeding_trunk/HaiLiangFeedingTrunkDefination.java +++ b/nladmin-system/src/main/java/org/nl/acs/device_driver/hailiang/hailiang_feeding_trunk/HaiLiangFeedingTrunkDefination.java @@ -72,10 +72,22 @@ public class HaiLiangFeedingTrunkDefination implements OpcDeviceDriverDefination list.add(new ItemDto(ItemProtocol.item_detail_strapping_oneqty, "当前工单明细号捆扎根数", "DB600.D44")); list.add(new ItemDto(ItemProtocol.item_detail_coating_qty, "当前工单明细号裹膜数", "DB600.D48")); list.add(new ItemDto(ItemProtocol.item_labeling_order, "当前贴标工单明细号", "DB600.D52")); - list.add(new ItemDto(ItemProtocol.item_detail_rlabeling_qualified_qty, "当前工单明细号刻字数量", "DB600.D56")); - list.add(new ItemDto(ItemProtocol.item_detail_rlabeling_qty, "当前贴标工单明细号贴标数", "DB600.D60")); + list.add(new ItemDto(ItemProtocol.item_detail_labeling_qualified_qty, "当前工单明细号刻字数量", "DB600.D56")); + list.add(new ItemDto(ItemProtocol.item_detail_labeling_qty, "当前贴标工单明细号贴标数", "DB600.D60")); list.add(new ItemDto(ItemProtocol.item_ready, "设备就绪", "DB600.D64")); - + list.add(new ItemDto(ItemProtocol.item_clear, "清料", "DB600.D68")); + list.add(new ItemDto(ItemProtocol.item_pause, "暂停", "DB600.D72")); + list.add(new ItemDto(ItemProtocol.item_line_speed, "线体速度", "DB600.REAL76")); + list.add(new ItemDto(ItemProtocol.item_feeding_mouth, "上料口", "DB600.D80")); + list.add(new ItemDto(ItemProtocol.item_is_lettering, "是否刻字", "DB600.D84")); + list.add(new ItemDto(ItemProtocol.item_is_risking, "是否套冒", "DB600.D88")); + list.add(new ItemDto(ItemProtocol.item_is_coating, "是否裹膜", "DB600.D92")); + list.add(new ItemDto(ItemProtocol.item_is_strapping, "是否捆扎", "DB600.D96")); + list.add(new ItemDto(ItemProtocol.item_is_labeling, "是否贴标", "DB600.D100")); + list.add(new ItemDto(ItemProtocol.item_delay_time, "工段动作延时", "DB600.D104")); + list.add(new ItemDto(ItemProtocol.item_lettering_frequency, "刻字频率", "DB600.D108")); + list.add(new ItemDto(ItemProtocol.item_one_speed, "捆扎裹膜贴标段输送速度", "DB600.REAL112")); + list.add(new ItemDto(ItemProtocol.item_coating_frequency, "裹膜机频率", "DB600.D116")); return list; } diff --git a/nladmin-system/src/main/java/org/nl/acs/device_driver/hailiang/hailiang_feeding_trunk/HaiLiangFeedingTrunkDeviceDriver.java b/nladmin-system/src/main/java/org/nl/acs/device_driver/hailiang/hailiang_feeding_trunk/HaiLiangFeedingTrunkDeviceDriver.java index 3cc2fd8..cba1993 100644 --- a/nladmin-system/src/main/java/org/nl/acs/device_driver/hailiang/hailiang_feeding_trunk/HaiLiangFeedingTrunkDeviceDriver.java +++ b/nladmin-system/src/main/java/org/nl/acs/device_driver/hailiang/hailiang_feeding_trunk/HaiLiangFeedingTrunkDeviceDriver.java @@ -3,13 +3,17 @@ package org.nl.acs.device_driver.hailiang.hailiang_feeding_trunk; import lombok.Data; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.acs.device.device_driver.standard_inspect.ReadUtil; import org.nl.acs.device_driver.DeviceDriver; import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; import org.nl.acs.instruction.service.dto.Instruction; import org.nl.acs.opc.Device; +import org.openscada.opc.lib.da.Server; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * 海亮-上料总线体 @@ -35,6 +39,9 @@ public class HaiLiangFeedingTrunkDeviceDriver extends AbstractOpcDeviceDriver im int last_mode = 0; int last_order = order; int ready = 0; + int pause = 0; + int clear = 0; + @Override public void execute() throws Exception { String message = null; @@ -45,6 +52,9 @@ public class HaiLiangFeedingTrunkDeviceDriver extends AbstractOpcDeviceDriver im order = this.itemProtocol.getOrder(); order_detail = this.itemProtocol.getOrder_detail(); ready = this.itemProtocol.getReady(); + pause = this.itemProtocol.getPause(); + clear = this.itemProtocol.getPause(); + if (mode != last_mode) { this.setRequireSucess(false); } @@ -94,4 +104,15 @@ public class HaiLiangFeedingTrunkDeviceDriver extends AbstractOpcDeviceDriver im return true; } + public void writing(String param, String value) { + String to_param = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + param; + String opcservcerid = this.getDevice().getOpc_server_id(); + Server server = ReadUtil.getServer(opcservcerid); + Map itemMap = new HashMap(); + itemMap.put(to_param, Integer.parseInt(value)); + ReadUtil.write(itemMap, server); + } + + } diff --git a/nladmin-system/src/main/java/org/nl/acs/device_driver/hailiang/hailiang_feeding_trunk/ItemProtocol.java b/nladmin-system/src/main/java/org/nl/acs/device_driver/hailiang/hailiang_feeding_trunk/ItemProtocol.java index c092767..3d44d48 100644 --- a/nladmin-system/src/main/java/org/nl/acs/device_driver/hailiang/hailiang_feeding_trunk/ItemProtocol.java +++ b/nladmin-system/src/main/java/org/nl/acs/device_driver/hailiang/hailiang_feeding_trunk/ItemProtocol.java @@ -35,11 +35,13 @@ public class ItemProtocol { //当前贴标工单明细号 public static String item_labeling_order = "labeling_order"; //当前贴标工单明细号贴标合格数 - public static String item_detail_rlabeling_qualified_qty = "detail_rlabeling_qualified_qty"; + public static String item_detail_labeling_qualified_qty = "detail_labeling_qualified_qty"; //当前贴标工单明细号贴标数 - public static String item_detail_rlabeling_qty = "detail_rlabeling_qty"; + public static String item_detail_labeling_qty = "detail_labeling_qty"; //设备就绪 public static String item_ready = "ready"; + public static String item_clear = "clear"; + public static String item_pause = "pause"; public static String item_line_speed = "line_speed"; public static String item_feeding_mouth = "feeding_mouth"; public static String item_is_lettering = "is_lettering"; @@ -156,20 +158,25 @@ public class ItemProtocol { return this.getOpcIntegerValue(item_labeling_order); } - public int getDetail_rlabeling_qualified_qty() { - return this.getOpcIntegerValue(item_detail_rlabeling_qualified_qty); + public int getDetail_labeling_qualified_qty() { + return this.getOpcIntegerValue(item_detail_labeling_qualified_qty); } - public int getDetail_rlabeling_qty() { - return this.getOpcIntegerValue(item_detail_rlabeling_qty); + public int getDetail_labeling_qty() { + return this.getOpcIntegerValue(item_detail_labeling_qty); } public int getReady() { return this.getOpcIntegerValue(item_ready); } + public int getClear() { + return this.getOpcIntegerValue(item_clear); + } + + - public int getLline_speed() { + public int getLine_speed() { return this.getOpcIntegerValue(item_line_speed); } @@ -213,7 +220,9 @@ public class ItemProtocol { return this.getOpcIntegerValue(item_coating_frequency); } - + public int getPause() { + return this.getOpcIntegerValue(item_pause); + } public int getTo_heartbeat() { return this.getOpcIntegerValue(item_to_heartbeat); @@ -370,9 +379,22 @@ public class ItemProtocol { list.add(new ItemDto(item_detail_strapping_oneqty, "当前工单明细号捆扎根数", "DB600.D44")); list.add(new ItemDto(item_detail_coating_qty, "当前工单明细号裹膜数", "DB600.D48")); list.add(new ItemDto(item_labeling_order, "当前贴标工单明细号", "DB600.D52")); - list.add(new ItemDto(item_detail_rlabeling_qualified_qty, "当前工单明细号刻字数量", "DB600.D56")); - list.add(new ItemDto(item_detail_rlabeling_qty, "当前贴标工单明细号贴标数", "DB600.D60")); + list.add(new ItemDto(item_detail_labeling_qualified_qty, "当前工单明细号刻字数量", "DB600.D56")); + list.add(new ItemDto(item_detail_labeling_qty, "当前贴标工单明细号贴标数", "DB600.D60")); list.add(new ItemDto(item_ready, "设备就绪", "DB600.D64")); + list.add(new ItemDto( item_clear, "清料", "DB600.D68")); + list.add(new ItemDto( item_pause, "暂停", "DB600.D72")); + list.add(new ItemDto(item_line_speed, "线体速度", "DB600.REAL76")); + list.add(new ItemDto(item_feeding_mouth, "上料口", "DB600.D80")); + list.add(new ItemDto(item_is_lettering, "是否刻字", "DB600.D84")); + list.add(new ItemDto(item_is_risking, "是否套冒", "DB600.D88")); + list.add(new ItemDto(item_is_coating, "是否裹膜", "DB600.D92")); + list.add(new ItemDto(item_is_strapping, "是否捆扎", "DB600.D96")); + list.add(new ItemDto(item_is_labeling, "是否贴标", "DB600.D100")); + list.add(new ItemDto(item_delay_time, "工段动作延时", "DB600.D104")); + list.add(new ItemDto(item_lettering_frequency, "刻字频率", "DB600.D108")); + list.add(new ItemDto(item_one_speed, "捆扎裹膜贴标段输送速度", "DB600.REAL112")); + list.add(new ItemDto(item_coating_frequency, "裹膜机频率", "DB600.D116")); return list; } diff --git a/nladmin-system/src/main/java/org/nl/acs/order/rest/ProduceshiftorderController.java b/nladmin-system/src/main/java/org/nl/acs/order/rest/ProduceshiftorderController.java index 17726b0..c6bd986 100644 --- a/nladmin-system/src/main/java/org/nl/acs/order/rest/ProduceshiftorderController.java +++ b/nladmin-system/src/main/java/org/nl/acs/order/rest/ProduceshiftorderController.java @@ -86,7 +86,7 @@ public class ProduceshiftorderController { @Log("工单分拣") @ApiOperation("下发工单") - @PostMapping(value = "/工单分拣") + @PostMapping(value = "/send") public ResponseEntity send(@RequestBody String id) { produceshiftorderService.send(id); return new ResponseEntity<>(HttpStatus.OK); @@ -111,24 +111,32 @@ public class ProduceshiftorderController { @Log("工单暂停") @ApiOperation("工单暂停") @PostMapping(value = "/order_pause") - public ResponseEntity order_pause(@RequestBody String id) { - produceshiftorderService.order_pause(id); + public ResponseEntity order_pause(@Validated @RequestBody Map whereJson) { + produceshiftorderService.order_pause(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + + @Log("工单明细暂停") + @ApiOperation("工单明细暂停") + @PostMapping(value = "/detail_pause") + public ResponseEntity detail_pause(@Validated @RequestBody Map whereJson) { + produceshiftorderService.detail_pause(whereJson); return new ResponseEntity<>(HttpStatus.OK); } @Log("工单强制完成") @ApiOperation("工单强制完成") @PostMapping(value = "/order_force_complete") - public ResponseEntity order_force_complete(@RequestBody String id) { - produceshiftorderService.order_force_complete(id); + public ResponseEntity order_force_complete(@Validated @RequestBody Map whereJson) { + produceshiftorderService.order_force_complete(whereJson); return new ResponseEntity<>(HttpStatus.OK); } @Log("工单明细强制完成") @ApiOperation("工单明细强制完成") @PostMapping(value = "/detail_force_complete") - public ResponseEntity detail_force_complete(@RequestBody String id) { - produceshiftorderService.detail_force_complete(id); + public ResponseEntity detail_force_complete(@Validated @RequestBody Map whereJson) { + produceshiftorderService.detail_force_complete(whereJson); return new ResponseEntity<>(HttpStatus.OK); } diff --git a/nladmin-system/src/main/java/org/nl/acs/order/service/ProduceshiftorderService.java b/nladmin-system/src/main/java/org/nl/acs/order/service/ProduceshiftorderService.java index af8085a..4d764f1 100644 --- a/nladmin-system/src/main/java/org/nl/acs/order/service/ProduceshiftorderService.java +++ b/nladmin-system/src/main/java/org/nl/acs/order/service/ProduceshiftorderService.java @@ -129,25 +129,27 @@ public interface ProduceshiftorderService { /** * 工单暂停 * - * @param id / */ - void order_pause(String id); + void order_pause(Map whereJson); + /** + * 明细暂停 + * + */ + void detail_pause(Map whereJson); /** * 工单强制完成 * - * @param id / */ - void order_force_complete(String id); + void order_force_complete(Map whereJson); /** * 工单明细强制完成 * - * @param id / */ - void detail_force_complete(String id); + void detail_force_complete(Map whereJson); diff --git a/nladmin-system/src/main/java/org/nl/acs/order/service/wql/order.xls b/nladmin-system/src/main/java/org/nl/acs/order/service/wql/order.xls index 5b75b2be893238ab4fa79507c9f1f73e3b684421..cbbe8432d5863dac469a1fac5fa8d87a96337ca3 100644 GIT binary patch delta 6064 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 F{{g9@ahd=C delta 6023 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