Android通过ModbusTCP连接PLC

        本文介绍Android通过局域网连接PLC,PLC端开启了Modbus TCP Server。Android可修改数据块中的值实现控制硬件的功能。

        项目中使用了modbus4Android(GitHub - zgkxzx/Modbus4Android: Modbus for android)。

      第一步:引入jar

                在Module的build.gradle中引入lib:

                https://wwp.lanzoul.com/iyW4U0d0wh1e
                密码:heq0

        implementation files('libs\\modbus4Android-1.2.jar')

       第二步:创建连接

/**
     * 初始化plc链接
     * @param modbusIp
     * @param modbusPort
     */
    public static void initModubusTCP(String modbusIp,Integer modbusPort){
        ModbusReq.getInstance().setParam(new ModbusParam()
                .setHost("192.168.124.189")
                .setPort(502)
                .setEncapsulated(false)
                .setKeepAlive(true)
                .setTimeout(2000)
                .setRetries(0))
                .init(new OnRequestBack<String>() {
                    @Override
                    public void onSuccess(String s) {
                        Log.d("modbus", "onSuccess " + s);
                    }

                    @Override
                    public void onFailed(String msg) {
                        Log.d("modbus", "onFailed " + msg);
                    }
                });
    }

        第三步:读取线圈数据

        读取slaveId = 1;数据地址为VB10001开始,向后5位的数据;

 ModbusReq.getInstance().readDiscreteInput(new OnRequestBack<boolean[]>() {
                @Override
                public void onSuccess(boolean[] booleen) {
                    Log.d("modbus", "readDiscreteInput onSuccess " + Arrays.toString(booleen));
                }

                @Override
                public void onFailed(String msg) {
                    Log.e("modbus", "readDiscreteInput onFailed " + msg);
                }
            },1,1,5);

        第四步:写(单个)线圈

向slaveId = 1,PLC地址为VB10001,中写入开关量:false(0)

ModbusReq.getInstance().writeCoil(new OnRequestBack<String>() {
                @Override
                public void onSuccess(String s) {
                    Log.e("modbus", "writeCoil onSuccess " + s);
                }

                @Override
                public void onFailed(String msg) {
                    Log.e("modus", "writeCoil onFailed " + msg);
                }
            },1,1,false);

其它读写类型可参考modbus4android中的readme文件。

调试前可通过Modbus poll 连接PLC,测试与PLC的通信和读写数据是否正常。

modbus功能码:

       0x01:读线圈
        0x05:写单个线圈
        0x0F:写多个线圈
        0x02:读离散量输入
        0x04:读输入寄存器
        0x03:读保持寄存器
        0x06:写单个保持寄存器
        0x10:写多个保持寄存器

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值