269 lines
11 KiB
Markdown
269 lines
11 KiB
Markdown
---
|
||
title: 五代六代控制卡Java二次开发开发说明
|
||
tags: 二次开发,说明,五代六代控制卡,Java
|
||
grammar_cjkRuby: true
|
||
---
|
||
|
||
|
||
# 1.开发前必读
|
||
## 1.1 控制器型号选择
|
||
本说明只适用于BX系列五代六代控制卡(不包括字库卡),例如:BX-5E1、BX-5M1、BX-6E1X等,其中BX-5E1、BX-5E2、BX-5E3支持动态区(4个),BX-6E1、BX-6E2、BX-6E1X、BX-6E2X、BX-6Q系列支持动态区(32个)。
|
||
## 1.2 关于动态区
|
||
根据存储介质的不同,我们将控制器上现实的内容分为两类:普通节目(数据存储在flash中)和动态区(数据存储在ram中)。普通节目可以包括各种区域:时间区、传感器区、图文区等。
|
||
|
||
普通节目,会被存储在控制器的flash中,其内容掉电不丢失,但是因为flash存储器擦写寿命只有十万次,所以,其不能用于更新频率很高的场合,例如:停车场车位信息,外部传感器状态的实时更新,车次状态的实时更新等。
|
||
|
||
动态区完全独立于普通节目,其内容可以按区域进行单独更新,它可以与普通节目一起播放,也可以单独播放,它最大的特点是内容存储在ram中,没有擦写次数限制,内容掉电不保存,通常用于信息更新频繁场合。
|
||
## 1.3 准备工作
|
||
在进行开发之前,请使用通用软件LedshowTW图文编辑软件对控制器进行相关配置,比如控制器IP地址(串口号)、屏幕参数、扫描方式等,在使用LedshowTW软件能发送普通节目到控制器兵能显示正常后,在进行二次开发。
|
||
## 1.4 常见问题
|
||
* 关于表格 控制器不支持Excel或其他表格,所以,需要将表格转换成图片添加到区域中
|
||
# 2. 接口说明
|
||
## 2.1 SDK初始化
|
||
```java
|
||
// 五代控制器
|
||
// 初始化SDK
|
||
// 初始化有3种方法,如下
|
||
Bx5GEnv.initial();
|
||
|
||
Bx5GEnv.initial("log.properties"); // log.properties是日志配置文件
|
||
|
||
Bx6GEnv.initial("log.properties",30000);// 30000为通讯超时时间,单位是毫秒
|
||
|
||
// 六代控制卡
|
||
// 初始化SDK
|
||
// 初始化有3种方法,如下
|
||
Bx6GEnv.initial();
|
||
|
||
Bx6GEnv.initial("log.properties");// log.properties是日志配置文件
|
||
|
||
Bx6GEnv.initial("log.properties",30000);// 30000为通讯超时时间,单位是毫秒
|
||
```
|
||
## 2.2 Screen类
|
||
与控制器的所有交互都需要通过Bx5GScreen类或其子类来进行,其子类包括:
|
||
Bx5GScreenClient(客户端模式使用),Bx5GScreenRS(串口模式使用),Bx5GScreenServer(服务器模式使用)。
|
||
创建screen对象的通常代码如下:
|
||
```java
|
||
// 五代控制器
|
||
// 创建screen对象,用于对控制器进行访问,客户端模式
|
||
Bx5GScreenClient screen = new Bx5GScreenClient("MyScreen");
|
||
// 创建screen对象,用于对控制器进行访问,串口模式
|
||
Bx5GScreenRS screen = new Bx5GScreenRS("MyScreen");
|
||
|
||
// 六代控制器创建screen对象方法,以BX-6M系列为例
|
||
// Bx6M 为控制卡型号,只有型号对应才能通讯正常,否则会出现逾时未回应
|
||
// 如果使用的控制器型号在SDK中没有定义,则用Bx6M替代
|
||
// 创建screen对象,用于对控制器进行访问,客户端模式
|
||
Bx6GScreenClient screen = new Bx6GScreenClient("MyScreen",new Bx6M());
|
||
// 创建screen对象,用于对控制器进行访问,串口模式
|
||
Bx6GScreenRS screen = new Bx6GScreenRS("MyScreen",new Bx6M());
|
||
```
|
||
## 2.3 屏幕连接
|
||
在对控制器交互之前,需要先与控制器建立连接,代码如下:
|
||
```java
|
||
// 连接控制器
|
||
// 其中,192.168.100.199为控制器的实际IP地址,请根据实际情况填写
|
||
// 如果不知道控制器IP地址,请先使用LedshowTW软件设置IP地址,软件下载地址:https://www.onbonbx.com/download/165.html
|
||
// 端口号默认为5005
|
||
// 五代控制器和六代控制器屏幕连接方法一样
|
||
screen.connect("192.168.100.199",5005);
|
||
```
|
||
与控制器交互完成后,需断开与控制器之间的连接,其代码如下:
|
||
```java
|
||
// 断开与控制器之间的连接
|
||
screen.disconnect();
|
||
```
|
||
## 2.4 屏幕控制
|
||
```java
|
||
// 以下为一些简单控制命令的使用方法
|
||
// 开关机命令
|
||
screen.turnOff();// 关机
|
||
screen.turnOn();// 开机
|
||
screen.syncTime();// 校时
|
||
screen.ping();// ping命令
|
||
// 查询控制器状态
|
||
screen.checkControllerStatus();
|
||
// 查询控制器当前固件版本
|
||
screen.checkFirmware();
|
||
// 查询控制器内存
|
||
screen.checkMemVolumes();
|
||
// 锁定屏幕当前画面
|
||
screen.lock();
|
||
// 解除锁定屏幕当前画面
|
||
screen.unlock();
|
||
// 通过以下接口回读控制器状态
|
||
Bx5GScreen.Result<ReturnControllersStatus> result = screen.checkControllerStatua();
|
||
if(result.isOK())
|
||
{
|
||
ReturnControllerStatus status = result.reply;
|
||
status.getBrightness();// 取得亮度值
|
||
status.getTemperature1();// 取得温度传感器温度值
|
||
// status还有很多接口,根据实际应用进行调用
|
||
}
|
||
else
|
||
{
|
||
ErrorType error = result.getError();
|
||
System.out.println(error);
|
||
}
|
||
```
|
||
## 2.5 节目与区域
|
||
节目主要用于组合屏幕上现实的内容,它由多个区域组成。控制器同一时间只能播放一个集美,它是控制器现实内容可以单独更新的最小单位。
|
||
以下,我们将按步骤创建一个节目,并将其发送到控制器进行显示
|
||
```java
|
||
// 创建节目文件
|
||
// 第二个参数为显示屏属性,具体可以参照Bx5GScreenProfile类
|
||
Bx5GScreenProfile profile = screen.getProfile();
|
||
ProgramBxFile p0 = new ProgramBxFile("P000",profile);
|
||
// 关于节目类的其他接口可以参考ProgramBxFile类
|
||
```
|
||
控制器支持的区域有很多种,例如:图文区、时间区、传感器区等。其中,最常用的是图文区。图文区可以支持显示文本和图片,文字或图片可以按数据也依次添加到图文区中,每页数据均可以设置特技方式,停留时间等属性
|
||
创建图文区的步骤大致如下:
|
||
创建TextCaptionBxArea对象
|
||
创建TextBxPage或ImageFileBxPage对象
|
||
将创建好的page对象添加到TextCaptionBxArea中
|
||
如下代码,创建一个文本区,并向这个区域中添加一个文本页
|
||
```java
|
||
// 创建一个图文区
|
||
// 参数为X、Y、width、heigth
|
||
// 注意区域左边和宽度高度,不要越界
|
||
TextCaptionBxArea area = new TextCaptionBxArea(0,0,160,64);
|
||
// 创建一个数据页,并希望显示“仰邦科技”这几个字
|
||
TextBxPage page = new TextBxPage("仰邦科技");
|
||
// 将page添加到area中
|
||
area.addPage(page);
|
||
// 将图文区添加到节目中
|
||
p0.addArea(area);
|
||
```
|
||
关于时间区
|
||
时间区的创建过程大致如下:
|
||
创建DateTimeBxArea对象
|
||
设置各时间单元显示格式
|
||
将DateTimeBxArea添加到节目中
|
||
```java
|
||
// 下面代码创建了一个时间区
|
||
// 注意:只需输入时间区的起始坐标,区域的宽度和高度SDK会根据字体和显示方式自动计算
|
||
DateTimeBxArea dtArea = new DateTimeBxArea(0,0,screen.getProfile());
|
||
// 设置字体
|
||
dtArea.setFont(new Font("宋体",Font.PLAIN,12));
|
||
// 设置显示颜色
|
||
dtArea.setForeground(Color.yellow);
|
||
// 多行显示还是单行显示
|
||
dtArea.setMultiline(true);
|
||
// 年月日显示格式
|
||
// 如果不需要显示,设置为null
|
||
dtArea.setDateStyle(DateStyle.YYY_MM_DD_1);
|
||
dtArea.setTimeStyle(TimeStyle.HH_MM_SS_1);
|
||
dtArea.setWeekStyle(null);
|
||
// 将时间区添加到节目中
|
||
p0.addArea(dtArea);
|
||
// 关于DateTimeBxArea类的更多接口,请参考JAVADOC中相关类的说明
|
||
```
|
||
更新节目
|
||
```java
|
||
// 以下为更新节目命令
|
||
screen.WriteProgram(p0);
|
||
// 更新节目还有很多命令,请参考JAVADOC
|
||
```
|
||
## 2.6 动态区
|
||
动态区是一种比较特殊的区域,其有以下几个主要特点:
|
||
* 更新次数没有限制
|
||
* 内容掉电不保存
|
||
* 独立于节目进行编辑
|
||
* 可以支持多个区域,且每个区域可以进行单独更新
|
||
* 可以和单个活多个节目绑定显示,即作为节目的一个区域进行显示
|
||
* 可以作为单独一个节目进行独立播放
|
||
* 灵活的控制方式:超时时间控制、是否立即显示灯
|
||
|
||
以下为动态区代码
|
||
```
|
||
// 五代控制器动态区(BX-5E系列)
|
||
// BX-5E系列控制卡最高支持4个动态区,当屏幕上需要同时显示多个动态区时,动态区ID不可以相同
|
||
// DynamicBxRule(id,runMode,immediatePlay,timeout);
|
||
// runMode 运行模式
|
||
// 0:循环显示
|
||
// 1:显示完成后静止显示最后一页数据
|
||
// 2:循环显示,超过设定时间后数据仍未更新时不显示
|
||
// 3:循环显示,超过设定时间后数据仍未更新时显示Logo信息
|
||
// 4:循环显示,显示完最后一页后不再显示
|
||
// immediatePlay
|
||
// 0:与异步节目一起播放
|
||
// 1:异步节目停止播放,仅播放动态区
|
||
// 2:当播放完节目编号最高的异步节目后播放该动态区
|
||
DynamicBxAreaRule rule = new DynamicBxRule(0,(byte)0,(byte)1,0);
|
||
TextCaptionBxArea darea = new TextCaptionBxArea(0,0,160,64,screen.getProfile());
|
||
TextBxPage dapge = new TextBxPage("动态区123abc");
|
||
darea.addPage(dpage);
|
||
screen.writeDynamic(rule,darea);
|
||
|
||
// 六代控制器动态区
|
||
DynamicBxAreaRule rule = new DynamicBxAreaRule();
|
||
// 设定动态区ID,此处ID为0,多个动态区ID不能相同
|
||
rule.setId(0);
|
||
// 设定异步节目停止播放,仅播放动态区
|
||
// 0:动态区与异步节目一起播放
|
||
// 1:异步节目停止播放,仅播放动态区
|
||
// 2:当播放完节目编号最高的异步节目后播放该动态区
|
||
rule.setImmediatePlay((byte)1);
|
||
// 设定动态区循环播放
|
||
// 0:循环播放
|
||
// 1:显示完成后静置显示最后一页数据
|
||
// 2:循环显示,超过设定时间后仍未更新时不再显示
|
||
// 3:循环显示,超过设定时间后仍未更新时显示Logo信息
|
||
// 4:显示完成最后一页后就不再显示
|
||
rule.setRunMode((byte)0);
|
||
DynamicBxArea area = new DynamicBxArea(0,0,160,32,screen.getProfile());
|
||
TextBxPage page = new TextBxPage("动态区abc");
|
||
area.addPage(page);
|
||
screen.writeDynamic(rule,area);
|
||
```
|
||
## 2.7 Server模式(包含GPRS)
|
||
Server使用流程如下:
|
||
* 初始化API(在一个进程内只需要初始化一次)
|
||
* 建立服务器
|
||
* 设定监听等待屏幕的连线与断线事件
|
||
* 关闭服务器
|
||
|
||
主要代码如下:
|
||
```java
|
||
Bx5GEnv.initial(); //初始化
|
||
// 建立服务器
|
||
Bx5GServer server = new Bx5GServer("Hello Screen", 8036);
|
||
// 添加监听
|
||
server.addListener(new ConnectionListener());
|
||
// 启动服务器
|
||
server.start();
|
||
System.out.println("waiting 30 secs");
|
||
Thread.sleep(30000);
|
||
// 更新节目或者动态区
|
||
//
|
||
//
|
||
//
|
||
|
||
|
||
// 关闭服务器
|
||
server.stop();
|
||
System.out.println("done!");
|
||
|
||
// 监听
|
||
public class ConnectionListener implements Bx5GServerListener {
|
||
@Override
|
||
public void connected(String socketId, String controllerAddr,
|
||
Bx5GScreen screen) {
|
||
Result<ReturnPingStatus> result1 = screen.ping();
|
||
Result<ReturnControllerStatus> result2 =
|
||
screen.checkControllerStatus();
|
||
...
|
||
}
|
||
@Override
|
||
public void disconnected(String socketId, String controllerAddr,
|
||
Bx5GScreen screen) {
|
||
...
|
||
}
|
||
}
|
||
```
|
||
|
||
|
||
|
||
|
||
|