JAVA 操作 SCL2008 大屏幕(含SDK开发包和代码示例)

本文介绍了如何使用Java开发包操作SCL2008大屏幕,包括下载必要的SDK和依赖库、修复SDK中的编码问题,以及使用RXTX升级至JSerialComm以简化串口通信。重点在于关键方法和改进步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JAVA 操作 SCL2008 大屏幕

一. 下载SDK开发包和一些依赖的DLL动态链接库

  1. 在 pom.xml 中新增 RXTX 依赖:
    <!-- java 操作串口包 -->
    <dependency>
        <groupId>org.rxtx</groupId>
        <artifactId>rxtx</artifactId>
        <version>2.1.7</version>
    </dependency>
    
  2. 将 rxtxParallel.dll、rxtxSerial.dll、SuperComSCL2008.Dll 这三个文件放入 JDK 的 jre/bin 目录中。注意,这三个文件取决于自己操作系统位数而不是JDK的位数。我准备好了64位和32位的库:下载 RXTX 需要的动态链接库
  3. 下载 SCL2008 的开发包SDK:下载 SCL2008 SDK
  4. 解压出来后:
    解压之后
  5. 进入 Demos\Java\SCL2008-CL3000-SC3000通用java开发包 目录,将里面的所有内容(注意文件的编码,有些是 UTF-8,有些是 ANSI 建议都改成 UTF-8)复制到你项目的 com.lytec 目录下(没有要自己建):
    项目结构
  6. 该 SDK 发布于 2022-04-21,所以只修改了此时的 BUG,后续版本可能会修复

二. 修改 SDK 中的 BUG

  1. 打开 com.lytec.Demo.InitailDemo:将原本的 main 方法重命名为 mainOld,复制以下 main 方法进代码中:

    public static void main(String[] args) throws Exception {
    	int nDevId = 13;
    	//前面四个参数在PLAYLIST.LY的position里
    	TextInfo textInfo = new TextInfo(3648, 0, 448, 96, 0, 0, 1);
    	boolean b = SCL.L_ComInitial(
    			nDevId,//设备ID
    			0,//屏号
    			0,//密匙
    			LConst.SerialPorts[2],//COM3,改成你自己的
    			LConst.BAUDRATE9600,//波特率,改成你自己的
    			0,//地址码
    			1 //devType:硬件类型(1、SCL2008, 2、SC3000, 3、CL3000)
    	);
    	//其中 LConst.SerialPorts = {"COM1","COM2","COM3","COM4","COM5","COM6",
    	//"COM7","COM8","COM9","COM10","COM11","COM12","COM13","COM14","COM15",
        //"COM16","COM17","COM18","COM19","COM20","COM21","COM22","COM23","COM24","COM25"};
    	if(!b){
    		throw new Exception("串口初始化失败!");
    	}
    	SCL.L_ShowString(nDevId, textInfo, "Hi你好,yhf");
    }
    

    注意:TextInfo 的前四个参数(3648, 0, 448, 96),在 PLAYLIST.LY文件 中:
    在这里插入图片描述
    在这里插入图片描述

  2. 查看 SCL.L_ShowString 方法:

    public static boolean L_ShowString(
    		int nDevId,
    		TextInfo textInfo,
    		String str
    		) throws IOException, UnsupportedCommOperationException, PortInUseException{
    	byte[] textBytes = SCL.L_GetTextViewPackage(nDevId, textInfo, str);
    	byte[] bytes = SCL.L_GetPackage(nDevId, textBytes);
    	return L_TransComm(nDevId, bytes);
    }
    
  3. 继续进入 SCL.L_GetTextViewPackage 方法,修改 str.getBytes() 为 str.getBytes(“GB2312”) :

    public static byte[] L_GetTextViewPackage(int nDevId, TextInfo text, String str) throws IOException{
    
    	Communication commu = map.get(nDevId);
    	int command = 0x0000000F;
    	int Xpos = text.getLeft();
    	int Ypos = text.getTop();
    	int width = text.getWidth();
    	int height = text.getHeight();
    	
    	byte[] commandBytes = LData.intTo4Bytes(command);
    	byte[] xBytes = LData.intTo2Bytes(Xpos);
    	byte[] yBytes = LData.intTo2Bytes(Ypos);
    	byte[] widthBytes = LData.intTo2Bytes(width);
    	byte[] heightBytes = LData.intTo2Bytes(height);
    	//byte[] strBytes = str.getBytes();
    	byte[] strBytes = str.getBytes("GB2312");//不指定默认是UTF-8,屏幕显示中文会乱码
    	byte temp = 0;
    	//str的长度不得超过1000个字符
    	if (strBytes.length>1000) {
    		System.out.println("字符串的长度超过1000个字符,请重新输入!");
    	}
    	
    	baos.reset();
    	baos.write(commandBytes);
    	baos.write(xBytes);
    	baos.write(yBytes);
    	baos.write(widthBytes);
    	baos.write(heightBytes);
    	baos.write(strBytes);
    	baos.write(temp);
    	
    	byte[] basePackage = baos.toByteArray();
    	baos.reset();
    	baos.close();
    	commu.setBaseBytes(basePackage);
    	return basePackage;
    }
    
  4. 运行测试:

  • 控制台:在这里插入图片描述
  • 大屏幕:
    在这里插入图片描述

三. 总结

可以看到,最主要的方法是 2.2 中的以下两个方法,他将我们的数据封装成字节数组:

byte[] textBytes = SCL.L_GetTextViewPackage(nDevId, textInfo, str);
byte[] bytes = SCL.L_GetPackage(nDevId, textBytes);

之后通过串口发送数据给大屏幕。知道原理后我们可以做如下改进:

将老牌的操作串口包 RXTX 升级为新的 JSerialComm:可以参考本人以前写过的如何通过 JSerialComm 收发串口数据:JAVA 如何通过 JSerialComm 收发串口数据

JSerialComm 相较于 RXTX 最大的优点是:不需要自己额外添加.dll动态链接文件。导入依赖直接运行!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值