本文介绍Android通过局域网连接PLC,PLC端开启了Modbus TCP Server。Android可修改数据块中的值实现控制硬件的功能。
项目中使用了modbus4Android(https://github.com/zgkxzx/Modbus4Android)。
在Module的build.gradle中引入lib(免费资源,或者直接在github中下载):
modbus4android
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文件。
{{ cmt.username }}
{{ cmt.content }}
{{ cmt.commentDate | formatDate('YYYY.MM.DD hh:mm') }}