斑马打印机(zebraZT410R-203dpi)打印RFID标签流程

1.首先连接到打印机
下面代码为连接打印机的代码,其中ip为打印机ip地址,
"TcpConnection.DEFAULT_CPCL_TCP_PORT"的值为6101。

public Zt410Util(String ip) throws ConnectionException {
  	    Connection con = new TcpConnection(ip, TcpConnection.DEFAULT_CPCL_TCP_PORT);
        con.open();
 }

2.接着利用dom4j把xml(里面放着标签的模板信息)分别转化为Set和Model
其中最后的list[0]存的是这个模板的set也就是设置,list[1]及以后存的是这个模板的模板信息也就是这个标签上有多少个字段以及每个字段所具有的属性(如位置,内容等),获取的方式类似于爬虫的dom元素获取。

public List<String> ZT410Convert(String xml) throws Exception {
        List<String> list = new ArrayList<String>();
        //将xml字符串转为对象
        Document doc = DocumentHelper.parseText(xml);
        Element rootElement = doc.getRootElement();
        Element items = rootElement.element("items");
        List<Element> item = items.elements("item");

        Element setup = rootElement.element("setup");
        Element ifSubString = setup.element("ifSubString");
        Element printPaper = setup.element("printPaper");
        // list.add(printPaper.element("yLength").getText()+","+printPaper.element("xLength").getText());
        Element printsetup = setup.element("printSetup");
        //Element fontset = printsetup.element("fontSet");
        Element printerType = printsetup.element("PrinterType");
        // list.add(error.element("isError").getText()+","+error.element("repeatNum").getText()+","+error.element("repeatPaper").getText());
        Element autocal = printsetup.element("autocal");
        //list.add(autocal.element("isAutocal").getText()+","+autocal.element("feedNum").getText()+","+autocal.element("unwindingNum").getText()+","+
        // autocal.element("feedLimit").getText()+","+autocal.element("unwindingLimit").getText()+","+printsetup.element("move").getText());
        Element move = printsetup.element("move");
        list.add(printPaper.element("yLength").getText()+","+printPaper.element("xLength").getText()+","+printsetup.element("fontSet").getText()+","+printerType.element("type").getText()+","+printerType.element("repeatNum").getText()+","+printerType.element("repeatPaper").getText()+","+
                autocal.element("isAutocal").getText()+","+autocal.element("feedNum").getText()+","+autocal.element("unwindingNum").getText()+","+
                autocal.element("feedLimit").getText()+","+autocal.element("unwindingLimit").getText()+","+printsetup.element("move").getText()+","+ifSubString.getText());
        for (Element element : item) {
            Element type = element.element("type");
            Element isVariable = element.element("isVariable");
            Element content = element.element("content");
            Element cordinateX = element.element("cordinateX");
            Element cordinateY = element.element("cordinateY");
            Element font = element.element("font");
            Element size = element.element("size");
            list.add(type.getText()+","+isVariable.getText()+","+content.getText()+","+cordinateX.getText()+","+cordinateY.getText()+","+font.getText()+","+size.getText());
        }

        return list;

    }

下面代码就是获取刚才的list[0]也就是set设置

public static List<String> Zt410XmlToSet(String xml) throws Exception {
        Dom4jXmlToDocument dom4jXmlToDocument = new Dom4jXmlToDocument();
        List<String> setUp = new ArrayList<String>();
        List<String> convert = dom4jXmlToDocument.ZT410Convert(xml);

        //设置
        if (convert != null) {
            setUp.add(convert.get(0));
        }
        return setUp;
    }

下面代码就是获取刚才的list[1]及以后也就是model

public static List<String> Zt410XmlToModel(String xml) throws Exception {
        Dom4jXmlToDocument dom4jXmlToDocument = new Dom4jXmlToDocument();
        List<String> convert = dom4jXmlToDocument.ZT410Convert(xml);
        List<String> printModel = new ArrayList<String>();
        //模板
        for (int i = 1; i < convert.size(); i++) {
            printModel.add(convert.get(i));
        }
        return printModel;
    }

3.接下来向打印机发送命令并获取反馈
第3步发送命令又分为x步

public PrintResult sendCommandAndGetResponse(List<String> setUp, List<String> printModel, List<String> printValue) throws Exception {
        //3.1
        ParamToCommands_Zt410 paramToCommands_zt410 = new ParamToCommands_Zt410();
        String commands = paramToCommands_zt410.convertParamtoCommands_RFID(setUp, printModel, printValue);
        //3.2
        byte[] byteZpl = commands.getBytes();
        byte[] result = con.sendAndWaitForResponse(byteZpl, 6000, 6000, "");
        //3.3
        PrintResult pt = new PrintResult();
        try {
            String result_str = new String(result);

            if (result_str.length() < 20) {
                for (int i = 0; i < 2; i++) {
                    byte[] bytes = con.sendAndWaitForResponse(byteZpl, 6000, 6000, "");
                    //读取RFID
                    printlogicUtil.zt410ReadRFID(bytes,pt);
                    //con.close();
                    if (bytes.length > 20) {
                        return pt;
                    }
                }
                //再一次自动校验
                String checkcommands = paramToCommands_zt410.checkRFID();
                byte[] bytes = checkcommands.getBytes("UTF-8");
                con.sendAndWaitForResponse(bytes, 30000, 30000, "");
                //校验完毕读取RFID
                printlogicUtil.zt410ReadRFID(bytes,pt);
            }
            String[] rfid = result_str.split("\\r\\n");

            String epc = rfid[0].substring(5);
            String tid = rfid[1].substring(5);
            if (epc.equals(tid) && epc.length() == 24 && tid.length() == 24) {
                pt.setEpc(epc);
                pt.setTid(tid);
                con.close();
            }
            con.close();
//            pt.setTid(result_str.substring(6,30));
//            pt.setEpc(result_str.substring(36,68));
        } catch (Exception e) {
            e.printStackTrace();
            pt.setEpc("");
            pt.setTid("");


        }
        return pt;
    }

3.1把参数转换为指令
①把标签的TID读取到然后写入EPC区。
②获取打印对象列表,把printValue(值)赋给printModel中的变量中去
③把打印设置赋值给打印设置对象
④设置模板,将set转化为打印机能够识别的命令
⑤设置对象,将model转化为打印机能够识别的命令

public String convertParamtoCommands_RFID(List<String> setUp,List<String> printModel, List<String> printValue){
		//①
        readTIDAndWriteEPC();
        //②
        List<PrintObject> printObjectList = ConvertParamToList.convertParamToList(setUp,printModel,printValue);
        //③
        ZT410PrintSetUp printSetUp = ConverParamToObject.ZTlistToObject(setUp);
        //④
        setModel(printSetUp.getYLength(),printSetUp.getXLength(),printSetUp.getType());
        //⑤
        for(PrintObject printObjects:printObjectList){
            if(printObjects.getType().equals(PrintModel.CONTENT)){
                setContent(printSetUp.getFontSet(),printObjects.getContent(),printObjects.getX(),printObjects.getY(),printObjects.getSize());
            }else if(printObjects.getType().equals(PrintModel.BARCODE)){
                if (printObjects.getSize() == 8.0) {
                    setBarCode300(printObjects.getContent(),printObjects.getX(),printObjects.getY(),printObjects.getSize());
                }else {
                setBarCode(printObjects.getContent(),printObjects.getX(),printObjects.getY(),printObjects.getSize());
                }
            }
            else if(printObjects.getType().equals(PrintModel.QRCODE)){
                if (printObjects.getSize() == 8.0) {
                    setQRCode300(printObjects.getContent(),printObjects.getX(),printObjects.getY(),printObjects.getSize());
                }else {
                    setQRCode(printObjects.getContent(),printObjects.getX(),printObjects.getY(),printObjects.getSize(),printSetUp.getType());
                }
            }else if(printObjects.getType().equals(PrintModel.RFID_USER)){
                writeUSER(printObjects.getContent());

            }
        }
//        writeEPC();
//        readTID();
//        readEPC();

        return getPrintContent();
    }

3.2把指令转换为字节码并发送
3.3写入epc和tid
至此打印结束

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以按照以下步骤使用SP432P410R控制HC-SR04超声波避障测距模块,并使用C语言和库函数进行开发。请注意,这是一个简单的例程,你可以根据自己的需求进行修改和扩展。 1. 创建工程和文件: - 在你的开发环境中创建一个新的C语言工程。 - 创建以下文件:main.c, ultrasonic.h, ultrasonic.c。 2. 配置GPIO: - 打开ultrasonic.h文件,并定义超声波模块所需的触发引脚和接收引脚。 - 在ultrasonic.c文件中,使用库函数配置这两个引脚为输出和输入。 3. 初始化超声波模块: - 在ultrasonic.h文件中定义一个初始化函数,例如ultrasonic_init()。 - 在ultrasonic.c文件中实现该函数,使用库函数初始化超声波模块所需的GPIO引脚。 4. 触发测距: - 在ultrasonic.h文件中定义一个触发测距函数,例如ultrasonic_trigger()。 - 在ultrasonic.c文件中实现该函数,通过设置触发引脚为高电平一段时间来触发测距。 5. 接收测距结果: - 在ultrasonic.h文件中定义一个接收测距结果的函数,例如ultrasonic_receive()。 - 在ultrasonic.c文件中实现该函数,使用库函数等待接收引脚的高电平并计时,然后将计时结果返回。 6. 主程序: - 打开main.c文件,并在其中包含ultrasonic.h头文件。 - 在main函数中调用ultrasonic_init()函数初始化超声波模块。 - 使用ultrasonic_trigger()函数触发测距。 - 使用ultrasonic_receive()函数接收测距结果。 - 将测距结果进行处理和显示,例如通过串口输出。 这个例程使用C语言和库函数开发,避免了直接操作寄存器。你可以根据自己的需求对代码进行修改和优化。注意,在实际使用中,可能需要考虑一些延时和校准等因素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值