//package com.zy.acs.wcs.core.thread;
|
//
|
//import com.core.common.SpringUtils;
|
//import com.zy.asrs.entity.CommandInfo;
|
//import com.zy.asrs.service.CommandInfoService;
|
//import com.zy.asrs.service.DeviceErrorService;
|
//import com.zy.common.model.MatDto;
|
//import com.zy.acs.wcs.core.Slave;
|
//import com.zy.acs.wcs.core.ThreadHandler;
|
//import com.zy.acs.wcs.core.cache.MessageQueue;
|
//import com.zy.acs.wcs.core.enums.CommandStatusType;
|
//import com.zy.acs.wcs.core.enums.SlaveType;
|
//import com.zy.acs.wcs.core.model.Task;
|
//import com.zy.acs.wcs.core.model.command.LedCommand;
|
//import lombok.Data;
|
//import lombok.extern.slf4j.Slf4j;
|
//import onbon.bx05.Bx5GEnv;
|
//import onbon.bx05.Bx5GException;
|
//import onbon.bx05.Bx5GScreen;
|
//import onbon.bx05.Bx5GScreenClient;
|
//import onbon.bx05.area.TextCaptionBxArea;
|
//import onbon.bx05.area.page.TextBxPage;
|
//import onbon.bx05.file.ProgramBxFile;
|
//import onbon.bx05.message.led.ReturnControllerStatus;
|
//import onbon.bx05.utils.DisplayStyleFactory;
|
//
|
//import java.awt.*;
|
//import java.util.HashSet;
|
//import java.util.List;
|
//import java.util.Set;
|
//
|
///**
|
// * Created by vincent on 2020/9/1
|
// */
|
//@Data
|
//@Slf4j
|
//public class LedThread implements Runnable, ThreadHandler {
|
//
|
// ProgramBxFile pf;
|
// TextCaptionBxArea area;
|
// DisplayStyleFactory.DisplayStyle[] styles = DisplayStyleFactory.getStyles().toArray(new DisplayStyleFactory.DisplayStyle[0]);
|
// private Slave slave;
|
// private Bx5GScreenClient screen;
|
// private Set<Integer> workNos = new HashSet<>();
|
// private boolean ledMk = false;
|
// private boolean resetStatus = false; // 复位状态
|
//
|
// public LedThread(Slave slave) {
|
// this.slave = slave;
|
// try {
|
// Bx5GEnv.initial(3000);
|
// screen = new Bx5GScreenClient("my");
|
// } catch (Exception e) {
|
// e.printStackTrace();
|
// log.info("led连接构造器错误 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
|
// }
|
// }
|
//
|
// public static void main(String[] args) throws Exception {
|
// String strQty = "1234";
|
// int index = strQty.lastIndexOf(".");
|
// if (index >= 0) {
|
// strQty = strQty.substring(0, index);
|
// }
|
// System.out.println("2==>>" + strQty);
|
//
|
// Bx5GEnv.initial(3000);
|
// Bx5GScreenClient screen = new Bx5GScreenClient("my");
|
// DisplayStyleFactory.DisplayStyle[] styles = DisplayStyleFactory.getStyles().toArray(new DisplayStyleFactory.DisplayStyle[0]);
|
// if (!screen.connect("192.168.10.101", 5005)) {
|
// System.err.println("连接失败!!!!");
|
// return;
|
// }
|
// screen.turnOn();
|
//
|
//
|
// while (true) {
|
// Thread.sleep(5000L);
|
//
|
// ProgramBxFile pf = new ProgramBxFile(0, screen.getProfile());
|
// pf.setFrameShow(false);
|
// // 分别输入X,Y,width,heigth
|
// TextCaptionBxArea area = new TextCaptionBxArea(0, 0, 192, 96, screen.getProfile());
|
//
|
// // 创建一个数据页
|
// // 第一行数据
|
// TextBxPage page = new TextBxPage("出库任务(303)");
|
// page.newLine("源库位:0100204");
|
// page.newLine("目标站:1000");
|
// // 设置字体
|
// page.setFont(new Font("宋体", Font.PLAIN, 15));
|
// // 设置文本颜色
|
// page.setForeground(Color.red);
|
// // 设置显示特技为快速打出
|
// page.setDisplayStyle(styles[6]);
|
// area.clearPages();
|
// area.addPage(page);
|
// pf.addArea(area);
|
//
|
// // 更新节目
|
// // 更新节目
|
// if (pf.validate() != null) {
|
// System.out.println("pf out of range");
|
// log.info("pf out of range");
|
// } else {
|
// // 更新节目
|
// screen.writeProgram(pf);
|
// }
|
// }
|
//
|
// // 继开与控制器之间的链接
|
//// screen.disconnect();
|
// }
|
//
|
// public static void main1(String[] args) throws Exception {
|
// Bx5GEnv.initial(3000);
|
// // 创建screen对象,用于对控制器进行访问,客户端模式
|
// Bx5GScreenClient screen = new Bx5GScreenClient("my");
|
// // 创建screen对象,用于对控制器进行访问,串口模式
|
// // Bx5GScreenRS screen = new Bx5GScreenRS("MyScreen");
|
//
|
// // 在对控制器交互之前,需要先与控制器建立连接
|
// boolean conn = screen.connect("192.168.10.61", 5005);
|
// System.out.println(conn);
|
// // 与控制器交互完成后,需断开与控制器之间的连接
|
//// screen.disconnect();
|
//
|
// // 以下为一些简单控制命令的使用方法
|
// // 开关机命令
|
//// screen.turnOff();// 关机
|
// screen.turnOn();// 开机
|
//// screen.syncTime();// 校时
|
//// screen.ping();// ping命令
|
//// // 查询控制器状态
|
//// screen.checkControllerStatus();
|
//// // 查询控制器当前固件版本
|
//// screen.checkFirmware();
|
//// // 查询控制器内存
|
//// screen.checkMemVolumes();
|
//// // 锁定屏幕当前画面
|
//// screen.lock();
|
//// // 解除锁定屏幕当前画面
|
//// screen.unlock();
|
//
|
// Bx5GScreen.Result<ReturnControllerStatus> result1 =
|
// screen.checkControllerStatus();
|
// if (result1.isOK()) {
|
// ReturnControllerStatus status = result1.reply;
|
// System.out.println(status.getBrightness());
|
// System.out.println(status.getRtcDay());
|
// System.out.println(status.getScreenOnOff());
|
// //
|
// // status 还有很对其他接口,可以根据实际需求再次调用以获取相应状态
|
// }
|
//
|
////
|
// // 以下是静态区部分 Demo
|
//
|
// // 创建节目文件
|
// ProgramBxFile pf = new ProgramBxFile(0, screen.getProfile());
|
//// 是否显示节目边框
|
// pf.setFrameShow(true);
|
//// 节目边框的移动速度
|
// pf.setFrameSpeed(20);
|
//// 使用第几个内置边框
|
// pf.loadFrameImage(13);
|
//
|
// DisplayStyleFactory.DisplayStyle[] styles = DisplayStyleFactory.getStyles().toArray(new DisplayStyleFactory.DisplayStyle[0]);
|
//// 创建一个文本区
|
// // 分别输入X,Y,width,heigth
|
// // 注意区域坐标和宽度高度,不要越界
|
// TextCaptionBxArea area = new TextCaptionBxArea(0, 0, 160, 64, screen.getProfile());
|
//
|
// // 创建一个数据页
|
// // 第一行数据
|
// TextBxPage page = new TextBxPage("入库");
|
// // 第二行数据
|
// page.newLine("物料:");
|
// page.newLine("接收器 RX18 XH 6V (数量:2)");
|
// page.newLine("中控 BM蓝牙 英文 6V (数量:1)");
|
// page.newLine("线束 S2588-1-XX 无实物(数量:5)");
|
// page.newLine("目标库位:0100204");
|
// // 设置字体
|
// page.setFont(new Font("宋体", Font.PLAIN, 12));
|
// // 设置显示特技为快速打出
|
// page.setDisplayStyle(styles[2]);
|
//
|
// // 数据页可以是图片
|
//// ImageFileBxPage iPage = new ImageFileBxPage( "E;a/001.bmp" );
|
////
|
//// // 数据页可以是txt文件
|
//// TextFileBxPage tPage = new TextFileBxPage("E:a/001.txt");
|
//
|
// // 将前面的page添加到area中 area中可以添加多个page 其中page可以是字符串,可以是txt文件,可以是图片,不可以是表格,如果需要Led屏上显示表格,请先将表格绘制成图片
|
// area.addPage(page);
|
//// area.addPage( iPage );
|
//// area.addPage( tPage );
|
// // 将area添加到节目中 节目中可以添加多个area
|
// pf.addArea(area);
|
//
|
// // 更新节目
|
// screen.writeProgram(pf);
|
//
|
//
|
// //
|
// // 以下是动态区部分 Demo
|
// // 动态区的特点
|
//
|
// // DynamicBxAreaRule(id, runMode, immediatePlay, timeout)
|
// // runMode 运行模式:
|
// // 0:循环显示。
|
// // 1:显示完成后静止显示最后一页数据。
|
// // 2:循环显示,超过设定时间后数据仍未更新时不再显示。
|
// // 3:循环显示,超过设定时间后数据仍未更新时显示 Logo 信息。
|
// // 4:循环显示,显示完最后一页后就不再显示。
|
// // immediatePlay 是否立即播放:
|
// // 0:与异步节目一起播放。
|
// // 1:异步节目停止播放,仅播放动态区域。
|
// // 2:当播放完节目编号最高的异步节目后播放该动态区域。
|
//
|
// //
|
// // 定义一个动态区
|
// // 可以通过ID来更新不同的动态区内容, 此处 ID 为 0
|
//// DynamicBxAreaRule dynRule = new DynamicBxAreaRule(0, (byte) 0, (byte) 1, 0);
|
// //dArea.addProgram("P000");
|
// //dArea.addProgram("P001");
|
//
|
//// int posX = 440;
|
//// int posY = 4;
|
//// TextCaptionBxArea dAreaContent = new TextCaptionBxArea(posX, posY, 64, 16, screen.getProfile());
|
//// TextBxPage page = new TextBxPage("动态第一次尝试");
|
//// page.setDisplayStyle(DisplayStyleFactory.getStyle(4));
|
//// dAreaContent.addPage(page);
|
////
|
//// // 发送动态区之前,如果需要删除之前的动态区,可以调用以下接口
|
//// // 通常如果动态区的位置或大小没有发生改变,不用删除
|
//// screen.deleteAllDynamic();
|
////
|
//// // 更新动态区
|
//// screen.writeDynamic(dynRule, dAreaContent);
|
//// Thread.sleep(15000);
|
////
|
//// //
|
//// // 下面模拟再次更新动态区
|
//// page = new TextBxPage("再次尝试");
|
//// TextBxPage page2 = new TextBxPage("成功");
|
////
|
//// dAreaContent.clearPages();
|
//// dAreaContent.addPage(page);
|
//// dAreaContent.addPage(page2);
|
////
|
//// // 更新动态区
|
//// screen.writeDynamic(dynRule, dAreaContent);
|
//
|
// //
|
// // 继开与控制器之间的链接
|
// screen.disconnect();
|
//
|
//
|
// }
|
//
|
// @Override
|
// @SuppressWarnings({"InfiniteLoopStatement", "unchecked"})
|
// public void run() {
|
// connect();
|
// close();
|
// while (true) {
|
// try {
|
// Task task = MessageQueue.poll(SlaveType.Led, slave.getId());
|
// if (task != null) {
|
// switch (task.getStep()) {
|
// // 写数据
|
// case 1:
|
// write((List<LedCommand>) task.getData());
|
// break;
|
// // 复位
|
// case 2:
|
// reset();
|
// break;
|
// default:
|
// break;
|
// }
|
// }
|
//
|
// Thread.sleep(400);
|
// } catch (Exception e) {
|
// e.printStackTrace();
|
// }
|
// }
|
// }
|
//
|
// private void write(List<LedCommand> list) throws Bx5GException {
|
// if (!connect()) {
|
// return;
|
// }
|
// pf = new ProgramBxFile(0, screen.getProfile());
|
// pf.setFrameShow(false);
|
// // 分别输入X,Y,width,height
|
// area = new TextCaptionBxArea(0, 0, 96, 48, screen.getProfile());
|
// // 创建一个数据页
|
// TextBxPage page = new TextBxPage();
|
// for (LedCommand command : list) {
|
// page.newLine(command.getTitle() + "(" + command.getWorkNo() + ")");
|
// page.newLine("库位:" + (command.getIoType() < 100 ? command.getLocNo() : command.getSourceLocNo()));
|
// page.newLine("目标站:" + command.getStaNo());
|
// if (!command.isEmptyMk()) {
|
// for (MatDto matDto : command.getMatDtos()) {
|
// //去掉小数点
|
// String strQty = matDto.getCount().toString();
|
// int idx = strQty.lastIndexOf(".");
|
// if (idx >= 0) {
|
// strQty.substring(0, idx);
|
// }
|
// page.newLine(matDto.getMaknx() + "[数量" + strQty + "]");
|
//// page.newLine(matDto.getMaknx() + "【数量" + matDto.getCount() +"】");
|
// }
|
// }
|
// page.newLine("\n");
|
//
|
// //更新指令状态
|
// CommandInfoService commandInfoService = SpringUtils.getBean(CommandInfoService.class);
|
// CommandInfo commandInfo = command.getCommandInfo();
|
// commandInfo.setCommandStatus(CommandStatusType.COMPLETE.id);
|
// commandInfoService.updateById(commandInfo);
|
// }
|
//
|
// // 设置字体
|
// page.setFont(new Font("宋体", Font.PLAIN, 12));
|
// // 设置文本颜色
|
// page.setForeground(Color.red);
|
// // 设置显示特技为快速打出
|
// page.setDisplayStyle(styles[6]);
|
// area.clearPages();
|
// area.addPage(page);
|
// pf.addArea(area);
|
// if (pf.validate() != null) {
|
// log.info("pf out of range");
|
// } else {
|
// // 更新节目
|
// screen.writeProgram(pf);
|
//// resetStatus = false;
|
// }
|
// close();
|
// }
|
//
|
// private void reset() throws Bx5GException {
|
// if (!connect()) {
|
// return;
|
// }
|
//// if (resetStatus) {
|
//// return;
|
//// }
|
// pf = new ProgramBxFile(0, screen.getProfile());
|
// pf.setFrameShow(false);
|
// // 分别输入X,Y,width,height
|
// area = new TextCaptionBxArea(0, 0, 96, 48, screen.getProfile());
|
// // 创建一个数据页
|
// TextBxPage page = new TextBxPage();
|
//
|
//// List<String> list = null;
|
//// try {
|
//// String ledDefaultMsg = Parameter.get().getLedDefaultMsg();
|
//// list = JSON.parseArray(ledDefaultMsg, String.class);
|
//// } catch (Exception ignore) {
|
//// }
|
//// if (!Cools.isEmpty(list)) {
|
//// for (String str : list) {
|
//// page.newLine(str);
|
//// }
|
//// } else {
|
//// page.newLine("自动化立体仓库");
|
//// page.newLine("西格迈股份有限公司");
|
//// }
|
// page.newLine("力源智能仓储");
|
//
|
// // 设置字体
|
// page.setFont(new Font("宋体", Font.PLAIN, 13));
|
// // 设置文本颜色
|
// page.setForeground(Color.red);
|
// // 设置显示特技为快速打出
|
// page.setDisplayStyle(styles[6]);
|
// area.clearPages();
|
// area.addPage(page);
|
// pf.addArea(area);
|
// // 更新节目
|
// if (pf.validate() != null) {
|
// log.info("pf out of range");
|
// } else {
|
// // 更新节目
|
// screen.writeProgram(pf);
|
//// resetStatus = true;
|
// }
|
// close();
|
// }
|
//
|
// @Override
|
// public boolean connect() {
|
// boolean connRes = false;
|
// try {
|
// connRes = screen.connect(slave.getIp(), slave.getPort());
|
// screen.turnOn();
|
// } catch (Exception ignore) {
|
// }
|
// DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
|
// if (connRes) {
|
// log.info("led连接成功 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
|
// deviceErrorService.deleteDeviceError("led", slave.getId());
|
// } else {
|
// log.error("led连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
|
// deviceErrorService.addDeviceError("led", slave.getId(), "led连接失败");
|
// }
|
// return connRes;
|
// }
|
//
|
// @Override
|
// public void close() {
|
// screen.disconnect();
|
// }
|
//
|
//}
|