《硬件接入》耀华XK3190-A9+地磅安卓(java)接入过程分享

最近遇到在安卓上通过串口连接地磅的需求, 基本上实现了读数和判断地磅稳定状态 , 这里分享出来实现过程以方便大家开发.我们开发用的打印机是XK3190-A9+ ,需要这个打印机参数文档的可以耀华官网下载:http://www.yaohua.com.cn/companyfile/16/

地磅是通过串口连接的,连接地磅主要参数有串口名称、波特率、一帧长度、以及是否校验,校验位等其他参数;

我这边做的参数有:串口名称、波特率、一帧长度以及通讯方式;

一、地磅参数

1、串口名称

在我安卓工控机上是已接入是RS232,命名为ttfS1和ttfS3两个串口;

RS232、TTL、COM 是不同电平和逻辑的串口,百度一下大概有常用的电平标准有TTL、CMOS、LVTTL、LVCMOS、ECL、PECL、LVPECL、RS232、RS485等,还有一些速度比较高的 LVDS、GTL、PGTL、CML、HSTL、SSTL等

2、波特率

波特率即调制速率,指的是有效数据讯号调制载波的速率,即单位时间内载波调制状态变化的次数。

XK3910-A9+支持的波特率有:600、1200、2400、4800、9600;我这里统一选择了9600

3、一帧长度

是指一次信号携带的数据长度 ,耀华是8位,其中开后1位是“=”号连接位,后面7位是数据位。

4、通讯方式

意思是说地磅跟其他机器的通讯方式,可以选择连续发数据,但不接收数据、发送一次和等待接收、连续发送8位、连续发送9位这四种;我选择的是连续发送8位。

地磅上相关参数的设置方步骤和方式:
在这里插入图片描述

更多设置可以去下载打印机文档.

二、配置参数

1、外设参数配置,先配置上面的默认参数

String port = “/dev/ttyS1”;//串口名字,默认ttfS1
int baudRate = 9600;//波特率,默认9600
int dateLengthPerFrame = 8;//每一帧的数据长度 ,耀华是8位

2、增加上一些本地的参数配置
int stableTimeMills = 1000;//地磅稳定时间,超过这个时间数据不曾修改则表示地磅稳定,耀华的是1秒
int receiveTimeOut = 1000;//地磅接收超时,一般地磅会毫秒内发送数据,超过这个时间则表示地磅链接失败,默认是1秒没内收到数据就表示地磅链接失败
int receiveTimeCountdownInterval = 500;//地磅接收超时,倒计时 ,默认50毫数一次
double recentlyValidWeightNum = 0.0;//最近一次有效读磅数
3、自定义地磅状态

public enum PoundStatus {
   
 UN_CONNECTED(-1),//未连接
 UNSTABLE(0),//已连接,不稳定
 STABLE(1);//已连接,已稳定
  int code;
PoundStatus(int code) {
   
  this.code = code;
}
public String getStatusStr() {
   
return code == -1 ? "未连接" : (code == 0 ? "不稳定" : "稳定");
  }
}

三、连接地磅代码解析

1、增加一个串口管理依赖

gradle 下添加依赖 implementation 'com.github.547394:SerialPortManager:1.0.10'

2、新建一个PoundManager.java 增加上面的相关配置参数

public class PoundManager {
   
    static PoundManager instance;//唯一实例
    SerialPortManager serialPort;//端口管理器
    SerialPortProtocol protocol = new SerialPortProtocol();//端口协议
    String port = "/dev/ttyS1";//串口名字,默认ttfS1
    int baudRate = 9600;//波特率,默认9600
    int stableTimeMills = 1000;//地磅稳定时间,超过这个时间数据不曾修改则表示地磅稳定,耀华的是1秒

    CountDownTimer countDownTimer;//地磅信号接收超时倒计时
    int receiveTimeOut = 1000;//地磅接收超时,一般地磅会毫秒内发送数据,超过这个时间则表示地磅链接失败,默认是1秒没内收到数据就表示地磅链接失败
    int receiveTimeCountdownInterval = 500;//地磅接收超时,倒计时 ,默认50毫数一次,
    int dateLengthPerFrame = 8;//每一帧的数据长度 ,耀华是8位

    PoundStatusListener poundStatusListener;//地磅状态监听器
    PoundStatus poundStatus = PoundStatus.UN_CONNECTED;//地磅状态,默认未连接
    double recentlyValidWeightNum = 0.0;//最近一次有效读磅数
    long lastValidWeightNumTimeMills;//最后一次有效读数时间
    long lastDataReceiveTime;//最后一次监听到数据输入的时间

    public static PoundManager getInstance() {
   
        if (instance == null) {
   
            instance = new PoundManager();
        }
        return instance;
    }
    /**
     * 地磅信息
     */
    public interface PoundStatusListener {
   
        void onTick(double lastValidWeightNum, PoundStatus status);
    }

    /**
     * 地磅状态
     */
    public enum PoundStatus {
   
        UN_CONNECTED(-1),//未连接
        UNSTABLE(0),//已连接,不稳定
        STABLE(1);//已连接,已稳定
        int code;

        PoundStatus(int code) {
   
            this.code = code;
        }

        public String getStatusStr() {
   
            return code == -1 ? "未连接" : (code == 0 ? "不稳定" : "稳定");
        }
    }
 }

3、初始化端口连接

 //初始化端口设置
    public void init() {
   
        outPutInfo("正在初始化地磅设置");
        initSettingFromSP();
        serialPort = new SerialPortManager();
        protocol.setFixedLength(dateLengthPerFrame);
        serialPort.setBufferSize(1024);
        serialPort.setProtocol(protocol);
        serialPort.setReceivedTimeout(receiveTimeOut);
        serialPort.enableDebug(true);//是否开启日志
        serialPort.setOnDataListener(new OnDataListener() {
   
            @Override
            public void onDataReceived(byte[] bytes) {
   
//             dealReceiveDataOld(bytes);
                dealReceiveData(new String(bytes));
            }

            @Override
            public void onDataSend(byte[] bytes) {
   
                super.onDataSend(bytes);
            }
        });
        serialPort.setOnOpenListener(new OnOpenListener() {
   
            @Override
            public void onSuccess(File device) {
   
                super.onSuccess(device);
//                poundStatus = PoundStatus.UNSTABLE;
//                outPutInfo("地磅连接成功,开始监听数据返回");
                startListeningPortCountDown();
            
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值