至此modbus_TCPmast管理类基本已经写完并做了一个测试的APP大家可以试一试稍后我把APP的源代码上传上去
上一节使用jamod库做了一个简单的读取,在完善代码的过程中其中写入多寄存器的时候碰到了点问题我把代码贴出来大家注意一下
在写入保持寄存器时需要用到这个请求的方法
public WriteSingleRegisterRequest(int ref, Register registers)
但是Register是个抽象类 new不出来 所以各种搜索,弄不好,突然发现jamod里面竟然有demo瞬间明白了,真正的类在这里呢
public class SimpleRegister extends SynchronizedAbstractRegister implements Register
jamod demo存放的地方大家有时间看一下
/**
* @函数名称: write_F06_4x(写入 功能码6 4x区)
* @功能: 功能码06 写入4x分区(保持寄存器) 单个寄存器数据 此部分的寄存器可读可写 03功能码读取 06写入 16写入多个
* @输入参数: 寄存器起始地址 需要设置的值
* @输出类型:无
* @作者: 腾飞
* function code 06 write single register
*/
public void write_F06_4x(final int register_addr,final int value){
new Thread(new Runnable() {
@Override
public void run() {
try{
connect_device();
//准备请求
SimpleRegister new_out = new SimpleRegister(value);
WriteSingleRegisterRequest req=new WriteSingleRegisterRequest(register_addr,new_out); //写入单个寄存器
req.setUnitID(unitID);//
//准备处理
ModbusTCPTransaction trans = new ModbusTCPTransaction(mconnection);//开始处理
trans.setRequest(req);//设置地址
trans.execute();
WriteSingleRegisterResponse res=(WriteSingleRegisterResponse) trans.getResponse();//获取获取写入线圈请求响应
modbus_callback.mcallback(6,false,"function code 06 write single register");
}catch (Exception e){
modbus_callback.mcallback(6,false,e.getMessage());
}
}
}).start();
}