精华内容
下载资源
问答
  • java硬件对接
    2020-09-10 11:57:17

    由于最近在用java对接一些物联网的智能设备,在这构成中经历了各种折腾之后,总结出来的一些方法和经验,希望能帮助在路上的同学们。下边是一个计算校验和的方法

     


    public class CheckNum {
     
      /*  *//**
         * 求校验和的算法
         * @param b 需要求校验和的字节数组
         * @return 校验和
         *//*
        public static String sumCheck(byte[] b, int len){
            int sum = 0;
            for(int i = 0; i < len; i++){
                sum = sum + b[i];
            }
            if(sum > 0xff){ //超过了255,使用补码(补码 = 原码取反 + 1)
                sum = ~sum;
                sum = sum + 1;
            }
            String temp = Integer.toHexString( (byte) (sum & 0xff) & 0xFF);  
            return temp;
        }*/
        /***
         * 计算校验和
         * @param data
         * @return
         */
        public static String makeChecksum(String data) {
              if (data == null || data.equals("")) {
               return "";
              }
              int total = 0;
              int len = data.length();
              int num = 0;
              while (num < len) {
               String s = data.substring(num, num + 2);
              // System.out.println(s);
               total += Integer.parseInt(s, 16);
               num = num + 2;
              }
              /**
               * 用256求余最大是255,即16进制的FF
               */
              int mod = total % 256;
              String hex = Integer.toHexString(mod);
              len = hex.length();
              // 如果不够校验位的长度,补0,这里用的是两位校验
              if (len < 2) {
               hex = "0" + hex;
              }
              return hex;
        }
        public static void main(String[] args) {
            String hex = makeChecksum(" 00 00 01 59 2C 22 0D 19 08 14 39 03 00 00 00 00 00 00 00 00 00 00 00 00 03".replace(" ", ""));
            System.out.println(hex);
        }
       /* @Test
        public void test1(){
            byte[] b = new byte[7];
            b[0] = (byte) 0xfd;
            b[1] = (byte) 0xfc;
            b[2] = (byte) 0x08;
            b[3] = (byte) 0x80;
            b[4] = (byte) 0x02;
            b[5] = (byte) 0x00;
            b[6] = (byte) 0x0a;
            String temp = sumCheck(b, 7); 
            System.out.printf(temp);//正确的结果应该是8d
        }*/
    }

     

    一个用java对接物联网设备的计算校验和方法,希望对大家有用。

    本来从事物联网行业两年有余,希望和同行交流学习。

     

    更多相关内容
  • java硬件对接经验总结

    千次阅读 2021-03-25 16:42:46
    总结一下就是之前没有过硬件对接经验和现场业务流程不熟悉。 二、解决思路 1、厂家有提供他们的说明文档,先把文档大致看下,然后再和厂家沟通; 2、业务和数据流转和现场的负责人沟通; 总结一下就是:不耻下问,...

    一、问题描述

    项目现场需要对接硬件,机缘巧合下派我出差对接。暂定要对接读卡器通道门两个硬件。

    难点描述:
    1、业务流程不清楚、数据流转来源和去向未确定,不知从何下手;
    2、时间和学习成本高;
    3、基本知识不懂,和硬件厂家沟通比较慢;
    4、部署调试、数据交互方案设计;
    总结一下就是之前没有过硬件对接经验现场业务流程不熟悉

    二、解决思路

    1、厂家有提供他们的说明文档,先把文档大致看下,然后再和厂家沟通;
    2、业务和数据流转和现场的负责人沟通;
    总结一下就是:不耻下问,明白自己要做什么之后再动手去做。

    3、业务流程:读卡器通过usb口连接Windows电脑,读卡器刷卡,硬件后端(下面简称hardware)代码读取卡片的芯片数据,然后推送给A系统,A系统把芯片数据推送给前端展示。即:读卡器刷卡,前端页面展示芯片数据。

    4、为方便大家理解业务,可以认为是运动员和工牌的证件写入和证件核验两部分。证件写入:运动员和工牌绑定;证件核验,在证件写入之后,检验芯片关联出的用户数据是否正确。

    三、解决方案

    1、人证读卡器

    (1)通过串口调试工具获取到芯片数据

    先用工具调试通过,学习一下指令怎么处理。
    ①读卡器数据交互格式:
    在这里插入图片描述

    ②读卡器需要先设置读卡模式,就以这个指令来调试吧
    在这里插入图片描述
    解释:
    0x代表是16进制,不用管,之后取后两位即可。如0x03,则取03.
    校验字可以通过网页计算:在线异或计算
    在这里插入图片描述
    ③使用工具发送指令:

    在这里插入图片描述
    使用的工具是,友善串口调试工具。红框设置连接参数;蓝框发送指令;黄框是响应数据

    (2)代码开发及交互方案演进

    具体代码就不再多描述了,百度一下java串口编程即可。

    读卡器是一问一答模式,即发送读卡指令给读卡器,读卡器才会响应给你,即被动模式
    ①hardware获取芯片:
    暂定用定时任务,发送读卡指令给读卡器,读取到芯片数据则推送到mq,让A系统接收芯片数据推送给前端;
    ②重复推送问题:
    假设定时任务1S一次,一张卡放在读卡器上10S,则hardware会读取十次芯片数据推送mq,A系统接收到mq的数据就推送给前端。从效果来说,前端没有明显的闪动,但是从交互来说,需要优化一下。即,卡放在读卡器上面10S,在此期间hardware只发送一次数据到mq里。个人的方案是,读取一个芯片数据,将该芯片数据作为key存入redis,并给一个过期时间(略大于定时任务间隔,尽量减少延迟),下次读取数据校验redis是否有该key,有的话则不推送至mq。
    ③hardware兼容读卡器模式:
    后续和读卡器厂家沟通,读卡器升级后支持主动模式(有芯片数据,读卡器主动推送),考虑到老系统的兼容问题,即hardware要支持读卡器的主动和被动两种模式。
    ④数据展示和读卡器要一一对应:
    前面说到,读卡器通过usb连接Windows,hardware是读取读卡器的芯片数据。则Windows、读卡器、hardware是一一对应关系,即hardware部署在有读卡器的Windows上,读卡器-A的数据只发送给hardware-A,然后在Windows-A页面展示;但是问题在于,A系统,也就是接收mq芯片数据的服务,是部署在Linux上的,也就是说A系统无法区分芯片数据是哪个读卡器读的,要推送至哪个前端页面。解决方案:hardware推送至mq的芯片数据,携带一个本机ip字段;Windows操作页面和A系统建立socket通道时,前端传参本机ip,A系统通过map保存socket通道,key为ip,value为socket。这样就能区分该芯片数据,是哪个读卡器推送,要推送至哪个前端页面,不会让数据交叉。
    ⑤离线模式回显芯片
    客户后来提出需求:在局域网断网的情况下,刷卡的时候,页面也要显示芯片数据(只针对芯片回显,其他的比如接口请求则不做要求)。解决方案:前端新建一个socket通道连接本机hardware。一共建立两个socket通道,一个连服务器的A系统,用于在线流程;一个连本地Windows的hardware,用于离线流程(分两个socket是因为不想让hardware沾染A系统的业务代码,各司其职就好)。则hardware需要定时检测相关服务器是否可达,具体代码就不描述了,根据服务器是否可达走相关代码逻辑。
    概括一下流程:
    在线流程:读卡器 -> hardware -> rabbitmq -> A系统 -> netty -> 前端
    离线流程:读卡器 -> hardware -> netty -> 前端
    自动获取串口名称
    代码开发到这程度,功能是实现了,但是还有优化的地方。比如hardware是通过配置文件读取串口号的,同一个读卡器用在不同Windows电脑,串口号可能不一样,可能Windows-A是COM3,到了Windows-B就是COM7,所以如果hardware能自动获取串口号,那么也节省了部署的成本。
    在这里插入图片描述
    截图的是Windows连接显示屏的串口,和读卡器的一样,都是COM开头。如果能获取前面的中文,用来区分那就完美了,详情参考:
    Java获取串口名称
    JAVA代码执行CMD命令
    ⑦Windows部署jar脚本(简单):
    启动脚本start.bat:

    @echo off
    REM 取消 快速编辑模式,防止程序卡着
    reg add HKEY_CURRENT_USER\Console /v QuickEdit /t REG_DWORD /d 00000000 /f
    REM 指明控制台编码UTF-8
    chcp 65001
    REM 命令行窗口的名字
    title "hardware"
    REM jar包存放在Windows的绝对位置,指明外置配置文件绝对路径
    java -Dfile.encoding=utf-8 -jar D:\hardware.jar --spring.cloud.bootstrap.location=D:\bootstrap.yml
    pause
    

    停止脚本stop.bat:

    @echo off
    REM hardware的运行port
    set port=8080
    for /f "tokens=1-5" %%i in ('netstat -ano^|findstr ":%port%"') do (
     echo kill the process %%m who use the port 
     taskkill /pid %%m -t -f
     goto q
    )
    :q
    

    前端部署:
    Windows部署前端

    2、通道门

    通道门对接就大致概括下吧,通道门的作用本来我以为是最终入场的时候,运动员通过通道门,电脑屏幕显示该人员的信息。但是实际不是这么回事,通道门暂时是用来做“证件校验”的另一个方法。也就是说,人员的证件写入,芯片数据来源只有读卡器;但是证件核验,有读卡器和通道门两种。

    (1)通道门对接方式是厂家的dll动态库

    相关资料请百度JNA或JNI,hardware加载动态度用的是绝对路径。通道门也是问答模式,和人证读卡器的区别在于,通道门有厂家提供的dll动态库,直接调用相关函数即可。dll动态度处理代码:

    public static String loadLib(String libName) {
            String resourcePath = "/" + libName;
            String folderName = System.getProperty("user.dir") + "/dll/";
            File folder = new File(folderName);
            if (!folder.exists()) {
                folder.mkdirs();
            }
            File libFile = new File(folder, libName);
            if (libFile.exists()) {
                System.load(libFile.getAbsolutePath());
            } else {
                try {
                    InputStream in = ChannelDoorConfig.class.getResourceAsStream(resourcePath);
                    FileUtils.copyInputStreamToFile(in, libFile);
                    in.close();
                    System.load(libFile.getAbsolutePath());
                } catch (Exception e) {
                    throw new RuntimeException("Failed to load required lib", e);
                }
            }
            String libAbsolutePath = libFile.getAbsolutePath();
            log.info("{} absolute-path -> {}",libName,libAbsolutePath);
            return libAbsolutePath;
    }
    

    (2)双网卡配置问题

    在三-1-(2)-④提到过,芯片数据要能区分是哪个Windows的数据,所以hardware会获取本机ip。但是由于通道门是单独的网段,所以本机Windows配置双ipv4网段后,代码没办法区分内网ip和通道门ip。
    在这里插入图片描述

    解决方案:通道门采用的是网口对接,所以配置文件会有通道门的ip,可以截取前三段的ip段落,然后和获取的ip进行比较。

    3、车证读卡器

    (1)流程

    车证读卡器对接的业务流程和人证的一摸一样,也分证件写入和证件核验等流程,不再多说。

    (2)SDK对接

    相关概念及流程:
    ①盘点,读卡器搜查芯片数据的过程就叫盘点。
    ②盘点期间,只要芯片在范围内,就会一直向hardware推送数据
    ③数据交互:调用dll的盘点函数(可设置盘点时长),程序实现回调函数,盘点到芯片数据就调用回调函数。即一次盘点,可能回调函数多次被调用。

    dll盘点函数之一,EPC芯片盘点函数:
    EPC_SEARCH(INT32U handle, EPC_INV_PARAM_SIMPLE *param, RFID_PACKET_CALLBACK_FUNCTION func)
    ④JNA实现dll结构体,
    即定义一个实体类,继承com.sun.jna.Structure。根据dll中的结构体定义相关字段即可,注意要定义取值顺序:
    在这里插入图片描述
    ⑤JNA实现dll回调函数,以及Callback的问题
    自定义接口,继承com.sun.jna.Callback接口,自己定义方法即可,入参要和dll函数保持一致,让impl类实现回调逻辑。注意回调函数入参不支持数组,要使用Pointer类,否则报错
    在这里插入图片描述
    在这里插入图片描述
    debug查看原因:
    com.sun.jna.CallbackReference类的构造方法:
    在这里插入图片描述
    com.sun.jna.CallbackReference类的isAllowableNativeType方法:

    private static boolean isAllowableNativeType(Class cls) {
            return cls == Void.TYPE || cls == Void.class 
    		|| cls == Boolean.TYPE || cls == Boolean.class 
    		|| cls == Byte.TYPE || cls == Byte.class 
    		|| cls == Short.TYPE || cls == Short.class 
    		|| cls == Character.TYPE || cls == Character.class 
    		|| cls == Integer.TYPE || cls == Integer.class 
    		|| cls == Long.TYPE || cls == Long.class 
    		|| cls == Float.TYPE || cls == Float.class 
    		|| cls == Double.TYPE || cls == Double.class 
    		|| ByValue.class.isAssignableFrom(cls) && Structure.class.isAssignableFrom(cls) || Pointer.class.isAssignableFrom(cls);
    }
    

    解决方法:将数组类型换成Pointer类型即可,调用getByteArray方法获取byte[]数据。

    四、总结

    1、不怕任务多和难,只要有相关文档和厂家人员沟通,什么都不是事;
    2、对于从未接触的领域,一定要不耻下问,不耻下问,不耻下问;
    3、这次对接硬件,也是想着多接触一些技术,见见世面;

    萌新发言,不喜勿喷,欢迎大佬指出不当之处!

    展开全文
  • Java调用硬件接口

    2021-02-27 19:04:59
    使用Java调用DLL动态链接库的方案通常有三种:JNI, Jawin, Jacob. 其中JNI(Java NativeInterface)是Java语言本身提供的调用本地已编译的函数库的方法,本身具有跨平台性,可以在不同的机器上调用不同的本地库。Jawin...

    使用Java调用DLL动态链接库的方案通常有三种:JNI, Jawin, Jacob. 其中JNI(Java Native

    Interface)是Java语言本身提供的调用本地已编译的函数库的方法,本身具有跨平台性,可以在不同的

    机器上调用不同的本地库。Jawin和Jacob都是sourceforge.net的开源项目,都是基于JNI技术的依赖Wi

    ndows的实现,使得在Windows平台下使用COM和DLL的更加方便。

    一、JNI(Java本地方法调用)

    JNI的应用方案是基于Java类和本地函数相映射的。其使用DLL的步骤还是相对比较麻烦,不但涉及

    到Java编程,还涉及到C/C++编程。

    JNI的使用步骤是:

    1. 编写Java类,用该类将DLL对外提供的函数服务进行声明,其中的Java方法均声明为native,其方法

    签名可以自定义,不用实现函数体。

    2. 用Javah工具将该Java类生成对应的.h头文件。

    3. 最重要的比较麻烦的一步:编写C/C++代码实现.h头文件中声明的函数,该C/C++代码中包含jni.h头文

    件,并且编写代码时使用其中定义好的数据类型作为函数的输入和返回数据类型进行编程。用这种方法

    实现数据类型转换。在该步骤中,可以在C/C++代码中调用已经存在的DLL库(当别人给我们提供一个现

    成的dll控件时,我们只知道接口,不能改变它的实现,就需要“自定义的dll”调用“现成dll”)

    4. 另外编写的Java代码时就可以使用该Java类了。

    在第3步中,编写C/C++函数时,可以使用一个叫interface pointer的env指针来调用JNI提供的一系列(

    很多)函数,用这些函数来访问JVM的对象和数据。

    使用JNI的缺点:使用比较麻烦,需要对已有的DLL进行封装,需要对C/C++比较了解。

    使用JNI的优点:可以跨平台调用本地库。

    二、Jawin

    官方网站:http://jawinproject.sourceforge.net/

    Jawin的应用方案是基于函数调用时采用原始字节流传递数据的。就是在Java中指明一个DLL中的某个函

    数后,通过原始字节流(需要考虑参数数据类型所占的存储字节数及系统使用的字节序列)传递给该DLL

    函数需要的参数,其返回值也是通过原始字节流解析的方式获得正确的值。

    Jawin有一个Jawin.dll和Jawin.jar,根据开发环境不同,需要不同的配置.

    使用Jawin的缺点:不方便调试,几乎所有的错误都抛出同样的异常COMException;需要对数据类型的

    转换比较了解;不能跨平台,对Windows的依赖性比较强。

    使用Jawin的优点:方便使用,不用进行C/C++开发,不用对原始DLL进行封装就可以方便使用。

    本人体会:我在用 Jawin 调用单点的dll时,多次出现错误,最终调试失败,后来查看它的官方文档,

    发现它对某些com调用不支持。

    三、Jacob

    官方文档:http://danadler.com/jacob/

    Jacob是Java-Com Bridge的缩写,也可以用来调用DLL。其底层也是使用JNI实现,也具有Windows 的平

    台依赖性。

    该控件调用相当方便,可以调用com和active, 几分钟就可以搞定,它下载后有一个dll和一个jar包,

    把dll放到WIN_HOME/system32/下既可,把jar包放到工程的classpath下。

    下面是我调用单点dll的事例:

    import com.jacob.com.*;

    public class CallSSO {

    private static Dispatch dif;

    //加载单点控件SSOCrypto.SSOCrypt.1

    static {

    dif = new Dispatch("SSOCrypto.SSOCrypt.1");

    }

    //产生随机码,调用单点的接口SSORadomGen,传递参数是strPlainString

    public static int SSORadomGen(String strPlainString)

    {

    Variant radom = Dispatch.call(dif, "SSORadomGen", new Variant(strPlainString));

    return radom.getInt();

    }

    //取的加密串,调用单点的接口SSOEncrypt,传递参数是strPlainString,lngRandomnum,strSvrCert

    public static String SSOEncrypt(String strPlainString,

    int lngRandomnum)

    {

    String strSvrCert ="1BQYR-YLGXV-QM439-CJSCS-TCN6V";

    Variant encrypt = Dispatch.call(dif, "SSOEncrypt", new

    Variant(strPlainString),new Variant(lngRandomnum),new Variant(strSvrCert));

    return encrypt.getString();

    }

    }

    缺点:不能跨平台,对Windows的依赖性比较强。

    优点:调用相当方便,不用进行C/C++开发,不用对原始DLL进行封装就可以方便使用。

    总结:以上三种方法是现在常用的java调用dll方法,本人感觉第三种比较好用,当然,每种都有优缺

    点,还有性能问题,我没有测试比较,请大家自己试一下吧

    展开全文
  • public classHexUtil {public static byte[] hexStringToBytes(String hexString) {if (hexString == null || hexString.equals("")) {return null;}//toUpperCase将字符串中的所有字符转换为大写hexString =hex...

    public classHexUtil {public static byte[] hexStringToBytes(String hexString) {if (hexString == null || hexString.equals("")) {return null;

    }//toUpperCase将字符串中的所有字符转换为大写

    hexString =hexString.toUpperCase();int length = hexString.length() / 2;//toCharArray将此字符串转换为一个新的字符数组。

    char[] hexChars =hexString.toCharArray();byte[] d = new byte[length];for (int i = 0; i < length; i++) {int pos = i * 2;

    d[i]= (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));

    }returnd;

    }//charToByte返回在指定字符的第一个发生的字符串中的索引,即返回匹配字符

    private static byte charToByte(charc) {return (byte) "0123456789ABCDEF".indexOf(c);

    }public static String BinaryToHexString(byte[] bytes) {

    String hexStr= "0123456789ABCDEF";

    String result= "";

    String hex= "";for (byteb : bytes) {

    hex= String.valueOf(hexStr.charAt((b & 0xF0) >> 4));

    hex+= String.valueOf(hexStr.charAt(b & 0x0F));

    result+=hex ;

    }returnresult;

    }//两位一字符,倒序排序

    public staticString reverseString(String str) {

    List strlist=newArrayList();char[] chr =str.toCharArray();for (int i = 0 ; i < chr.length; i=i+2) {

    String s=chr[i]+""+chr[i+1];

    strlist.add(s);

    }

    Collections.reverse(strlist);

    String result="";for(String v:strlist){

    result+=v;

    }returnresult;

    }/*** 16进制转换成为string类型字符串

    *@params

    *@return

    */

    public staticString hexStringToString(String s) {if (s == null || s.equals("")) {return null;

    }

    s= s.replace(" ", "");byte[] baKeyword = new byte[s.length() / 2];for (int i = 0; i < baKeyword.length; i++) {try{

    baKeyword[i]= (byte) (0xff & Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16));

    }catch(Exception e) {

    e.printStackTrace();

    }

    }try{

    s= new String(baKeyword, "UTF-8");newString();

    }catch(Exception e1) {

    e1.printStackTrace();

    }returns;

    }/*** 字符串转化成为16进制字符串

    *@params

    *@return

    */

    public staticString strTo16(String s) {

    String str= "";for (int i = 0; i < s.length(); i++) {int ch = (int) s.charAt(i);

    String s4=Integer.toHexString(ch);

    str= str +s4;

    }returnstr;

    }//将16进制字符串自动补全到8位 并且倒序排序

    public staticString full8(String lenth) {int a =lenth.getBytes().length;int b = 8 -a;for (int i = 0; i < b; i++) {

    lenth= "0" +lenth;

    }returnreverseString(lenth);

    }/*** xor运算

    *

    *@paramdata

    *@return

    */

    public static String getBCC(byte[] data) {

    String ret= "";byte BCC[] = new byte[1];for (int i = 0; i < data.length; i++) {

    BCC[0] = (byte) (BCC[0] ^data[i]);

    }

    String hex= Integer.toHexString(BCC[0] & 0xFF);if (hex.length() == 1) {

    hex= '0' +hex;

    }

    ret+=hex.toUpperCase();returnret;

    }

    }

    展开全文
  • 运行MainFrame.java 打开程序,设置采集结果,自定义通讯协议数据,解析二进制、十六进制数据。
  • JAVA调用医疗设备接口的源码大数据 快速开始 docker pull cloudera/quickstart:latest docker run --hostname=quickstart.cloudera --privileged=true -v /tmp/:/tmp/ -it cloudera/quickstart /usr/bin/docker-...
  • java中modbus协议连接

    2021-03-08 07:21:52
    modbus在java中的使用,首先maven的pom中引入modbus4j包com.infiniteautomationmodbus4j3.0.32. 我们创建类:ModBus4JTCPClient,创建ModbusMaster连接对象,以及读取寄存器方法package io.powerx.test;import org....
  • Java内存模型定义了Java虚拟机如何与计算机内存进行交互。Java虚拟机是一个完整的计算机模型,所以自然也包含内存模型,也就是Java内存模型。如果你想要正确地设计并发程序,了解Java内存模型非常重要。Java内存模型...
  • JAVA对接海康威视开发文档
  • java使用udp协议进行数据收发处理,java使用udp协议进行数据收发处理
  • 海康AI摄像头对接
  • 最近几天就是把接口和UI都对上了,动态获取到需要的值,都是走网络走数据库的 。
  • java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用,从而保证了该...
  • 收到的一份需求任务是对接硬件,TCP通信,并给出通信端口与数据包格式,如下:0x01. 首先编写了一个简单的十六进制转 byte[] 数组与 byte[] 转换16进制字符串的两个方法,如...
  • 请问有人知道java中有没有和PHP中的workerman有类似功能的插件或框架,用来做java硬件交互,和硬件设备建立长连接,来进行通信传输命令等...
  • 适应各种语言的短信终端。可以使用PHP进行开发,也可以用asp和Java 进行开发
  • MQTT可以由多种语言来实现,下面来记录一下Java语言的简单实现 1、首先在idea里面配置所需库 https://pan.baidu.com/s/1QW4Pks_nEQW1o1JktgJOmg 提取码:kj7e 获得jar包 2、下面附上客户端类和回调类 回调类的...
  • 在需要开始发送的地方写线程开启,在需要关闭和OnDestiory里面条用关闭 //还有一种方法是用sleep不推荐使用,一般硬件要求比较严格sleep对于时间有一个累计的过程不提倡使用,在SerialHelper.Java里面有个方法也是做...
  • JAVA实现饭店点菜系统详解

    千次阅读 多人点赞 2021-08-03 16:27:54
    JAVA实现饭店点菜系统 在这个暑假,我会将一些 网络上比较经典的 java 编程练习题。 做一做,发布到 博客来。是对我自己学习的监督,也是为了方便 大家 借鉴学习交流。大家一起共同进步。 这个点菜系统,和我之前...
  • 对了解物联网通讯协议的入门知识,希望能帮到程序员们
  • java web项目如何与硬件设备(物联网)进行对接

    万次阅读 多人点赞 2018-02-12 14:38:13
    说说做过的粮库项目用到的硬件设备与怎么样与java web项目进行对接。 首先是出入库系统。 粮食出入库系统是最基本的系统。没有粮食的入,出,就没有后面的粮食的管理,粮情的检测等。出入库系统最好的是C/S系统,C/S...
  • Java通过rs458串口与硬件设备交互: **需求背景:**java代码访问雷达水位计,发送请求代码,接收返回代码,解析数据转换为double格式后发送给位于其它服务器的Java程序。 串口不同于socket通信,没有url与端口。串口...
  • Java对接微盟开放平台

    2022-03-09 13:55:56
    Java对接微盟开放平台1. 微盟开放平台概述1.1 微盟云简介1.2 微盟云接入方式1.3 微盟云能力介绍2. 微盟授权商户自用对接2.1 微盟授权业务需求2.2 微盟商户授权流程2.3 微盟商户授权步骤3. 微盟授权服务商对接4. 微盟...
  • 海康硬件对接(超脑)

    千次阅读 2021-10-28 15:48:17
    最近在搞硬件设备 有一说一 海康的官网客服的确不是狠给力 很多时候都在跟你绕圈子 这也导致在遇见很多问题的时候总是一脸懵逼 言归正传 最近在搞垃圾满溢的报警 做过硬件的都知道 这个东西说开了很简单 找到接口 ...
  • //硬件相关指令,根据实际设备来填写 serialPort = (SerialPort) portId.open(portId.getName(), 1000); serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN); serialPort.setSerialPortParams...
  • 海康sdk同时支持监控多个道闸及卡口车辆识别

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,958
精华内容 4,383
关键字:

java硬件对接