精华内容
下载资源
问答
  • 大华条码秤条码设置
    千次阅读
    2020-12-20 07:25:23

    大华条码秤设置方法

    不同品牌的条码电子秤的设置方法是不一样的,如果是上海大华的,会随机自带一套设置软件,在这个软件中设置商品的PLC信息和条码标签格式,设置完成,用数据线与电脑连接,一般有串口和网线接口两种连接方式,连接好了,软件中有个下载选项,点一下就可以把设置的信息都下载到秤里了。

    大华条码秤设置:

    一、介绍

    1、键盘介绍:

    快捷键(1-71号白色按键):设置或调用商品,使商品快速调用打印

    PLU键:当手工输入商品PLU(条码)后,按该键调出商品

    功能键:按该键可进入设置程序,设置秤的各项参数

    数字键0-9:在任何情况下输入数字

    倍数键:在商品计个的情况下输入多件商品

    清除键:清除错误信息

    确认键:确定,保存

    日期键:查看时间

    打印键:打印标签

    去皮键:减掉商品的皮重

    置零键:在电子秤不为零是按置零键手工回零

    +A,+B,+C,+D,折扣,修正键一般在标签状态不使用,只在收银状态使用

    2、:在电子秤手工增加PLU信息编辑:本秤可存储4000条PLU信息:

    先按“功能”键,输入PLU编号,按“确认”。

    此时电子秤屏幕第三个格中显示F 00:参数设置,按“去皮”。

    F 01:输入皮重值(注:在定重方式时皮重为定重值)按“去皮”。

    F 02:输入商品的单价(以分为单位,每公斤的价格)按“去皮”。

    F 03:选择计价方式(0=记重方式;1=记件方式)按“去皮”。

    F 04:输入特殊信息号,按“去皮”。F 05:输入有效天数,按“去皮”。

    F 06:输入条码的标志位,按“去皮”。

    F 07:输入商品编码,按“去皮”。

    F 08:输入商品的名称(首先输入个汉字区位码的前两位数字,列如要输入“蓝天”,查字符表“蓝”=“3222”,则此处输入“32”按“去皮”键然后输入“蓝”的后两位)

    “去皮”(其余汉字的输入过程一次类推,……),按“去皮”输入“00”,按“确认”结束输入回到待机状态。

    二 、销售

    秤重商品:放上商品,输入编号,按PLU键(或相应的快捷键),按打印。

    计数商品:输入编号,按PLU键(或相应的快捷键),默认的商品是1件,如果要修改商品的数量,先输入商品的件数,再按倍数键,再按打印键。

    三、改价格

    按功能键,输入编号,按确认,按去皮2次输入新价格(公斤价格,以分为单位),再按确认:例如修改PLU号为123的商品(如果PLU编号是在1—71之间的数字可以直接按键盘上的快捷键),电子秤为待机状态。

    1、 输入PLU号123,在按下键盘的“PLU”键。

    2、 按两次键盘上的“去皮”键,此时电子秤屏幕第三个格中显示“F 02”,输入商品新的单价(每公斤的价格),按确定。

    四、修改店名:

    待机状态,按“功能”键,输入“4001”按“确认”,进入条汉字文本内容设置(电子秤屏幕的第二个格中显示“ 1”)。输入汉字区位码。例如条汉字文本的内容为“大华”则输入“大”的汉字区位码前两为“20”按去皮在输入后两位“83”,依次类推。

    更多相关内容
  • 大华条码秤上位机软件4.0
  • 大华条码秤动态库

    2019-04-03 11:14:27
    大华动态库,对接思迅软件零售系统。大华条码秤动态库.rar
  • 用于设置大华条码收银各项参数,设置各类商品信息、标签信息、设置文本及时针信息等,快速生成采购报表、销售日报表、月报表及销售报表、损耗报表等,还能分析利润信息。内置进销存功能,可添加采购、销售、盘点...
  • 大华新款条码秤IP设置说明.doc
  • 大华条码秤传称时,商品名称需要转化为区位码,此代码为javascript代码,可以把中文英文字母标点符号等转化为大华条码秤所需要的区位码格式,压缩包内index.html可直接双击本地运行体验,把需要转换的字符串输入以后...
  • 大华条码秤传称.7z

    2020-12-02 15:44:03
    大华条码秤传称时,商品名称需要转化为区位码,此代码为javascript代码,可以把中文英文字母标点符号等转化为大华条码秤所需要的区位码格式,压缩包内index.html可直接双击本地运行体验,把需要转换的字符串输入以后...
  • 大华条码秤说明书

    2013-10-15 11:51:26
    条码打印计价 使用说明书(11型) 目 录 一、条码打印计价概述 1 1.1 开箱检查 1 1.2 外观 1 1. 2. 1 电子外观图 1 1. 2. 2 电子各接口图 2 1.3 安装 2 1.4 显示和键盘 3 1. 4. 1 显示 3 1. 4. 2 键盘 4...
  • 13位条码(标识2位+5位plu+5位重量+1位校验位)示例代码: public static String Model13() { String ss = "!0O010503000502000100000100010001000000000000000001"; return HexUtil.str2HexStr(ss) + "0D0A"; } ...

    话不多说,直接上干货
    13位条码(标识2位+5位plu+5位重量+1位校验位)示例代码:

    public static String Model13() {
            String ss = "!0O010503000502000100000100010001000000000000000001";
            return HexUtil.str2HexStr(ss) + "0D0A";
        }
    

    当然也可以将5位重量改为5为价格。
    18位也很类似,只是既有5位重量也有5位价格,示例代码:

    public static String Model18() {
            String ss = "!0O010503000701000100000100010001000000000000000001";
            return HexUtil.str2HexStr(ss) + "0D0A";
        }
    
    展开全文
  • 上海大华条码秤上位机1216.zip
  • 大华条码秤对接经验总结

    千次阅读 2020-12-21 03:25:09
    前言一个超市里常用的条码秤对接经历屏幕截图.pngtcp/ip该条码秤使用 tcp/ip 协议进行通信,在 java 中,tcp/ip 通信被封装成了 Socket 类,所以使用起来还算简单。以下是一个简单的 socket 示例try {socket = new ...

    前言

    一个超市里常用的条码秤对接经历

    屏幕截图.png

    tcp/ip

    该条码秤使用 tcp/ip 协议进行通信,在 java 中,tcp/ip 通信被封装成了 Socket 类,所以使用起来还算简单。

    以下是一个简单的 socket 示例

    try {

    socket = new Socket();

    InetSocketAddress socketAddress = new InetSocketAddress("192.168.3.150", 4001);

    socket.connect(socketAddress, 10 * 1000);

    socket.setSoTimeout(5 * 1000);

    if (socket.isConnected()) {

    // 向 socket 服务器写入数据

    byte[] bytes = {0x21, 0x30, 0x49, 0x41, 0x0d, 0x0a, 0x03};

    socket.getOutputStream().write(bytes);

    // 接收 socket 服务器返回的数据

    InputStreamReader ipr = new InputStreamReader(socket.getInputStream());

    bufferedReader = new BufferedReader(ipr);

    String str = bufferedReader.readLine();

    }

    } catch (IOException error) {

    error.printStackTrace();

    }

    复制代码

    建议先实例化 socket 再进行连接,因为这样可以通过 setSoTimeout 函数设置超时时间,避免线程阻塞,同时 socket 的连接不能在主线程中进行,否则会报错。

    发送数据到条码秤

    大华条码秤 socket 服务器的端口为 4001,需要给大华秤盘设置一个固定的 ip 地址。

    设置方式如下:

    按下功能键 -> 输入9002 -> 按下确认 -> 开始输入 ip 地址,输入 . 需要按下去皮键 -> 在输入主机地址后按下去皮键完成设置

    在大华的文档中标明,每个指令都得以 0x0d, 0x0a, 0x03 为结束符,所以可以封装一个函数,如下:

    private String sendCommand(byte[] bytes) {

    byte[] suffix = {0x0d, 0x0a, 0x03};

    try {

    if (socket != null && socket.isConnected() && socket.getOutputStream() != null) {

    byte[] command = byteMerger(bytes, suffix);

    socket.getOutputStream().write(command);

    return "SEND_SUCCESS";

    } else {

    return "NOT_CONNECT";

    }

    } catch (IOException e) {

    e.printStackTrace();

    return "SEND_FAIL";

    }

    }

    private static byte[] byteMerger(byte[] bt1, byte[] bt2){

    byte[] bt3 = new byte[bt1.length + bt2.length];

    System.arraycopy(bt1, 0, bt3, 0, bt1.length);

    System.arraycopy(bt2, 0, bt3, bt1.length, bt2.length);

    return bt3;

    }

    复制代码

    首先发送清除 plu 和报表指令到条码秤来初始化条码秤。

    屏幕截图.png

    public boolean clearData() {

    if (socket != null && socket.isConnected()) {

    try {

    byte[] bytes = {0x21, 0x30, 0x49, 0x41};

    sendCommand(bytes)

    byte[] bytes2 = {0x21, 0x30, 0x48, 0x41};

    sendCommand(bytes2)

    return true;

    } catch (IOException e) {

    e.printStackTrace();

    return false;

    }

    } else {

    return false;

    }

    }

    复制代码

    这里有一点需要注意,因为初始化报表会耗费一定的时间,所以不能在清除报表后立马同步商品数据,否则会导致同步失败。

    关于商品数据传入文档描述如下:

    屏幕截图.png

    屏幕截图.png

    这里针对几个关键信息作出说明:

    plu 条码秤中货品的助记码,可在条码秤使用快捷键或录入 plu 码进行搜索

    code 商品代码,长度7位,用于条码秤打印条码标签后在系统数据库中进行匹配,第一位固定为店名号最后一位,意味着再怎样进行设置打印后都为店名号

    price 商品价格,单位为分,长度6位,不足需补位0

    goodsName 商品名,中文字符,需要转换成区位码转换函数如下

    private static String bytes2HexString(byte b) {

    return bytes2HexString(new byte[] { b });

    }

    private static String bytes2HexString(byte[] b) {

    String ret = "";

    for (int i = 0; i < b.length; i++) {

    String hex = Integer.toHexString(b[i] & 0xFF);

    if (hex.length() == 1) {

    hex = '0' + hex;

    }

    ret += hex.toUpperCase();

    }

    return ret;

    }

    private String StringToAreaByteCode(String str) {

    String result = "";

    for (int i = 0; i < str.length(); i++) {

    result += charToAreaByteCode(str.charAt(i));

    }

    return result;

    }

    private String charToAreaByteCode(char str) {

    byte[] bs = new byte[0];

    try {

    bs = String.valueOf(str).getBytes("GB2312");

    } catch (UnsupportedEncodingException e) {

    e.printStackTrace();

    }

    String s = "";

    String t = "";

    for (int i = 0; i < bs.length; i++) {

    int a = Integer.parseInt(bytes2HexString(bs[i]), 16);

    t = (a - 0x80 - 0x20) + "";

    if(t.length() == 1){

    t = 0 + t;

    }

    s += t;

    }

    return s;

    }

    复制代码

    发送商品数据代码如下:

    public boolean setGoods(BarCodeScaleGoods goods) {

    String plu = goods.pluCode;

    String code = goods.code;

    String price = String.valueOf(new Double(goods.price * 100).intValue());

    String goodsName = StringToAreaByteCode(goods.goodsName);

    String unit = goods.unit;

    while (plu.length() < 4) {

    plu = '0' + plu;

    }

    while (price.length() < 6) {

    price = '0' + price;

    }

    String goodsInfo = String.format("!0V%sA%s%s%s00000099901010000000000000000000000000000000000000000000000B%sCDE", plu, code, price, unit, goodsName);

    byte[] bytes = goodsInfo.getBytes();

    String result = sendCommand(bytes);

    if (result.equals("SEND_SUCCESS")) {

    try {

    InputStreamReader ipr = new InputStreamReader(socket.getInputStream());

    bufferedReader = new BufferedReader(ipr);

    String str = bufferedReader.readLine();

    if (str.length() > 0) {

    return true;

    } else {

    return false;

    }

    } catch (IOException e) {

    e.printStackTrace();

    return false;

    }

    } else {

    return false;

    }

    }

    复制代码

    因为发送商品数据的指令每个字段没有明确的标识位,大华在解析指令时是以下标来获取信息的,所以得保证每个字段的信息字节数是固定的,所以得对动态的信息进行补位,代码如下:

    while (plu.length() < 4) {

    plu = '0' + plu;

    }

    while (price.length() < 6) {

    price = '0' + price;

    }

    复制代码

    需在空字节上填充0。

    在完成发送后,判断条码秤是否成功录入商品的条件是条码秤有没有返回信息,所以就有以下代码来判断是否录入成功。

    if (result.equals("SEND_SUCCESS")) {

    try {

    InputStreamReader ipr = new InputStreamReader(socket.getInputStream());

    bufferedReader = new BufferedReader(ipr);

    String str = bufferedReader.readLine();

    if (str.length() > 0) {

    return true;

    } else {

    return false;

    }

    } catch (IOException e) {

    e.printStackTrace();

    return false;

    }

    } else {

    return false;

    }

    复制代码

    最后需要同步热键设置,用于快捷键录入商品,文档描述如下:

    屏幕截图.png

    代码如下:

    public void setHotKey() {

    String str = "!0L00A";

    for (int i = 1; i <= 71; i++) {

    if (String.valueOf(i).length() == 1) {

    str += "000" + i;

    } else if (String.valueOf(i).length() == 2) {

    str += "00" + i;

    }

    }

    str += "B";

    byte[] bytes = str.getBytes();

    sendCommand(bytes);

    }

    复制代码

    关于找一找教程网

    本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

    本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

    [大华条码秤对接经验总结]http://www.zyiz.net/tech/detail-141508.html

    展开全文
  • 上海大华条码秤上位机软件 大华条码秤管理软件,好用。
  • 如何把商品信息手工输入到电子里? 如何修改电子的系统参数? 如何设置标签的格式? 当更换不同尺寸的标签时,如何校验标签纸? 店名设置 如何设置特殊信息? 如何设置PLU快捷键盘? 重量标定
  • android对接大华条码秤实例

    千次阅读 2021-11-19 19:42:55
    android对接大华条码秤方案 大华对外并没有提供相关客户端代码,因此翻遍了网络找了找资料,同时也咨询了大华官方的技术人员,在经历了将近一周的时间,终于搞出来满足需求的一个demo 需求 1、批量写入商品到大华...

    android对接大华条码秤方案

    • 大华对外并没有提供相关客户端代码,因此翻遍了网络找了找资料,同时也咨询了大华官方的技术人员,在经历了将近一周的时间,终于搞出来满足需求的一个demo
    需求
    • 1、批量写入商品到大华条码秤;
    • 2、单条更新条码秤内部商品;
    • 3、清除条码秤内部所有商品;
    • 4、条码头部更改为自定义内容,尾部根据设置动态打印价格或者重量;
    • 5、封装提供jar包,供外部使用;
      android大华秤demo下载
    需求增加
    • 1、调整打印文字头,要求打印内容为固定门店名
    • 2、调整标签打印效果,要求根据采购固定的标签尺寸打印产品设计标签内容

    创建一个对象写入数据使用
    package com.example.bighua.dahuautil;
    
    /**
     * @ClassName: BarCodeScaleGoods
     * @Description: 大华条码秤写入对象
     * @Author: 有时有晌
     * @Date: 2021/11/15 21:57
     */
    public class BarCodeScaleGoods {
        public String pluCode;//大华自己索引 不可跨越设置 例如 内部有商品数据 1,2,3  不可直接跳过4设置后边,否则失败
        public String code;//商品编码7位
        public Double price;//价格
        public String goodsName;//商品名
        public String unit;//单位
        public String barCodeHeader;//条码前缀
    
        @Override
        public String toString() {
            return "BarCodeScaleGoods{" +
                    "pluCode='" + pluCode + '\'' +
                    ", code='" + code + '\'' +
                    ", price=" + price +
                    ", goodsName='" + goodsName + '\'' +
                    ", unit='" + unit + '\'' +
                    ", barCodeHeader='" + barCodeHeader + '\'' +
                    '}';
        }
    }
    
    
    准备自己的socketUtils
    package com.example.bighua.dahuautil;
    
    import android.text.TextUtils;
    import android.util.Log;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.InetSocketAddress;
    import java.net.Socket;
    
    /**
     * @ClassName: SocketUtils
     * @Description:
     *         try
     *             {
     *                 int port = 4001;
     *                 IPAddress ip = IPAddress.Parse(textBox1.Text.Trim());
     *                 IPEndPoint ipe = new IPEndPoint(ip, port);
     *                 Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
     *                 socket.Connect(ipe);
     *                 var name = "毛豆";//商品名称
     *                 var barCodd = "123456";//商品条码
     *                 var shelfLife = 2;//商品有效期
     *                 var nameConvert = GetChineseWord(name);
     *                 var plu = "1";
     *                 var price = 10.1;//单价分
     *                 StringBuilder qwm = new StringBuilder();
     *                 foreach (var c in nameConvert)
     *                 {
     *                     qwm.Append(getCode(c.ToString()));
     *                 }
     *                 //$"!0V{4位PLU}A{7位商品编码}{6位数价格(单位分)}{模式(0:称重,1:计件,2:定重)}000000{3位有效期}{2位店号(01-99)}000000000000000{2位皮重(00-15)}0000000000000000000000000000000B{商品名称区位码}CDE" + "\r\n";
     *                 string sendStr = $"!0V{plu.PadLeft(4, '0')}A{barCodd.PadLeft(7, '0')}{(price * 100).ToString().PadLeft(6, '0')}0000000{shelfLife.ToString().PadLeft(3, '0')}01000000000000000000000000000000000000000000000000B{qwm}CDE" + "\r\n";
     *                 byte[] bs = Encoding.ASCII.GetBytes(sendStr);
     *                 socket.Send(bs, bs.Length, 0);
     *                 string recvStr = "";
     *                 byte[] recvBytes = new byte[1024];
     *                 int bytes;
     *                 bytes = socket.Receive(recvBytes, recvBytes.Length, 0);
     *                 recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
     *                 socket.Close();
     *
     *                 MessageBox.Show("下发成功");
     *             }
     *             catch (Exception ex)
     *             {
     *
     *                 MessageBox.Show("异常:" + ex.Message);
     *             }
     * @Author: 有时有晌
     * @Date: 2021/11/15 21:54
     */
    public class SocketUtils {
        private Socket socket;
        private BufferedReader bufferedReader;
        private SocketUtils socketUtils;
        public SocketUtils getSocketUtils(){
            if (socketUtils==null){
                socketUtils = new SocketUtils();
            }
            return socketUtils;
        }
    
        /**
         * socket连接大华条码秤 端口固定是4001(大华秤自己的端口,不要修改)修改后无法连接
         * @param ip
         */
        public boolean connect(String ip){
            try {
                socket = new Socket();
                InetSocketAddress socketAddress = new InetSocketAddress(TextUtils.isEmpty(ip)?"192.168.108.200":ip, 4001);
                socket.connect(socketAddress, 10 * 1000);
                socket.setSoTimeout(5 * 1000);
                if (socket.isConnected()) {
                    // 向 socket 服务器写入数据
    //                byte[] bytes = {0x21, 0x30, 0x49, 0x41, 0x0d, 0x0a, 0x03};
    //                socket.getOutputStream().write(bytes);
    //                socket.getOutputStream();
                    //上边38  39行 是每次写入前都执行清理
                    // 接收 socket 服务器返回的数据
                    InputStreamReader ipr = new InputStreamReader(socket.getInputStream());
                    bufferedReader = new BufferedReader(ipr);
    //                try {
    //                    String str = bufferedReader.readLine();
    //                } catch (IOException e) {
    //                    e.printStackTrace();
    //                }
                }
                return socket.isConnected();
            } catch (IOException error) {
                error.printStackTrace();
                System.out.println("==-->socket连接异常");
            }
            return false;
        }
    
        /**
         * 发送指令
         * @param bytes
         * @return
         */
        private String sendCommand(byte[] bytes) {
            byte[] suffix = {0x0d, 0x0a, 0x03};
            try {
                if (socket != null && socket.isConnected() && socket.getOutputStream() != null) {
    
                    byte[] command = Utils.byteMerger(bytes, suffix);
                    socket.getOutputStream().write(command);
                    Log.e("TAG","==-->指令发送成功");
                    return "SEND_SUCCESS";
    
                } else {
                    return "NOT_CONNECT";
                }
            } catch (IOException e) {
                e.printStackTrace();
                return "SEND_FAIL";
            }
        }
    
    
    
        /**
         * 清除大华秤内部商品
         * @return
         */
        public boolean clearData() {
            if (socket != null && socket.isConnected()) {
                byte[] bytes = {0x21, 0x30, 0x49, 0x41};
                sendCommand(bytes);
                byte[] bytes2 = {0x21, 0x30, 0x48, 0x41};
                sendCommand(bytes2);
                return true;
            } else {
                return false;
            }
        }
    
        /**
         * 修改条码打印后缀为价格
         * @return
         */
        public boolean changePrice() {
            if (socket != null && socket.isConnected()) {
                String priceType = modelPrice();
                byte[] bytes = priceType.getBytes();
                String result = sendCommand(bytes);
                Log.e("TAG","==-->发送改为价格指令"+result);
                if (result.equals("SEND_SUCCESS")) {
                    try {
                        InputStreamReader ipr = new InputStreamReader(socket.getInputStream());
                        bufferedReader = new BufferedReader(ipr);
                        String str = bufferedReader.readLine();
                        if (str.length() > 0) {
                            Log.e("TAG","==-->发送改为价格指令成功");
                            return true;
                        } else {
                            Log.e("TAG","==-->发送改为价格指令失败");
                            return false;
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                        Log.e("TAG","==-->发送改为价格指令失败发生异常"+e.getMessage()+" "+e.getCause());
                        return false;
                    }
                } else {
                    Log.e("TAG","==-->发送改为价格指令 !SEND_SUCCESS");
                    return false;
                }
            } else {
                return false;
            }
        }
    
        /**
         * 修改条码打印后缀为重量
         * @return
         */
        public boolean changeWeight() {
            if (socket != null && socket.isConnected()) {
                String modelWeight = modelWeight();
                byte[] bytes = modelWeight.getBytes();
                String result = sendCommand(bytes);
                Log.e("TAG","==-->发送改为重量指令"+result);
                if (result.equals("SEND_SUCCESS")) {
                    try {
                        InputStreamReader ipr = new InputStreamReader(socket.getInputStream());
                        bufferedReader = new BufferedReader(ipr);
                        String str = bufferedReader.readLine();
                        if (str.length() > 0) {
                            Log.e("TAG","==-->发送改为重量指令成功");
                            return true;
                        } else {
                            Log.e("TAG","==-->发送改为重量指令失败");
                            return false;
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                        Log.e("TAG","==-->发送改为重量指令失败发生异常"+e.getMessage()+" "+e.getCause());
                        return false;
                    }
                } else {
                    Log.e("TAG","==-->发送改为重量指令失败 !SEND_SUCCESS");
                    return false;
                }
            } else {
                return false;
            }
        }
    
        /**
         * 更新条码后缀为价格值
         * !0O[协议头]
         * 01[秤号]
         * 05[打印浓度]
         * 00[是否打折]
         * 01[抹零允许]
         * 02[条码格式]
         * 01[条码类型]
         * 01[分位圆整]
         * 01[日期格式]
         * 00[净重单位]
         * 00[单价单位]
         * 01[钱箱驱动开关]
         * 00[量程选折]
         * 01[打印是否清零]
         * 00[连续纸条码设置]
         * 00[金额厘位设置]
         * 00[表头1字体]
         * 00[表头2字体]
         * 00[表头3字体]
         * 00[表头4字体]
         * 00[表尾1字体]
         * 00[表尾2字体]
         * 00[表尾3字体]
         * 00[表尾4字体]
         * 01[正文字体]
         * @return
         */
        private static String modelPrice() {
            String modePrice = "!0O010503000501000100010100010001000000000000000001";
            return modePrice;
        }
        /**
         * 更新条码后缀为重量值
         * !0O[协议头]
         * 01[秤号]
         * 05[打印浓度]
         * 00[是否打折]
         * 01[抹零允许]
         * 02[条码格式]
         * 01[条码类型]
         * 01[分位圆整]
         * 01[日期格式]
         * 00[净重单位]
         * 00[单价单位]
         * 01[钱箱驱动开关]
         * 00[量程选折]
         * 01[打印是否清零]
         * 00[连续纸条码设置]
         * 00[金额厘位设置]
         * 00[表头1字体]
         * 00[表头2字体]
         * 00[表头3字体]
         * 00[表头4字体]
         * 00[表尾1字体]
         * 00[表尾2字体]
         * 00[表尾3字体]
         * 00[表尾4字体]
         * 01[正文字体]
         * @return
         */
        private String modelWeight() {
    //        String modelWeight = "!0O010503010202000100010100010001000000000000000001";//这个能正常打印重量 但是barCode不对 -- 留作备份
            String modelWeight = "!0O010503010502000100010100010001000000000000000001";//这个能正常打印重量 barCode打印头正确 保持与price条码格式都为05
            return modelWeight;
        }
    
        /**
         * 设置写入商品
         * @param goods
         * @return
         */
        public boolean setGoods(BarCodeScaleGoods goods) {
            if (!socket.isConnected()){
                Log.e("TAG","==-->socket没有连接");
                return false;
            }
            String plu = goods.pluCode;
            String code = goods.code;
            String price = String.valueOf(new Double(goods.price * 100).intValue());
            String goodsName = Utils.StringToAreaByteCode(goods.goodsName);
            String unit = goods.unit;
            String barHeader = goods.barCodeHeader;
            //需满足大华秤内部自身长度,不够追加
            while (plu.length() < 4) {
                plu = '0' + plu;
            }
            while (price.length() < 6) {
                price = '0' + price;
            }
            // %s 为占位符 依次用后边 plu   code  price  unit barHeader goodsName 替换 具体长度请参考大华秤自己demo 内部有固定长度要求
            // 如 plu 固定长度为4位,长度不够自行拼接0
            String goodsInfo = String.format("!0V%sA%s%s%s000000999%s010000000000000000000000000000000000000000000000B%sCDE", plu, code, price, unit,barHeader,goodsName);//这个条形码前缀以动态输入
    //        String goodsInfo = String.format("!0V%sA%s%s%s00000099901010000000000000000000000000000000000000000000000B%sCDE", plu, code, price, unit, goodsName);//这个条形码按大华机器走
            Log.e("TAG","==-->大华电子秤 最终 str:= "+goodsInfo);
            byte[] bytes = goodsInfo.getBytes();
            String result = sendCommand(bytes);
            //根据sendCommand返回结果判断
            if (result.equals("SEND_SUCCESS")) {
                try {
                    InputStreamReader ipr = new InputStreamReader(socket.getInputStream());
                    bufferedReader = new BufferedReader(ipr);
                    String str = bufferedReader.readLine();
                    if (str.length() > 0) {
                        Log.e("TAG","==-->商品下发成功");
                        return true;
                    } else {
                        Log.e("TAG","==-->商品下发失败");
                        return false;
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                    Log.e("TAG","==-->商品下发失败发生异常"+e.getMessage()+" "+e.getCause());
                    return false;
                }
            } else {
                Log.e("TAG","==-->商品下发失败 !SEND_SUCCESS");
                return false;
            }
        }
    
        /**
         * 执行完成关闭socket
         */
        public void closeConnect(){
            try{
                if (socket!=null||socket.isConnected()){
                    Log.e("TAG","==-->socket关闭连接");
                    try {
                        if(socket.getOutputStream()!=null){
                            socket.getOutputStream().close();
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    try {
                        if (socket.getInputStream()!=null){
                            socket.getInputStream().close();
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    try {
                        if(socket!=null){
                            socket.close();
                            socket=null;
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    try {
                        bufferedReader = null;
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
    
    
    相关工具类
    package com.example.bighua.dahuautil;
    
    
    import java.io.UnsupportedEncodingException;
    
    /**
     * @ClassName: Utils
     * @Description: 大华条码秤
     * @Author: 有时有晌
     * @Date: 2021/11/15 18:03
     */
    public class Utils {
    
        public static byte[] byteMerger(byte[] bt1, byte[] bt2){
            byte[] bt3 = new byte[bt1.length + bt2.length];
            System.arraycopy(bt1, 0, bt3, 0, bt1.length);
            System.arraycopy(bt2, 0, bt3, bt1.length, bt2.length);
            return bt3;
        }
        public static String bytes2HexString(byte b) {
            return bytes2HexString(new byte[] { b });
        }
        private static String bytes2HexString(byte[] b) {
            String ret = "";
            for (int i = 0; i < b.length; i++) {
                String hex = Integer.toHexString(b[i] & 0xFF);
                if (hex.length() == 1) {
                    hex = '0' + hex;
                }
                ret += hex.toUpperCase();
            }
            return ret;
        }
        public static String StringToAreaByteCode(String str) {
            String result = "";
            for (int i = 0; i < str.length(); i++) {
                result += charToAreaByteCode(str.charAt(i));
            }
    
            return result;
        }
    
        private static String charToAreaByteCode(char str) {
            byte[] bs = new byte[0];
            try {
                bs = String.valueOf(str).getBytes("GB2312");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            String s = "";
            String t = "";
            for (int i = 0; i < bs.length; i++) {
                int a = Integer.parseInt(Utils.bytes2HexString(bs[i]), 16);
                t = (a - 0x80 - 0x20) + "";
                if(t.length() == 1){
                    t = 0 + t;
                }
                s += t;
            }
            return s;
        }
    
    
    
    //    public static String bytes2HexString(byte b) {
    //        return bytes2HexString(new byte[]{b});
    //    }
    //
    //    public static String bytes2HexString(byte[] b) {
    //        String ret = "";
    //        for (int i = 0; i < b.length; i++) {
    //            String hex = Integer.toHexString(b[i] & 0xFF);
    //            if (hex.length() == 1) {
    //                hex = '0' + hex;
    //            }
    //            ret += hex.toUpperCase();
    //        }
    //        return ret;
    //    }
    //
    //    public static String StringToAreaByteCode(String str) {
    //        String result = "";
    //        for (int i = 0; i < str.length(); i++) {
    //            result += charToAreaByteCode(str.charAt(i));
    //        }
    //
    //        return result;
    //    }
    //
    //    public static String charToAreaByteCode(char str) {
    //        byte[] bs = new byte[0];
    //        try {
    //            bs = String.valueOf(str).getBytes("GB2312");
    //        } catch (UnsupportedEncodingException e) {
    //            e.printStackTrace();
    //        }
    //        String s = "";
    //        String t = "";
    //        for (int i = 0; i < bs.length; i++) {
    //            int a = Integer.parseInt(bytes2HexString(bs[i]), 16);
    //            t = (a - 0x80 - 0x20) + "";
    //            if (t.length() == 1) {
    //                t = 0 + t;
    //            }
    //            s += t;
    //        }
    //
    //        return s;
    //    }
    //
    //    public static byte[] hexStringToByteArray(String hexString) {
    //        hexString = hexString.replaceAll(" ", "");
    //        int len = hexString.length();
    //        byte[] bytes = new byte[len / 2];
    //        for (int i = 0; i < len; i += 2) {
    //            // 两位一组,表示一个字节,把这样表示的16进制字符串,还原成一个字节
    //            bytes[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4) + Character
    //                    .digit(hexString.charAt(i + 1), 16));
    //        }
    //        return bytes;
    //    }
    //
    //    public static String stringToHexString(String string) {
    //        char[] c = new char[string.length()];
    //        c = string.toCharArray();
    //        String hesStr = "";
    //        for (int i = 0; i < c.length; i++) {
    //            hesStr = hesStr + Integer.toHexString(c[i]);
    //        }
    //        return hesStr;
    //    }
    //
    //    public static String toAreaCode(String word, boolean isChina) {
    //        StringBuilder areaCode = new StringBuilder();
    //        byte[] bs;
    //        try {
    //            bs = word.getBytes("GB2312");
    //            for (byte b : bs) {
    //                int code = Integer.parseInt(Integer.toHexString(b & 0xFF), 16);
    //                if (isChina) {
    //                    int temp = code - 0x80 - 0x20;
    //                    if (temp < 10) {
    //                        areaCode.append("0").append(temp);
    //                    } else {
    //                        areaCode.append(temp);
    //                    }
    //                } else {
    //                    int temp = code - 32;
    //                    if (temp < 10) {
    //                        areaCode.append("030").append(temp);
    //                    } else {
    //                        areaCode.append("03").append(temp);
    //                    }
    //                }
    //            }
    //        } catch (UnsupportedEncodingException e) {
    //            e.printStackTrace();
    //            Log.e("liluo", "区位码转码异常,可能导致乱码或者空白字符");
    //        }
    //        return areaCode.toString();
    //    }
    //
    //    /**
    //     * 根据Unicode编码判断中文汉字和符号
    //     */
    //    public static boolean isChinese(char c) {
    //        Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
    //        return ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
    //                || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B
    //                || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS
    //                || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION;
    //    }
    //
    //    /**
    //     * 获取完整的区位码
    //     *
    //     * @param name 原始字符串
    //     * @return 区位码
    //     */
    //    public static String getTotalAreaCode(String name) {
    //        StringBuilder stringBuilder = new StringBuilder();
    //        char[] nameChar = name.toCharArray();
    //        for (char c : nameChar) {
    //            if (isChinese(c))
    //                stringBuilder.append(toAreaCode(String.valueOf(c), true));
    //            else
    //                stringBuilder.append(toAreaCode(String.valueOf(c), false));
    //        }
    //        String code = stringBuilder.toString();
    //        if (code.contains("-")) {
    //            Log.e("liluo", name + "的区位码存在非法字符:" + code);
    //            return "";
    //        } else {
    //            Log.d("liluo", name + "的区位码:" + code);
    //            return code;
    //        }
    //    }
    //
    //    public static String str2HexStr(String str) {
    //        char[] chars = "0123456789ABCDEF".toCharArray();
    //        StringBuilder stringBuilder = new StringBuilder("");
    //        byte[] bs = str.getBytes();
    //        int bit;
    //        for (int i = 0; i < bs.length; i++) {
    //            bit = (bs[i] & 0x0f0) >> 4;
    //            stringBuilder.append(chars[bit]);
    //            bit = bs[i] & 0x0f;
    //            stringBuilder.append(chars[bit]);
    //            stringBuilder.append(' ');
    //        }
    //        return stringBuilder.toString().trim();
    //    }
    }
    
    
    最终调用
    package com.example.bighua
    
    import android.annotation.SuppressLint
    import android.graphics.Color
    import androidx.appcompat.app.AppCompatActivity
    import android.os.Bundle
    import android.text.Editable
    import android.text.TextUtils
    import android.text.TextWatcher
    import android.util.Log
    import android.view.View
    import android.widget.*
    import com.example.bighua.dahuautil.BarCodeScaleGoods
    import com.example.bighua.dahuautil.SocketUtils
    import com.example.bighua.dahuautil.Utils
    
    class MainActivity : AppCompatActivity() , View.OnClickListener{
        var tv_dahua:TextView?=null
        var tv_dahua_only:TextView?=null
        var tv_clean:TextView?=null
        var ed_plu:EditText?=null //plu
        var ed_goods_name:EditText?=null //商品名
        var edit_code_header:EditText?=null //条形码前缀
        var rl_progress:RelativeLayout?=null //progressBar 布局
        var progress_bar:ProgressBar?=null //progressBar
        var tv_progress:TextView?=null //progressBar text
        var tv_model:TextView?=null
        var tv_model2:TextView?=null
        var layout_data:LinearLayout?=null //layout data
        var scaleProtocol:ScaleProtocol?=null
        var pluInfor:ScaleProtocol.PLUInfor?=null
    //    var ip = "36.110.14.51"
        var ip = "192.168.108.200"
        val goods:MutableList<BarCodeScaleGoods> = mutableListOf()
        var barHeader:String?=null
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            ed_plu = findViewById(R.id.ed_plu)
            ed_goods_name = findViewById(R.id.ed_goods_name)
            edit_code_header = findViewById(R.id.edit_code_header)
            rl_progress = findViewById(R.id.rl_progress)
            tv_progress = findViewById(R.id.tv_progress)
            progress_bar = findViewById(R.id.progress_bar)
            layout_data = findViewById(R.id.layout_data)
            tv_dahua = findViewById(R.id.tv_dahua)
            tv_dahua_only = findViewById(R.id.tv_dahua_only)
            tv_clean = findViewById(R.id.tv_clean)
            tv_model = findViewById(R.id.tv_model)
            tv_model2 = findViewById(R.id.tv_model2)
            tv_dahua?.setOnClickListener(this)
            tv_dahua_only?.setOnClickListener(this)
            tv_clean?.setOnClickListener(this)
            tv_model?.setOnClickListener(this)
            tv_model2?.setOnClickListener(this)
    
            edit_code_header?.addTextChangedListener(object :TextWatcher{
                override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
                }
    
                override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
                }
    
                override fun afterTextChanged(s: Editable?) {
                    if (!TextUtils.isEmpty(s)){
                        if (s?.length!! <2){
                            Toast.makeText(this@MainActivity,"长度需为2",Toast.LENGTH_SHORT).show()
                            return
                        }
                        barHeader = s.toString()
                        initData()
                    }
                }
    
            })
    
    
            initData()
    
    
    //        tv_clean?.setOnClickListener {
    //            Thread{
    //                var socketUtils = SocketUtils().socketUtils
    //                socketUtils.connect("192.168.108.200")
    //                var isClean = socketUtils.clearData()
    //
    //                runOnUiThread {
    //                    Toast.makeText(this,if (isClean) "清除成功" else "清除失败", Toast.LENGTH_SHORT).show()
    //                }
    //                socketUtils.closeConnect()
    //            }.start()
    //        }
    //
    //        tv_dahua?.setOnClickListener {
    //            var str = Utils.str2HexStr("土豆")
                var str = "土豆"
    //            Log.e("TAG","==-->土豆:=${str}")
    //            Thread {
    //                var socketUtils = SocketUtils().socketUtils
    //                socketUtils.connect("192.168.108.200")
    //
    //                goods.forEach {
    //                    var isSendSuccess = socketUtils.setGoods(it)
    //                    var beanIndex = goods.indexOf(it)
    //                    if (beanIndex==goods.size-1){
    //                        socketUtils.closeConnect()
    //                    }
    //                }
                    when{
                        isSendSuccess->{
                            runOnUiThread {
                                Toast.makeText(this,"success",Toast.LENGTH_SHORT).show()
                            }
                        }
                    }
    //            }.start()
    //
    //        }
        }
    
        private fun initData() {
            var barCodeScaleGoods1 = BarCodeScaleGoods()
            barCodeScaleGoods1.pluCode = "1"
            barCodeScaleGoods1.code = "1200001"
            barCodeScaleGoods1.price = 5.0
            barCodeScaleGoods1.goodsName = "冬瓜"
            barCodeScaleGoods1.unit = "0"
            barCodeScaleGoods1.barCodeHeader = if (TextUtils.isEmpty(barHeader)) "24" else barHeader
    
            var barCodeScaleGoods2 = BarCodeScaleGoods()
            barCodeScaleGoods2.pluCode = "2"
            barCodeScaleGoods2.code = "1200002"
            barCodeScaleGoods2.price = 5.0
            barCodeScaleGoods2.goodsName = "朝天椒"
            barCodeScaleGoods2.unit = "0"
            barCodeScaleGoods2.barCodeHeader = if (TextUtils.isEmpty(barHeader)) "24" else barHeader
    
            var barCodeScaleGoods3 = BarCodeScaleGoods()
            barCodeScaleGoods3.pluCode = "3"
            barCodeScaleGoods3.code = "1200003"
            barCodeScaleGoods3.price = 5.0
            barCodeScaleGoods3.goodsName = "牛奶"
            barCodeScaleGoods3.unit = "0"
            barCodeScaleGoods3.barCodeHeader = if (TextUtils.isEmpty(barHeader)) "24" else barHeader
    
            var barCodeScaleGoods4 = BarCodeScaleGoods()
            barCodeScaleGoods4.pluCode = "4"
            barCodeScaleGoods4.code = "1200004"
            barCodeScaleGoods4.price = 5.0
            barCodeScaleGoods4.goodsName = "番茄"
            barCodeScaleGoods4.unit = "0"
            barCodeScaleGoods4.barCodeHeader = if (TextUtils.isEmpty(barHeader)) "24" else barHeader
    
            var barCodeScaleGoods5 = BarCodeScaleGoods()
            barCodeScaleGoods5.pluCode = "5"
            barCodeScaleGoods5.code = "1200005"
            barCodeScaleGoods5.price = 5.0
            barCodeScaleGoods5.goodsName = "土豆"
            barCodeScaleGoods5.unit = "0"
            barCodeScaleGoods5.barCodeHeader = if (TextUtils.isEmpty(barHeader)) "24" else barHeader
    
            var barCodeScaleGoods100 = BarCodeScaleGoods()
            barCodeScaleGoods100.pluCode = "100"
            barCodeScaleGoods100.code = "1200100"
            barCodeScaleGoods100.price = 101.0
            barCodeScaleGoods100.goodsName = "注意pluCode不能跨越设置,否则失败,哪怕提示成功,一般发生异常"
            barCodeScaleGoods100.unit = "0"
            barCodeScaleGoods100.barCodeHeader = if (TextUtils.isEmpty(barHeader)) "24" else barHeader
            goods.clear()
            goods.add(barCodeScaleGoods1)
            goods.add(barCodeScaleGoods2)
            goods.add(barCodeScaleGoods3)
            goods.add(barCodeScaleGoods4)
            goods.add(barCodeScaleGoods5)
    //        goods.add(barCodeScaleGoods100)
    
            var stringBuffer = StringBuffer()
            var textView = TextView(this)
            var textView2 = TextView(this)
            goods.forEach {
                stringBuffer.append(it.toString()+"\r\n")
            }
            textView.text = stringBuffer
            textView2.text = "注意pluCode不能跨越设置,否则失败,哪怕提示成功,一版情况会显示异常例如上边pluCode==100的时候,仅作为参考"
            textView2.setTextColor(Color.parseColor("#BB996C"))
            layout_data?.addView(textView)
            layout_data?.addView(textView2)
        }
    
        @SuppressLint("SetTextI18n")
        override fun onClick(v: View?) {
            v?.let {v->
                when(v.id){
                    R.id.tv_clean->{
                        Thread {
                            var socketUtils = SocketUtils().socketUtils
                            socketUtils.connect(ip)
                            var isClean = socketUtils.clearData()
                            runOnUiThread {
                                Toast.makeText(this, if (isClean) "清除成功" else "清除失败", Toast.LENGTH_SHORT).show()
                            }
                            socketUtils.closeConnect()
                        }.start()
    
                    }
                    R.id.tv_dahua->{//批量更新
                        rl_progress?.visibility = View.VISIBLE
                        Log.e("TAG","==-->批量更新开始执行")
                        Thread {
                            var socketUtils = SocketUtils().socketUtils
                            var isConnect = socketUtils.connect(ip)
                            if (!isConnect){
                                runOnUiThread {
                                    Toast.makeText(this,"socket连接失败",Toast.LENGTH_SHORT).show()
                                    rl_progress?.visibility = View.GONE
                                }
                                return@Thread
                            }
                            goods.forEach {
                                Log.e("TAG","==-->商品信息:= $it")
                                var isSendSuccess = socketUtils.setGoods(it)
                                var beanIndex = goods.indexOf(it)
                                runOnUiThread {
                                    progress_bar?.max = goods.size
                                    progress_bar?.progress = beanIndex+1
                                    Log.e("TAG","==-->进度0:="+progress_bar?.progress+"  "+progress_bar?.max)
                                    Log.e("TAG","==-->进度1:="+beanIndex+"  "+goods.size)
                                    tv_progress?.text ="${beanIndex+1}/${goods.size}"
                                    if (beanIndex==goods.size-1){
                                        rl_progress?.visibility = View.GONE
                                        Toast.makeText(this,"写入完成",Toast.LENGTH_SHORT).show()
                                    }
                                }
                                if (beanIndex==goods.size-1){
                                    socketUtils.closeConnect()
                                }
                                Thread.sleep(1000)
                            }
                        }.start()
                    }
                    R.id.tv_dahua_only->{//单条更新
                        var barCodeScaleGoods1 = BarCodeScaleGoods()
                        barCodeScaleGoods1.pluCode = if (TextUtils.isEmpty(ed_plu?.text)) "1" else ed_plu?.text.toString()
                        barCodeScaleGoods1.code = "1200001"
                        barCodeScaleGoods1.price = 5.0
                        barCodeScaleGoods1.goodsName = if (TextUtils.isEmpty(ed_goods_name?.text)) "暂无" else ed_goods_name?.text.toString()
                        barCodeScaleGoods1.unit = "0"
                        barCodeScaleGoods1.barCodeHeader = if (TextUtils.isEmpty(barHeader)) "24" else barHeader
                        Thread{
                            var socketUtils = SocketUtils().socketUtils
                            socketUtils.connect(ip)
                            var isSendSuccess = socketUtils.setGoods(barCodeScaleGoods1)
                            runOnUiThread {
                                if (isSendSuccess){
                                    Toast.makeText(this,"写入完成",Toast.LENGTH_SHORT).show()
                                }else{
                                    Toast.makeText(this,"写入失败",Toast.LENGTH_SHORT).show()
                                }
                            }
                            socketUtils.closeConnect()
                        }.start()
                    }
                    R.id.tv_model->{
                        Thread {
                            var socketUtils = SocketUtils().socketUtils
                            socketUtils.connect(ip)
                            var isClean = socketUtils.changePrice()
                            runOnUiThread {
                                Toast.makeText(this, if (isClean) "设置成功" else "设置失败", Toast.LENGTH_SHORT).show()
                            }
                            socketUtils.closeConnect()
                        }.start()
                    }
                    R.id.tv_model2->{
                        Thread {
                            var socketUtils = SocketUtils().socketUtils
                            socketUtils.connect(ip)
                            var isClean = socketUtils.changeWeight()
                            runOnUiThread {
                                Toast.makeText(this, if (isClean) "设置成功" else "设置失败", Toast.LENGTH_SHORT).show()
                            }
                            socketUtils.closeConnect()
                        }.start()
                    }
                }
            }
        }
    
    }
    
    特别感谢掘金大佬

    感谢子物的技术博客,直接缩短了我调试的时间,灰常感谢,下边是他的掘金地址

      https://juejin.cn/post/6844904201613475848
    

    内部应该含有jar,直接复制用就行了。没有jar的话自己编译一个就ok。基本不用怎么弄了

    展开全文
  • 大华电子软件,适合tm-15a tm-f
  • 收银系统中的条码秤上位机的驱动,网络很难下载.
  • 上海大华条码秤上位机1216缺少Dao/Jet db
  • 大华条码秤数据同步发送数据格式

    千次阅读 2020-10-10 21:09:17
    大华条码秤数据同步发送数据格式 大华条码秤网络通讯协议为TCP协议,秤的默认端口为4001 发送数据格式为: (string字符串类型数据) !0V + 4位PLU + A + 7位商品编码 + 6位数价格(单位分) + 模式(0:称重,1:...
  • 一:键盘介绍:快捷键(1-71号白色按键):设置或调用商品,使商品快速调用打印PLU键:当手工输入商品PLU(条码)后,按该键调出商品功能键:按该键可进入设置程序,设置秤的各项参数数字键0-9:在任何情况下输入数字倍数...
  • 上海大华条码秤的调试方法

    千次阅读 2020-12-20 07:25:16
    --39706----确认,进入参数设置界面然后按0~~9数字键输入参数值,按确认键保存进入下一项设置par00addr48通讯地址par01dense4打印浓度(0~9)par02lockp00单价锁定par03tunit01默认单位设置(00不采用01采用)(打印为...
  • 大华秤demo_Android版本

    2021-12-31 17:53:38
    android对接大华条码秤方案:大华对外并没有提供相关客户端代码,因此翻遍了网络找了找资料,同时也咨询了大华官方的技术人员,在经历了将近一周的时间,终于搞出来满足需求的一个demo 需求:1、批量写入商品到大华...
  • 大华条码秤开发之-快捷键传输

    千次阅读 2020-06-11 09:01:16
    0L00A00010002000300040005000600070008000900100011001200130014001500160017001800190020002100221153002400250026002700280029003000310032003300340035这一串进行16进制转换在...,第一页35个快捷键就设置好了...
  • 优质参考文档一:键盘介绍:快捷键(1-71号白色按键):设置或调用商品,使商品快速调用打印PLU键:当手工输入商品PLU(条码)后,按该键调出商品功能键:按该键可进入设置程序,设置秤的各项参数数字键0-9:在任何情况...
  • 一:键盘介绍:快捷键(1-71号白色按键):设置或调用商品,使商品快速调用打印PLU键:当手工输入商品PLU(条码)后,按该键调出商品功能键:按该键可进入设置程序,设置秤的各项参数数字键0-9:在任何情况下输入数字倍数键:在...
  • 上海大华条码秤上位机1216 新版V1.1

    热门讨论 2012-01-03 14:38:27
    条码秤的设置帮助 以及上位机软件 最新版本1.1 取代1216版 大华条码秤上位机 ---------- 图解如何 进行条码秤安装以及 条码秤设置 打印等。
  • 大华TM-15A条码秤说明书扫描版超高清及上位软件
  • 上海大华条码秤上位机1216_称的软件

    热门讨论 2011-11-23 12:55:13
    上海大华条码秤 大华秤 大华称 大华 自带光盘中的软件,用来维护大华秤商品信息、签的格式等。
  • 上海大华电子接口说明,DEMO,PLU样本文件与说明等 上海大华电子接口说明,DEMO,PLU样本文件与说明等
  • 大华条码秤上位机软件,设置大华条码秤的格式,IP,初始化相关的参数

空空如也

空空如也

1 2 3 4
收藏数 73
精华内容 29
热门标签
关键字:

大华条码秤条码设置