diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device/device_driver/DriverTypeEnum.java b/acs/nladmin-system/src/main/java/org/nl/acs/device/device_driver/DriverTypeEnum.java index b8757c595..f5fe32b76 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device/device_driver/DriverTypeEnum.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device/device_driver/DriverTypeEnum.java @@ -67,7 +67,9 @@ public enum DriverTypeEnum { PLUGGING_UNPLUGGING_MACHINE(25,"plugging_unplugging_machine","插拔轴机","station"), - RGV(28,"rgv","rgv","conveyor"); + RGV(28,"rgv","rgv","conveyor"), + + MODBUS_SCANNER(28,"modbus_scanner","modbus扫码器","scanner"); //驱动索引 diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/modbus_scanner/ItemProtocol.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/modbus_scanner/ItemProtocol.java new file mode 100644 index 000000000..9d6653413 --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/modbus_scanner/ItemProtocol.java @@ -0,0 +1,89 @@ +package org.nl.acs.device_driver.basedriver.modbus_scanner; + +import cn.hutool.core.util.StrUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.device.device_driver.standard_inspect.ItemDto; + +import java.util.ArrayList; +import java.util.List; + +@Slf4j +@Data +public class +ItemProtocol { + + //触发就绪 + public static String item_trigger_ready = "trigger_ready"; + //触发完成 + public static String item_trigger_finish = "trigger_finish"; + //条码 + public static String item_barcode = "barcode"; + //下发触发使能 + public static String item_to_trigger_enable = "to_trigger_enable"; + //下发触发 + public static String item_to_trigger = "to_trigger"; + + private ModbusScannerDeviceDriver driver; + + public ItemProtocol(ModbusScannerDeviceDriver driver) { + this.driver = driver; + } + + public int getTrigger_Ready() { + return this.getOpcIntegerValue(item_trigger_ready); + } + + public int getTrigger_Finish() { + return this.getOpcIntegerValue(item_trigger_finish); + } + + public String getBarcode() { + return this.getOpcStringValue(item_barcode); + } + + public int getTo_trigger_Enable() { + return this.getOpcIntegerValue(item_to_trigger_enable); + } + + public int getTo_trigger() { + return this.getOpcIntegerValue(item_to_trigger); + } + + + Boolean isonline; + + public int getOpcIntegerValue(String protocol) { + Integer value = this.driver.getIntegeregerValue(protocol); + if (value == null) { + setIsonline(false); + } else { + setIsonline(true); + return value; + } + return 0; + } + + public String getOpcStringValue(String protocol) { + String value = this.driver.getStringValue(protocol); + if (!StrUtil.isBlank(value)) { + return value; + } + return null; + } + + public static List getReadableItemDtos() { + ArrayList list = new ArrayList<>(); + list.add(new ItemDto(item_trigger_ready, "触发就绪", "10001")); + list.add(new ItemDto(item_trigger_finish, "触发完成", "10002")); + list.add(new ItemDto(item_barcode, "条码", "32006.30L")); + return list; + } + + public static List getWriteableItemDtos() { + ArrayList list = new ArrayList<>(); + list.add(new ItemDto(item_to_trigger_enable, "下发触发使能", "00001")); + list.add(new ItemDto(item_to_trigger, "下发触发", "00002")); + return list; + } +} diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/modbus_scanner/ModbusScannerDefination.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/modbus_scanner/ModbusScannerDefination.java new file mode 100644 index 000000000..47e7cafad --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/modbus_scanner/ModbusScannerDefination.java @@ -0,0 +1,56 @@ +package org.nl.acs.device_driver.basedriver.modbus_scanner; + +import org.nl.acs.device.device_driver.standard_inspect.ItemDto; +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.defination.OpcDeviceDriverDefination; +import org.nl.acs.opc.Device; +import org.nl.acs.opc.DeviceType; +import org.springframework.stereotype.Service; + +import java.util.LinkedList; +import java.util.List; + +@Service +public class ModbusScannerDefination implements OpcDeviceDriverDefination { + @Override + public String getDriverCode() { + return "modbus_scanner"; + } + + @Override + public String getDriverName() { + return "modbus扫码器"; + } + + @Override + public String getDriverDescription() { + return "modbus扫码器"; + } + + @Override + public DeviceDriver getDriverInstance(Device device) { + return (new ModbusScannerDeviceDriver()).setDevice(device).setDriverDefination(this); + } + + @Override + public Class getDeviceDriverType() { + return ModbusScannerDeviceDriver.class; + } + + @Override + public List getFitDeviceTypes() { + List types = new LinkedList(); + types.add(DeviceType.scanner); + return types; + } + + @Override + public List getReadableItemDtos() { + return ItemProtocol.getReadableItemDtos(); + } + + @Override + public List getWriteableItemDtos() { + return ItemProtocol.getWriteableItemDtos(); + } +} diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/modbus_scanner/ModbusScannerDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/modbus_scanner/ModbusScannerDeviceDriver.java new file mode 100644 index 000000000..80be9aaec --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/modbus_scanner/ModbusScannerDeviceDriver.java @@ -0,0 +1,134 @@ +package org.nl.acs.device_driver.basedriver.modbus_scanner; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.FeedLmsRealFailed; +import org.nl.acs.device_driver.RouteableDeviceDriver; +import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; +import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; +import org.nl.acs.log.service.DeviceExecuteLogService; +import org.nl.acs.monitor.DeviceStageMonitor; +import org.nl.acs.opc.Device; +import org.nl.modules.wql.util.SpringContextHolder; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * 扫码器 + */ +@Slf4j +@Data +@RequiredArgsConstructor +public class ModbusScannerDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver, DeviceStageMonitor { + + protected ItemProtocol itemProtocol = new ItemProtocol(this); + private final DeviceExecuteLogService logServer = SpringContextHolder.getBean("deviceExecuteLogServiceImpl"); + + //触发就绪 + private int trigger_ready = 0; + private int last_trigger_ready = 0; + //触发完成 + private int trigger_finish = 0; + private int last_trigger_finish = 0; + //条码 + private String barcode = null; + private String last_barcode = null; + //下发触发使能 + private int to_trigger_enable = 0; + private int last_to_trigger_enable = 0; + //下发触发 + private int to_trigger = 0; + private int last_to_trigger = 0; + + String device_code; + + @Override + public Device getDevice() { + return this.device; + } + + @Override + public void execute() { + + this.device_code = this.getDevice().getDevice_code(); + this.trigger_ready = this.itemProtocol.getTrigger_Ready(); + this.trigger_finish = this.itemProtocol.getTrigger_Finish(); + this.barcode = this.itemProtocol.getBarcode(); + this.to_trigger_enable = this.itemProtocol.getTo_trigger_Enable(); + this.to_trigger = this.itemProtocol.getTo_trigger(); + + if (this.trigger_ready != this.last_trigger_ready) { + if (this.trigger_ready == 0) { + this.writing("to_trigger_enable", "1"); + } + logServer.deviceExecuteLog(this.device_code, "", "", "信号trigger_ready:" + last_trigger_ready + "->" + trigger_ready); + } + if (this.trigger_finish != this.last_trigger_finish) { + if (this.trigger_finish == 1) { + this.writing("to_trigger", "0"); + } + logServer.deviceExecuteLog(this.device_code, "", "", "信号trigger_finish:" + last_trigger_finish + "->" + trigger_finish); + } + if (!StrUtil.equals(this.barcode, this.last_barcode)) { + logServer.deviceExecuteLog(this.device_code, "", "", "信号barcode:" + last_barcode + "->" + barcode); + } + if (this.to_trigger_enable != this.last_to_trigger_enable) { + logServer.deviceExecuteLog(this.device_code, "", "", "信号to_trigger_enable:" + last_to_trigger_enable + "->" + to_trigger_enable); + } + if (this.to_trigger != this.last_to_trigger) { + logServer.deviceExecuteLog(this.device_code, "", "", "信号to_trigger:" + last_to_trigger + "->" + to_trigger); + } + this.last_trigger_ready = this.trigger_ready; + this.last_trigger_finish = this.trigger_finish; + this.last_barcode = this.barcode; + this.last_to_trigger_enable = this.to_trigger_enable; + this.last_to_trigger = this.to_trigger; + } + + + public void writing(Map map) { + DeviceExecuteLogService logServer = SpringContextHolder.getBean("deviceExecuteLogServiceImpl"); + Map itemMap = new LinkedHashMap<>(); + map.forEach((key, value) -> { + if (ObjectUtil.isNotEmpty(value)) { + itemMap.put(getToParam() + key, value); + } + }); + if (ObjectUtil.isNotEmpty(itemMap)) { + this.control(itemMap); + logServer.deviceExecuteLog(this.getDevice().getDevice_code(), "", "", "下发多个电气信号:" + itemMap); + } + } + + public String getToParam() { + return this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + "."; + } + + @Override + public JSONObject getDeviceStatusName() { + Map map = new LinkedHashMap<>(); + JSONObject jo = new JSONObject(map); + return jo; + } + + @Override + public void setDeviceStatus(JSONObject data) { + } + + + 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; + Map itemMap = new HashMap(); + itemMap.put(to_param, Integer.parseInt(value)); + this.control(itemMap); + logServer.deviceExecuteLog(device_code, "", "", "下发电气信号设备号:" + device_code + ",下发电气:" + to_param + ",下发电气值:" + value); + } +} diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java index 89d20b9d2..caa29de39 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java @@ -167,4 +167,10 @@ public class WmsToAcsController { JSONObject jsonObject = jsonArray.getJSONObject(0); return new ResponseEntity<>(wmstoacsService.finishTask(jsonObject),HttpStatus.OK); } + + @PostMapping("/getBarcode") + @SaIgnore + public ResponseEntity getBarcode(@RequestBody JSONObject param){ + return new ResponseEntity<>(wmstoacsService.getBarcode(param), HttpStatus.OK); + } } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java index 2adc0e42d..93aa728df 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java @@ -125,4 +125,6 @@ public interface WmsToAcsService { * @return */ Map finishTask(JSONObject jsonObject) throws Exception; + + Map getBarcode(JSONObject param); } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java index f59d95f11..82b5683fd 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java @@ -28,6 +28,7 @@ import org.nl.acs.device_driver.basedriver.hongxiang_conveyor.HongXiangStationDe import org.nl.acs.device_driver.basedriver.hongxiang_device.HongXiangConveyorDeviceDriver; import org.nl.acs.device_driver.basedriver.indoor_manipulator.IndoorManipulatorDeviceDriver; import org.nl.acs.device_driver.basedriver.lamp_three_color.LampThreecolorDeviceDriver; +import org.nl.acs.device_driver.basedriver.modbus_scanner.ModbusScannerDeviceDriver; import org.nl.acs.device_driver.basedriver.oven_manipulator.OvenGantryManipulatorDeviceDriver; import org.nl.acs.device_driver.basedriver.paper_tube_device.PaperTubeConveyorDeviceDriver; import org.nl.acs.device_driver.basedriver.paper_tube_device2.Paper; @@ -70,6 +71,7 @@ import org.nl.modules.system.service.DictDetailService; import org.nl.modules.system.service.DictService; import org.nl.modules.system.service.ParamService; import org.nl.modules.system.service.dto.DictDetailDto; +import org.nl.modules.system.service.dto.ParamDto; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.exception.WDKException; import org.nl.modules.wql.util.SpringContextHolder; @@ -100,6 +102,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { private final AcsToLiKuService acsToLiKuService; private final DictDetailService dictDetailService; private final DictService dictService; + private final ParamService paramService; private String log_file_type = "log_file_type"; @@ -1539,4 +1542,41 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { return resp; } + @Override + public Map getBarcode(JSONObject param) { + log.info("getBarcode--------------:输入参数" + param.toString()); + Map resp = new HashMap<>(); + String device_code = param.getString("device_code"); + ParamDto paramDto = paramService.findByCode(device_code); + if (paramDto == null) { + throw new BadRequestException("系统参数未配置IN点对应点扫码器!"); + } + String smDeviceCode = paramDto.getValue(); + if (StrUtil.isEmpty(smDeviceCode)) { + throw new BadRequestException("系统参数配置IN点扫码器为空!"); + } + Device device = deviceAppService.findDeviceByCode(smDeviceCode); + if (device != null && device.getDeviceDriver() instanceof ModbusScannerDeviceDriver) { + ModbusScannerDeviceDriver modbusScannerDeviceDriver = (ModbusScannerDeviceDriver) device.getDeviceDriver(); + modbusScannerDeviceDriver.writing("to_trigger", "1"); + try { + Thread.sleep(1500); + } catch (InterruptedException e) { + e.printStackTrace(); + } + device = deviceAppService.findDeviceByCode(smDeviceCode); + modbusScannerDeviceDriver = (ModbusScannerDeviceDriver) device.getDeviceDriver(); + resp.put("status",200); + resp.put("message", "成功"); + resp.put("vehicle_code", modbusScannerDeviceDriver.getBarcode() == null ? "" : modbusScannerDeviceDriver.getBarcode()); + log.info("getBarcode--------------:输出参数" + resp.toString()); + return resp; + } + resp.put("status",200); + resp.put("message", "成功"); + resp.put("vehicle_code", ""); + log.info("getBarcode--------------:输出参数" + resp.toString()); + return resp; + } + } diff --git a/acs/nladmin-ui/src/views/acs/device/config.vue b/acs/nladmin-ui/src/views/acs/device/config.vue index e751fa848..77b5fbb0f 100644 --- a/acs/nladmin-ui/src/views/acs/device/config.vue +++ b/acs/nladmin-ui/src/views/acs/device/config.vue @@ -92,6 +92,7 @@ import siemens_conveyor from '@/views/acs/device/driver/siemens_conveyor' import siemens_weight_conveyor from '@/views/acs/device/driver/siemens_weight_conveyor' import slit_two_manipulator from '@/views/acs/device/driver/slit_two_manipulator' import hongxiang_device from '@/views/acs/device/driver/hongxiang_device' +import modbus_scanner from '@/views/acs/device/driver/modbus_scanner' import hongxiang_conveyor from '@/views/acs/device/driver/hongxiang_conveyor' import plug_pull_device_site from '@/views/acs/device/driver/plug_pull_device_site' import siemens_conveyor_labeling from '@/views/acs/device/driver/siemens_conveyor_labeling' @@ -144,7 +145,8 @@ export default { device_status, indoor_manipulator, plugging_unplugging_machine, - rgv + rgv, + modbus_scanner }, dicts: ['device_type'], mixins: [crud], diff --git a/acs/nladmin-ui/src/views/acs/device/driver/modbus_scanner.vue b/acs/nladmin-ui/src/views/acs/device/driver/modbus_scanner.vue new file mode 100644 index 000000000..fa786110e --- /dev/null +++ b/acs/nladmin-ui/src/views/acs/device/driver/modbus_scanner.vue @@ -0,0 +1,506 @@ + + + + +