自动化立体仓库 - WCS系统
#
luxiaotao1123
2020-09-01 85784d74c87c95d6f6994be691166dba3a3a32b6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
package com.zy.core.thread;
 
import com.zy.core.Slave;
import com.zy.core.ThreadHandler;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import onbon.bx05.Bx5GEnv;
import onbon.bx05.Bx5GScreenClient;
import onbon.bx05.area.TextCaptionBxArea;
import onbon.bx05.area.page.TextBxPage;
import onbon.bx05.cmd.dyn7.DynamicBxAreaRule;
import onbon.bx05.utils.DisplayStyleFactory;
 
/**
 * Created by vincent on 2020/9/1
 */
@Data
@Slf4j
public class LedThread implements Runnable, ThreadHandler {
 
    private Slave slave;
    private Bx5GScreenClient screen;
 
    public LedThread(Slave slave) {
        this.slave = slave;
        try {
            Bx5GEnv.initial(3000);
            screen = new Bx5GScreenClient("MyScreen");
        } catch (Exception e) {
            e.printStackTrace();
            log.info("led连接构造器错误 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
        }
    }
 
    @Override
    @SuppressWarnings("InfiniteLoopStatement")
    public void run() {
        connect();
        while (true) {
            try {
 
 
 
                Thread.sleep(500);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
 
    @Override
    public boolean connect() {
        boolean connRes = false;
        try {
            connRes = screen.connect(slave.getIp(),slave.getPort());
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (connRes) {
            log.info("led连接成功 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
        } else {
            log.error("led连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
        }
        return connRes;
    }
 
    @Override
    public void close() {
        screen.disconnect();
    }
 
 
    public static void main(String[] args) throws Exception {
        Bx5GEnv.initial(3000);
        // 创建screen对象,用于对控制器进行访问,客户端模式
        Bx5GScreenClient screen = new Bx5GScreenClient("MyScreen");
        // 创建screen对象,用于对控制器进行访问,串口模式
        //        Bx5GScreenRS screen = new Bx5GScreenRS("MyScreen");
 
        // 在对控制器交互之前,需要先与控制器建立连接
        screen.connect("192.168.100.199",5005);
        // 与控制器交互完成后,需断开与控制器之间的连接
        screen.disconnect();
 
        // 以下为一些简单控制命令的使用方法
        // 开关机命令
        screen.turnOff();// 关机
        screen.turnOn();// 开机
        screen.syncTime();// 校时
        screen.ping();// ping命令
        // 查询控制器状态
        screen.checkControllerStatus();
        // 查询控制器当前固件版本
        screen.checkFirmware();
        // 查询控制器内存
        screen.checkMemVolumes();
        // 锁定屏幕当前画面
        screen.lock();
        // 解除锁定屏幕当前画面
        screen.unlock();
 
 
 
        //
        // 以下是动态区部分 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();
 
 
    }
 
}