欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Android端使用Modbus协议的简单方法

程序员文章站 2022-07-02 08:22:00
目录1、导入modbus4android的库2、基于 tcp/ip 的 modbus master/客户端2.1、初始化modbusmaster2.2、读写保持寄存器2.3、读写线圈2.4 回收mas...

点我了解modbus协议

modbus用于设备之间的通信,同样在正常app开发中用的也很少

1、导入modbus4android的库

gayhub地址:github.com/zgkxzx/modb

使用jar包的方式引入可以,也可以直接将这个项目down到本地,引入这个项目,我使用是第二种方法

2、基于 tcp/ip 的 modbus master/客户端

2.1、初始化modbusmaster

        modbusreq.getinstance().setparam(modbusparam()
                .sethost(salveip)//从站的ip地址
                .setport(salveport)//从站的端口
                .setencapsulated(false)//
                .setkeepalive(true)
                .settimeout(2000)
                .setretries(0))
                .init(object : onrequestback<string> {
                    override fun onsuccess(t: string?) {
                   
                    }

                    override fun onfailed(msg: string?) {
                      
                    }
                })

2.2、读写保持寄存器

读保持寄存器
/**
 * function code 3
 * read holding registers
 *
 * @param onrequestback callback
 * @param slaveid       slave id 从站id
 * @param start         start address 读取保持寄存器的开始位置
 * @param len           length 读取的数据长度
 */
 modbusreq.getinstance().readholdingregisters(object : onrequestback<shortarray> {
            @suppresslint("settexti18n")
            override fun onsuccess(t: shortarray?) {//这个就是读取到的数据
            
            }

            override fun onfailed(msg: string?) {
                
            }
        }, slaveid, shart, len)

写保持寄存器

/**
 * function code 16
 * write registers
 *
 * @param onrequestback callback
 * @param slaveid       slave id
 * @param start         start address
 * @param values        values
 */
 modbusreq.getinstance().writeregisters(object : onrequestback<string> {
            override fun onsuccess(s: string) {

            }

            override fun onfailed(msg: string) {
            
            }
        }, slaveid, start, shortarray)
        

2.3、读写线圈

读线圈

读线圈
/**
 * function code 1
 * read coil register
 *
 * @param onrequestback callback
 * @param slaveid       slave id
 * @param start         start address
 * @param len           length
 */
modbusreq.getinstance().readcoil(object :onrequestback<booleanarray>{
    override fun onsuccess(t: booleanarray?) {
       
    }

    override fun onfailed(msg: string?) {
       
    }
},1,1,10)

写线圈

modbusreq.getinstance().writecoils(object :onrequestback<string>{
    override fun onfailed(msg: string?) {
        todo("not implemented") //to change body of created functions use file | settings | file templates.
    }

    override fun onsuccess(t: string?) {
        todo("not implemented") //to change body of created functions use file | settings | file templates.
    }
},1,1, arrayof(true,true,false,false).tobooleanarray())

各个功能的用法都基本上差不多,就是方法名和功能码不一样,读的时候都是传入从站的id和开始的位置,还有要读取的长度,写的时候也是传入一个从站地址,开始的位置和一个数组,依次将数组的值从开始的位置写入

2.4 回收master

modbusreq.getinstance().destory()

3、基于 tcp/ip 的 modbus salve/服务端

启动服务

var modbusslave=tcpslave(502,false)//默认端口502,不开启压缩儿
modbusslave.addprocessimage(basicprocessimage(1))//初始化数据存储的镜像,
modbusslave.start()//关闭服务 stop方法

4、总结

到此这篇关于android端使用modbus协议的文章就介绍到这了,更多相关android端使用modbus协议内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!